diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index 615789fd49..b0f99f41d0 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -385,6 +385,7 @@ CString SetD3DParams( bool &bNewDeviceOut ) else { bNewDeviceOut = false; + //LOG->Warn( "Resetting D3D device" ); HRESULT hr = g_pd3dDevice->Reset( &g_d3dpp ); if( FAILED(hr) ) { @@ -479,6 +480,8 @@ bool D3DReduceParams( D3DPRESENT_PARAMETERS *pp ) /* Set the video mode. */ CString RageDisplay_D3D::TryVideoMode( VideoModeParams p, bool &bNewDeviceOut ) { + //LOG->Warn( "RageDisplay_D3D::TryVideoMode( %d, %d, %d, %d, %d, %d )", p.windowed, p.width, p.height, p.bpp, p.rate, p.vsync ); + if( FindBackBufferType( p.windowed, p.bpp ) == D3DFMT_UNKNOWN ) // no possible back buffer formats return ssprintf( "FindBackBufferType(%i,%i) failed", p.windowed, p.bpp ); // failed to set mode @@ -632,6 +635,8 @@ CString RageDisplay_D3D::TryVideoMode( VideoModeParams p, bool &bNewDeviceOut ) void RageDisplay_D3D::ResolutionChanged() { + //LOG->Warn( "RageDisplay_D3D::ResolutionChanged" ); + #if defined(XBOX) D3DVIEWPORT8 viewData = { 0,0,640,480, 0.f, 1.f }; g_pd3dDevice->SetViewport( &viewData ); @@ -642,10 +647,13 @@ void RageDisplay_D3D::ResolutionChanged() void RageDisplay_D3D::SetViewport(int shift_left, int shift_down) { - /* left and down are on a 0..SCREEN_WIDTH, 0..SCREEN_HEIGHT scale. - * Scale them to the actual viewport range. */ VideoModeParams p; GraphicsWindow::GetParams( p ); + + //LOG->Warn( "RageDisplay_D3D::SetViewport %d %d", p.width, p.height ); + + /* left and down are on a 0..SCREEN_WIDTH, 0..SCREEN_HEIGHT scale. + * Scale them to the actual viewport range. */ shift_left = int( shift_left * float(p.width) / SCREEN_WIDTH ); shift_down = int( shift_down * float(p.height) / SCREEN_HEIGHT ); diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 5502392350..71d09684e2 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -598,6 +598,8 @@ void SetupExtensions() void RageDisplay_OGL::ResolutionChanged() { + //LOG->Warn( "RageDisplay_OGL::ResolutionChanged" ); + SetViewport(0,0); /* Clear any junk that's in the framebuffer. */ @@ -610,7 +612,8 @@ void RageDisplay_OGL::ResolutionChanged() // need to be reloaded. CString RageDisplay_OGL::TryVideoMode( VideoModeParams p, bool &bNewDeviceOut ) { -// LOG->Trace( "RageDisplay_OGL::SetVideoMode( %d, %d, %d, %d, %d, %d )", windowed, width, height, bpp, rate, vsync ); + //LOG->Warn( "RageDisplay_OGL::TryVideoMode( %d, %d, %d, %d, %d, %d )", p.windowed, p.width, p.height, p.bpp, p.rate, p.vsync ); + CString err; err = g_pWind->TryVideoMode( p, bNewDeviceOut ); if( err != "" ) @@ -645,12 +648,17 @@ CString RageDisplay_OGL::TryVideoMode( VideoModeParams p, bool &bNewDeviceOut ) void RageDisplay_OGL::SetViewport(int shift_left, int shift_down) { + int width = g_pWind->GetActualVideoModeParams().width; + int height = g_pWind->GetActualVideoModeParams().height; + + //LOG->Warn( "RageDisplay_OGL::SetViewport( %d, %d )", width, height ); + /* left and down are on a 0..SCREEN_WIDTH, 0..SCREEN_HEIGHT scale. * Scale them to the actual viewport range. */ - shift_left = int( shift_left * float(g_pWind->GetActualVideoModeParams().width) / SCREEN_WIDTH ); - shift_down = int( shift_down * float(g_pWind->GetActualVideoModeParams().height) / SCREEN_HEIGHT ); + shift_left = int( shift_left * float(width) / SCREEN_WIDTH ); + shift_down = int( shift_down * float(height) / SCREEN_HEIGHT ); - glViewport( shift_left, -shift_down, g_pWind->GetActualVideoModeParams().width, g_pWind->GetActualVideoModeParams().height ); + glViewport( shift_left, -shift_down, width, height ); } int RageDisplay_OGL::GetMaxTextureSize() const diff --git a/stepmania/src/arch/LowLevelWindow/LowLevelWindow_Win32.cpp b/stepmania/src/arch/LowLevelWindow/LowLevelWindow_Win32.cpp index ae940368b9..2f348faf53 100644 --- a/stepmania/src/arch/LowLevelWindow/LowLevelWindow_Win32.cpp +++ b/stepmania/src/arch/LowLevelWindow/LowLevelWindow_Win32.cpp @@ -74,7 +74,9 @@ void DumpPixelFormat( const PIXELFORMATDESCRIPTOR &pfd ) else { str += "software "; bInvalidFormat = true; } } else + { str += "ICD "; + } if( pfd.iPixelType != PFD_TYPE_RGBA ) { str += "indexed "; bInvalidFormat = true; } if( !(pfd.dwFlags & PFD_SUPPORT_OPENGL) ) { str += "!OPENGL "; bInvalidFormat = true; } @@ -98,6 +100,8 @@ void DumpPixelFormat( const PIXELFORMATDESCRIPTOR &pfd ) * LowLevelWindow_Win32::~LowLevelWindow_Win32 will call Shutdown(). */ CString LowLevelWindow_Win32::TryVideoMode( VideoModeParams p, bool &bNewDeviceOut ) { + //LOG->Warn( "LowLevelWindow_Win32::TryVideoMode" ); + ASSERT_M( p.bpp == 16 || p.bpp == 32, ssprintf("%i", p.bpp) ); bNewDeviceOut = false; diff --git a/stepmania/src/archutils/Win32/GraphicsWindow.cpp b/stepmania/src/archutils/Win32/GraphicsWindow.cpp index 523d2b5c02..dacfd53746 100644 --- a/stepmania/src/archutils/Win32/GraphicsWindow.cpp +++ b/stepmania/src/archutils/Win32/GraphicsWindow.cpp @@ -75,7 +75,15 @@ LRESULT CALLBACK GraphicsWindow::GraphicsWindow_WndProc( HWND hWnd, UINT msg, WP * because that's where most other apps seem to do it. */ if( g_bHasFocus && !bHadFocus ) { - ChangeDisplaySettings( &g_FullScreenDevMode, CDS_FULLSCREEN ); + // Set the video mode through DISPLAY instead of ChangeDisplaySettings + // so that the viewport is correctly reset. + + //ChangeDisplaySettings( &g_FullScreenDevMode, CDS_FULLSCREEN ); + bool bNewDevice; + VideoModeParams p; + GetPreferredVideoModeParams( p ); + DISPLAY->SetVideoMode( p, bNewDevice ); + ShowWindow( g_hWndMain, SW_SHOWNORMAL ); } else if( !g_bHasFocus && bHadFocus ) @@ -156,6 +164,8 @@ LRESULT CALLBACK GraphicsWindow::GraphicsWindow_WndProc( HWND hWnd, UINT msg, WP void GraphicsWindow::SetVideoModeParams( const VideoModeParams &p ) { + //LOG->Warn( "GraphicsWindow::SetVideoModeParams %d %d", p.width, p.height ); + g_CurrentParams = p; } @@ -285,6 +295,8 @@ void GraphicsWindow::ConfigureGraphicsWindow( const VideoModeParams &p ) SetRect( &WindowRect, 0, 0, p.width, p.height ); AdjustWindowRect( &WindowRect, iWindowStyle, FALSE ); + //LOG->Warn( "w = %d, h = %d", p.width, p.height ); + const int iWidth = WindowRect.right - WindowRect.left; const int iHeight = WindowRect.bottom - WindowRect.top; @@ -436,6 +448,8 @@ void GraphicsWindow::Update() if( g_bResolutionChanged && DISPLAY != NULL ) { + //LOG->Warn( "Changing resolution" ); + /* Let DISPLAY know that our resolution has changed. (Note that * ResolutionChanged() can come back here, so reset g_bResolutionChanged * first.) */