Fix crash alt+tabbing in and out of fullscreen on Voodoo3+D3D+WinXP.

This commit is contained in:
Chris Danford
2003-05-30 00:30:40 +00:00
parent 96239cb2d0
commit 2a85a2b9df
3 changed files with 40 additions and 3 deletions
+1 -1
View File
@@ -1007,7 +1007,7 @@ void NoteDataUtil::Wide( NoteData &in )
// make all all quarter notes jumps
int max_row = in.GetLastRow();
for( int i=0; i<=max_row; i+=ROWS_PER_BEAT )
for( int i=0; i<=max_row; i+=ROWS_PER_BEAT*2 ) // every even beat
{
if( in.GetNumTapNonEmptyTracks(i) != 1 )
continue; // skip. Don't place during holds
+33 -2
View File
@@ -384,6 +384,8 @@ HWND GetHwnd()
/* Set the video mode. */
bool RageDisplay_D3D::SetVideoMode( bool windowed, int width, int height, int bpp, int rate, bool vsync, CString sWindowTitle, CString sIconFile )
{
HRESULT hr;
if( FindBackBufferType( windowed, bpp ) == -1 ) // no possible back buffer formats
return false;
@@ -391,6 +393,31 @@ bool RageDisplay_D3D::SetVideoMode( bool windowed, int width, int height, int bp
SDL_WM_SetCaption(sWindowTitle, "");
mySDL_WM_SetIcon( sIconFile );
/* Round to the nearest valid fullscreen resolution */
if( !windowed )
{
if( width <= 320 ) width = 320;
else if( width <= 400 ) width = 400;
else if( width <= 512 ) width = 512;
else if( width <= 640 ) width = 640;
else if( width <= 800 ) width = 800;
else if( width <= 1024 ) width = 1024;
else if( width <= 1280 ) width = 1280;
switch( width )
{
case 320: height = 240; break;
case 400: height = 300; break;
case 512: height = 384; break;
case 640: height = 480; break;
case 800: height = 600; break;
case 1024: height = 768; break;
case 1280: height = 1024; break;
default: ASSERT(0);
}
}
// HACK: On Windows 98, we can't call SDL_SetVideoMode while D3D is full screen.
// It will result in "SDL_SetVideoMode failed: DirectDraw2::CreateSurface(PRIMARY):
@@ -435,7 +462,6 @@ bool RageDisplay_D3D::SetVideoMode( bool windowed, int width, int height, int bp
if( bCreateNewDevice ) // device is not yet created. We need to create it
{
HRESULT hr;
hr = g_pd3d->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
@@ -456,7 +482,12 @@ bool RageDisplay_D3D::SetVideoMode( bool windowed, int width, int height, int bp
}
else
{
g_pd3dDevice->Reset( &g_d3dpp );
hr = g_pd3dDevice->Reset( &g_d3dpp );
if( FAILED(hr) )
{
SDL_QuitSubSystem(SDL_INIT_VIDEO); // exit out of full screen. The ~RageDisplay will not be called!
RageException::Throw( "g_pd3dDevice->Reset failed: '%s'", DXGetErrorString8(hr) );
}
}
if( this->IsWindowed() )
+6
View File
@@ -563,6 +563,12 @@ Uint8 mySDL_EventState(Uint8 type, int state)
void mySDL_WM_SetIcon( CString sIconFile )
{
if( sIconFile.empty() )
{
SDL_WM_SetIcon(NULL, NULL);
return;
}
SDL_Surface *srf = IMG_Load(sIconFile);
SDL_SetColorKey( srf, SDL_SRCCOLORKEY, SDL_MapRGB(srf->format, 0xFF, 0, 0xFF));