[dx8] Fullscreen troubles... [solved]

Started by
5 comments, last by The Forgotten Mindset 18 years, 10 months ago
Hey guys, sorry for the newb question but, this code doesn't work in fullscreen (surprised?) I get an error on the CreateDevice() call, I tried looking it up but it was some weird negative number that didn't match anything. Oh, and it doesn't work in REF either.

// Initialize D3D!!!!!! //

D3DDISPLAYMODE		d3ddm;
D3DPRESENT_PARAMETERS	d3dpp;
ZeroMemory(&d3ddm, sizeof(d3ddm));
ZeroMemory(&d3dpp, sizeof(d3dpp));


if((m_pD3D = Direct3DCreate8(D3D_SDK_VERSION))==NULL)
	return FALSE;


if( m_Windowed )	// Works
{
	if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
		return FALSE;

	d3dpp.Windowed         = TRUE;
	d3dpp.SwapEffect       = D3DSWAPEFFECT_COPY_VSYNC;
	d3dpp.BackBufferFormat = d3ddm.Format;
}
else	// Make FullScreen -Doesn't work
{
	// Find the matching fullscreen display mode
	for(UINT x = 0; x < m_pD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT); x++)
	{
		m_pD3D->EnumAdapterModes(0, x, &d3ddm);
		if(d3ddm.Width == m_Width)
		{
			if(d3ddm.Height == m_Height)
			{
				if((d3ddm.Format == D3DFMT_R5G6B5) || (d3ddm.Format == D3DFMT_X1R5G5B5)
					|| (d3ddm.Format == D3DFMT_X4R4G4B4))
				{
					if(m_Depth == 16)
					{
						break;	// found the right format
					}
				}
				else if((d3ddm.Format == D3DFMT_R8G8B8) || (d3ddm.Format == D3DFMT_X8R8G8B8))
				{
					if(m_Depth == 32)
					{
						break;	// found the right format
					}
				}
			}
		}// end for loop
	}

	d3dpp.Windowed				= FALSE;
	d3dpp.FullScreen_RefreshRateInHz	= D3DPRESENT_RATE_DEFAULT;
	d3dpp.FullScreen_PresentationInterval	= D3DPRESENT_INTERVAL_ONE;

	d3dpp.BackBufferCount	= 1;
	d3dpp.BackBufferWidth	= m_Width;
	d3dpp.BackBufferHeight	= m_Height;
	d3dpp.BackBufferFormat	= m_Format = d3ddm.Format;


}// end else if fullscreen


 //Create a Direct3D device.
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd,
                               D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &m_pD3DDevice)))
	return FALSE; // enters here, it failed





I hate this bug, please squash it :) EDIT: Addled "[solved]" to title. What a newbish thread of mine :/ [Edited by - The Forgotten Mindset on July 2, 2005 12:43:43 AM]
The G'Bro GameDev Society! -The Southeastern US GameDev Gathering Group
Advertisement
What are you settings the width, height, and depth too? I'm having no problem running this code (other than I seem to have a memory leak for no reason at all.)

Scratch that, I'm stupid and I was running it in windowed mode.

I get this error:
Direct3D8: (ERROR) :Invalid parameter for SwapEffect for D3DPRESENT_PARAMETERS. Must be one of D3DSWAPEFFECTS_COPY, D3DSWAPEFFECTS_COPY_VSYNC, D3DSWAPEFFECTS_DISCARD, or D3DSWAPEFFECTS_FLIP. CreateDevice/Reset Fails.
800x600x16

And how can you tell that there is a memory leak?
The G'Bro GameDev Society! -The Southeastern US GameDev Gathering Group
I can tell that there is a memory leak by my debugger (I'm using the debug version of D3D.) Also, check my above post, I edited it.

I get this error:
Direct3D8: (ERROR) :Invalid parameter for SwapEffect for D3DPRESENT_PARAMETERS. Must be one of D3DSWAPEFFECTS_COPY, D3DSWAPEFFECTS_COPY_VSYNC, D3DSWAPEFFECTS_DISCARD, or D3DSWAPEFFECTS_FLIP. CreateDevice/Reset Fails.

I don't see where you are setting the swap effect for the fullscreen block. I set it to D3DSWAPEFFECT_DISCARD and it works fine (wow, check that out. The error didn't spell it correctly (they added a S just before the underscore.)

Also, you should do a double check for creating the device:
if(FAILED_TO_CREATE_HARDWARE){    if(FAILED_TO_CREATE_SOFTWARE)    {        D3D Doesn't exist        return error    }    software was created}

That way people such as I that have a good graphics card but bad processor (Celeron) can take advantage of hardware.

Edit again: Can I use this code?
Heck yeah!

Thanks, so much! How do you get those error descriptions, I've got the debug dll installed already.

This line of work gets so tedious :)

Ahh, a blank screen. I haven't seen one of those in over a month. [smile]

I'd rate you up, but I already did on my last thread :)

EDIT:

Yes, use this code to your heart's desire :) (that enumerating bit was stolen anyways [grin])

And I was going to get around to that double checking later on just so you know :)
The G'Bro GameDev Society! -The Southeastern US GameDev Gathering Group
I'm using Microsoft Visual C++ 6, and I have the debug output set to max (in the DirectX Control Panel app). Thanks!

The first time I got a blank screen in directx I was showing it to everybody, and they were like "WTF mate?" You've been learning this stuff for 4 years and that is all you've got!? And I say "lets see you do it [grin]"

Edit: And I didn't do it for the ratings, so that doesn't matter :D Chances are you'll help me sometime down the road.
I too am using VC++ 6, but I am unable to change the debug output for some reason.

The slider is faded out and disabled :(

And I'll be sure to help you in your time of need [smile]
(lol, a 2 person thread)
The G'Bro GameDev Society! -The Southeastern US GameDev Gathering Group

This topic is closed to new replies.

Advertisement