Sign in to follow this  
MTclip

Resizing a DirectX application

Recommended Posts

my question has to do with both windowed and full screen application... in most games you can change your resolution and such durring play. 1.Do you just call d3dDevice->Reset(presentParam) where the presentation params have the option you want? 2.do you have to tell windows you are changing the size?.. 3.when switching from full screen to window or vice-versa how do you tell windows, do you just kill your current window and recreate it?

Share this post


Link to post
Share on other sites
1. If you are not fullscreen this will work. Otherwise, you have to release any textures (and possibly meshes) that you have, resize, then re-create all textures (and/or meshes).

2. If fullscreen, you shouldn't have to, but it might be good practice to. If windowed, Windows will usually tell you that your window resized (WM_SIZE message).

3. You don't have to kill the window itself. Refer to answer 1 as it's the same situation.

Share this post


Link to post
Share on other sites
Quote:
Original post by MTclip
my question has to do with both windowed and full screen application...

in most games you can change your resolution and such durring play.

1.Do you just call d3dDevice->Reset(presentParam) where the presentation params have the option you want?


Yes. Along with the other things you need to do when you Reset() such as releasing all resources in the default pool and re-creating them after the reset, calling the OnReset() method of D3DX objects which require it, and not assuming render states will be set to the same values they were at before the reset.

Quote:
2.do you have to tell windows you are changing the size?..


Fullscreen, it's not strictly necessary (D3D hooks your window); windowed, you should change the size of the window.


Quote:
3.when switching from full screen to window or vice-versa how do you tell windows, do you just kill your current window and recreate it?


You can use GetWindowLong() to retrieve the current window style, and then SetWindowLong() to restore it when you toggle between the two. Other than setting appropriate window styles (i.e. borders and title bar for windowed), and how you handle messages (i.e. things like disabling screensavers and non-client mouse clicks are ok in fullscreen, but less so in windowed mode where your primary focus should be "playing nice" with everything else that's running on the desktop), D3D will do the rest.

The sample framework that comes with the DirectX SDK does "the right thing" in all these cases and more (such as Fast User Switching in XP etc), so if you're ever in doubt about how to handle something, use that as reference.

[edit]bah, beaten by a whisker [wink][/edit]

Share this post


Link to post
Share on other sites
Im not doing something right..

I should say this, my app recovers from a lost device..

every time i try to resize the backbuffer ( in windowed mode ) it fails..
here is what should be the relevant code.. what else do i need to do.. the app has no resources I am just clearing the backbuffer and presenting...



// here is where i catch
// the resize message
case WM_EXITSIZEMOVE:
m_isBeeingSized = false;
OnChangeSettings();
return true;


// OnChangeSettings()
void SFGraphics::OnChangeSettings()
{
// find the width & height
if( m_windowed )
{
// determine the width and height of the window
RECT rc;
GetClientRect(m_hWnd,&rc);
m_width = rc.right - rc.left;
m_height = rc.bottom - rc.top;
}
else
{

}

// change the backbuffer size
m_d3dpp.BackBufferWidth = m_width;
m_d3dpp.BackBufferHeight = m_height;

// reset the device
HRESULT hr = m_pDevice->Reset( &m_d3dpp );

// did it work?
if( hr == D3DERR_INVALIDCALL )
{

MessageBox( m_hWnd, " CRAP!!! ","ERROR", MB_OK );
}

}







<EDIT>:: well if I call my OnDeviceLost() it seems to work ;P

[Edited by - MTclip on March 11, 2006 11:29:54 PM]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this