| Index: core/win/d3d9/renderer_d3d9.cc
|
| ===================================================================
|
| --- core/win/d3d9/renderer_d3d9.cc (revision 26426)
|
| +++ core/win/d3d9/renderer_d3d9.cc (working copy)
|
| @@ -422,6 +422,7 @@
|
| // Note: SwapEffect=DISCARD is req. for multisample to function
|
| ZeroMemory(d3d_present_parameters, sizeof(*d3d_present_parameters));
|
| d3d_present_parameters->Windowed = !fullscreen;
|
| + d3d_present_parameters->hDeviceWindow = window;
|
| d3d_present_parameters->SwapEffect = D3DSWAPEFFECT_DISCARD;
|
| d3d_present_parameters->BackBufferFormat = D3DFMT_A8R8G8B8;
|
| d3d_present_parameters->EnableAutoDepthStencil = FALSE;
|
| @@ -1331,52 +1332,75 @@
|
| return success;
|
| }
|
|
|
| -bool RendererD3D9::SetFullscreen(bool fullscreen,
|
| - const DisplayWindow& display,
|
| - int mode_id) {
|
| - if (fullscreen != fullscreen_) {
|
| +bool RendererD3D9::GoFullscreen(const DisplayWindow& display,
|
| + int mode_id) {
|
| + if (!fullscreen_) {
|
| if (d3d_device_) { // Have we been initialized yet?
|
| const DisplayWindowWindows& platform_display =
|
| static_cast<const DisplayWindowWindows&>(display);
|
| HWND window = platform_display.hwnd();
|
| int refresh_rate = 0;
|
| bool windowed = true;
|
| - if (fullscreen) {
|
| - // If fullscreen is requested but the mode is set to
|
| - // DISPLAY_MODE_DEFAULT then create a non-full-screen window at the
|
| - // current display resolution. If any other mode is chosen then the
|
| - // windows will change mode and create a true full-screen window.
|
| - if (mode_id != DISPLAY_MODE_DEFAULT) {
|
| - // Look up the refresh rate.
|
| - DisplayMode mode;
|
| - if (!GetDisplayMode(mode_id, &mode)) {
|
| - LOG(ERROR) << "Failed to GetDisplayMode";
|
| - return false;
|
| - }
|
| - refresh_rate = mode.refresh_rate();
|
| - windowed = false;
|
| - }
|
| - showing_fullscreen_message_ = true;
|
| - fullscreen_message_timer_.GetElapsedTimeAndReset(); // Reset the timer.
|
| - } else {
|
| - showing_fullscreen_message_ = false;
|
| +
|
| + // Look up the refresh rate, width and height.
|
| + DisplayMode mode;
|
| + if (!GetDisplayMode(mode_id, &mode)) {
|
| + LOG(ERROR) << "Failed to GetDisplayMode";
|
| + return false;
|
| }
|
| +
|
| + int width = mode.width();
|
| + int height = mode.height();
|
| +
|
| + // If fullscreen is requested but the mode is set to
|
| + // DISPLAY_MODE_DEFAULT then create a non-full-screen window at the
|
| + // current display resolution. If any other mode is chosen then the
|
| + // windows will change mode and create a true full-screen window.
|
| + if (mode_id != DISPLAY_MODE_DEFAULT) {
|
| + refresh_rate = mode.refresh_rate();
|
| + windowed = false;
|
| + }
|
| +
|
| + showing_fullscreen_message_ = true;
|
| + fullscreen_message_timer_.GetElapsedTimeAndReset(); // Reset the timer.
|
| +
|
| d3d_present_parameters_.FullScreen_RefreshRateInHz = refresh_rate;
|
| d3d_present_parameters_.hDeviceWindow = window;
|
| d3d_present_parameters_.Windowed = windowed;
|
|
|
| // Check if the window size is zero. Some drivers will fail because of
|
| // that so we'll force a small size in that case.
|
| - RECT windowRect;
|
| - ::GetWindowRect(window, &windowRect);
|
| - int width = windowRect.right - windowRect.left;
|
| - int height = windowRect.bottom - windowRect.top;
|
| + if (width == 0 || height == 0) {
|
| + width = 16;
|
| + height = 16;
|
| + }
|
| + fullscreen_ = true;
|
| + Resize(width, height);
|
| + }
|
| + }
|
| + return true;
|
| +}
|
|
|
| +bool RendererD3D9::CancelFullscreen(const DisplayWindow& display,
|
| + int width,
|
| + int height) {
|
| + if (fullscreen_) {
|
| + if (d3d_device_) { // Have we been initialized yet?
|
| + const DisplayWindowWindows& platform_display =
|
| + static_cast<const DisplayWindowWindows&>(display);
|
| + HWND window = platform_display.hwnd();
|
| + showing_fullscreen_message_ = false;
|
| + d3d_present_parameters_.FullScreen_RefreshRateInHz = 0;
|
| + d3d_present_parameters_.hDeviceWindow = window;
|
| + d3d_present_parameters_.Windowed = true;
|
| +
|
| + // Check if the window size is zero. Some drivers will fail because of
|
| + // that so we'll force a small size in that case.
|
| if (width == 0 || height == 0) {
|
| width = 16;
|
| height = 16;
|
| }
|
| - fullscreen_ = fullscreen;
|
| + fullscreen_ = false;
|
| Resize(width, height);
|
| }
|
| }
|
|
|