| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 SetupSoftwareRenderer(*d3d); | 415 SetupSoftwareRenderer(*d3d); |
| 416 | 416 |
| 417 ClientInfoManager* client_info_manager = | 417 ClientInfoManager* client_info_manager = |
| 418 service_locator->GetService<ClientInfoManager>(); | 418 service_locator->GetService<ClientInfoManager>(); |
| 419 client_info_manager->SetSoftwareRenderer(true); | 419 client_info_manager->SetSoftwareRenderer(true); |
| 420 } | 420 } |
| 421 | 421 |
| 422 // Note: SwapEffect=DISCARD is req. for multisample to function | 422 // Note: SwapEffect=DISCARD is req. for multisample to function |
| 423 ZeroMemory(d3d_present_parameters, sizeof(*d3d_present_parameters)); | 423 ZeroMemory(d3d_present_parameters, sizeof(*d3d_present_parameters)); |
| 424 d3d_present_parameters->Windowed = !fullscreen; | 424 d3d_present_parameters->Windowed = !fullscreen; |
| 425 d3d_present_parameters->hDeviceWindow = window; |
| 425 d3d_present_parameters->SwapEffect = D3DSWAPEFFECT_DISCARD; | 426 d3d_present_parameters->SwapEffect = D3DSWAPEFFECT_DISCARD; |
| 426 d3d_present_parameters->BackBufferFormat = D3DFMT_A8R8G8B8; | 427 d3d_present_parameters->BackBufferFormat = D3DFMT_A8R8G8B8; |
| 427 d3d_present_parameters->EnableAutoDepthStencil = FALSE; | 428 d3d_present_parameters->EnableAutoDepthStencil = FALSE; |
| 428 d3d_present_parameters->AutoDepthStencilFormat = D3DFMT_D24S8; | 429 d3d_present_parameters->AutoDepthStencilFormat = D3DFMT_D24S8; |
| 429 d3d_present_parameters->EnableAutoDepthStencil = TRUE; | 430 d3d_present_parameters->EnableAutoDepthStencil = TRUE; |
| 430 // wait for vsync | 431 // wait for vsync |
| 431 d3d_present_parameters->PresentationInterval = D3DPRESENT_INTERVAL_ONE; | 432 d3d_present_parameters->PresentationInterval = D3DPRESENT_INTERVAL_ONE; |
| 432 | 433 |
| 433 if (features->not_anti_aliased() || ForceAntiAliasingOff(d3d)) { | 434 if (features->not_anti_aliased() || ForceAntiAliasingOff(d3d)) { |
| 434 d3d_present_parameters->MultiSampleType = D3DMULTISAMPLE_NONE; | 435 d3d_present_parameters->MultiSampleType = D3DMULTISAMPLE_NONE; |
| (...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1324 D3DFMT_X8R8G8B8, | 1325 D3DFMT_X8R8G8B8, |
| 1325 id - 1, | 1326 id - 1, |
| 1326 &d3d_mode)); | 1327 &d3d_mode)); |
| 1327 } | 1328 } |
| 1328 if (success) { | 1329 if (success) { |
| 1329 mode->Set(d3d_mode.Width, d3d_mode.Height, d3d_mode.RefreshRate, id); | 1330 mode->Set(d3d_mode.Width, d3d_mode.Height, d3d_mode.RefreshRate, id); |
| 1330 } | 1331 } |
| 1331 return success; | 1332 return success; |
| 1332 } | 1333 } |
| 1333 | 1334 |
| 1334 bool RendererD3D9::SetFullscreen(bool fullscreen, | 1335 bool RendererD3D9::GoFullscreen(const DisplayWindow& display, |
| 1335 const DisplayWindow& display, | 1336 int mode_id) { |
| 1336 int mode_id) { | 1337 if (!fullscreen_) { |
| 1337 if (fullscreen != fullscreen_) { | |
| 1338 if (d3d_device_) { // Have we been initialized yet? | 1338 if (d3d_device_) { // Have we been initialized yet? |
| 1339 const DisplayWindowWindows& platform_display = | 1339 const DisplayWindowWindows& platform_display = |
| 1340 static_cast<const DisplayWindowWindows&>(display); | 1340 static_cast<const DisplayWindowWindows&>(display); |
| 1341 HWND window = platform_display.hwnd(); | 1341 HWND window = platform_display.hwnd(); |
| 1342 int refresh_rate = 0; | 1342 int refresh_rate = 0; |
| 1343 bool windowed = true; | 1343 bool windowed = true; |
| 1344 if (fullscreen) { | 1344 |
| 1345 // If fullscreen is requested but the mode is set to | 1345 // Look up the refresh rate, width and height. |
| 1346 // DISPLAY_MODE_DEFAULT then create a non-full-screen window at the | 1346 DisplayMode mode; |
| 1347 // current display resolution. If any other mode is chosen then the | 1347 if (!GetDisplayMode(mode_id, &mode)) { |
| 1348 // windows will change mode and create a true full-screen window. | 1348 LOG(ERROR) << "Failed to GetDisplayMode"; |
| 1349 if (mode_id != DISPLAY_MODE_DEFAULT) { | 1349 return false; |
| 1350 // Look up the refresh rate. | |
| 1351 DisplayMode mode; | |
| 1352 if (!GetDisplayMode(mode_id, &mode)) { | |
| 1353 LOG(ERROR) << "Failed to GetDisplayMode"; | |
| 1354 return false; | |
| 1355 } | |
| 1356 refresh_rate = mode.refresh_rate(); | |
| 1357 windowed = false; | |
| 1358 } | |
| 1359 showing_fullscreen_message_ = true; | |
| 1360 fullscreen_message_timer_.GetElapsedTimeAndReset(); // Reset the timer. | |
| 1361 } else { | |
| 1362 showing_fullscreen_message_ = false; | |
| 1363 } | 1350 } |
| 1351 |
| 1352 int width = mode.width(); |
| 1353 int height = mode.height(); |
| 1354 |
| 1355 // If fullscreen is requested but the mode is set to |
| 1356 // DISPLAY_MODE_DEFAULT then create a non-full-screen window at the |
| 1357 // current display resolution. If any other mode is chosen then the |
| 1358 // windows will change mode and create a true full-screen window. |
| 1359 if (mode_id != DISPLAY_MODE_DEFAULT) { |
| 1360 refresh_rate = mode.refresh_rate(); |
| 1361 windowed = false; |
| 1362 } |
| 1363 |
| 1364 showing_fullscreen_message_ = true; |
| 1365 fullscreen_message_timer_.GetElapsedTimeAndReset(); // Reset the timer. |
| 1366 |
| 1364 d3d_present_parameters_.FullScreen_RefreshRateInHz = refresh_rate; | 1367 d3d_present_parameters_.FullScreen_RefreshRateInHz = refresh_rate; |
| 1365 d3d_present_parameters_.hDeviceWindow = window; | 1368 d3d_present_parameters_.hDeviceWindow = window; |
| 1366 d3d_present_parameters_.Windowed = windowed; | 1369 d3d_present_parameters_.Windowed = windowed; |
| 1367 | 1370 |
| 1368 // Check if the window size is zero. Some drivers will fail because of | 1371 // Check if the window size is zero. Some drivers will fail because of |
| 1369 // that so we'll force a small size in that case. | 1372 // that so we'll force a small size in that case. |
| 1370 RECT windowRect; | |
| 1371 ::GetWindowRect(window, &windowRect); | |
| 1372 int width = windowRect.right - windowRect.left; | |
| 1373 int height = windowRect.bottom - windowRect.top; | |
| 1374 | |
| 1375 if (width == 0 || height == 0) { | 1373 if (width == 0 || height == 0) { |
| 1376 width = 16; | 1374 width = 16; |
| 1377 height = 16; | 1375 height = 16; |
| 1378 } | 1376 } |
| 1379 fullscreen_ = fullscreen; | 1377 fullscreen_ = true; |
| 1380 Resize(width, height); | 1378 Resize(width, height); |
| 1381 } | 1379 } |
| 1382 } | 1380 } |
| 1381 return true; |
| 1382 } |
| 1383 |
| 1384 bool RendererD3D9::CancelFullscreen(const DisplayWindow& display, |
| 1385 int width, |
| 1386 int height) { |
| 1387 if (fullscreen_) { |
| 1388 if (d3d_device_) { // Have we been initialized yet? |
| 1389 const DisplayWindowWindows& platform_display = |
| 1390 static_cast<const DisplayWindowWindows&>(display); |
| 1391 HWND window = platform_display.hwnd(); |
| 1392 showing_fullscreen_message_ = false; |
| 1393 d3d_present_parameters_.FullScreen_RefreshRateInHz = 0; |
| 1394 d3d_present_parameters_.hDeviceWindow = window; |
| 1395 d3d_present_parameters_.Windowed = true; |
| 1396 |
| 1397 // Check if the window size is zero. Some drivers will fail because of |
| 1398 // that so we'll force a small size in that case. |
| 1399 if (width == 0 || height == 0) { |
| 1400 width = 16; |
| 1401 height = 16; |
| 1402 } |
| 1403 fullscreen_ = false; |
| 1404 Resize(width, height); |
| 1405 } |
| 1406 } |
| 1383 return true; | 1407 return true; |
| 1384 } | 1408 } |
| 1385 | 1409 |
| 1386 // Resets the rendering stats and | 1410 // Resets the rendering stats and |
| 1387 bool RendererD3D9::PlatformSpecificStartRendering() { | 1411 bool RendererD3D9::PlatformSpecificStartRendering() { |
| 1388 // Determine whether the device is lost, resetting if possible. | 1412 // Determine whether the device is lost, resetting if possible. |
| 1389 TestLostDevice(); | 1413 TestLostDevice(); |
| 1390 | 1414 |
| 1391 bool result = have_device_; | 1415 bool result = have_device_; |
| 1392 if (result) { | 1416 if (result) { |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1631 static int swizzle_table[] = { 2, 1, 0, 3, }; | 1655 static int swizzle_table[] = { 2, 1, 0, 3, }; |
| 1632 return swizzle_table; | 1656 return swizzle_table; |
| 1633 } | 1657 } |
| 1634 | 1658 |
| 1635 // This is a factory function for creating Renderer objects. Since | 1659 // This is a factory function for creating Renderer objects. Since |
| 1636 // we're implementing D3D9, we only ever return a D3D9 renderer. | 1660 // we're implementing D3D9, we only ever return a D3D9 renderer. |
| 1637 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { | 1661 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { |
| 1638 return RendererD3D9::CreateDefault(service_locator); | 1662 return RendererD3D9::CreateDefault(service_locator); |
| 1639 } | 1663 } |
| 1640 } // namespace o3d | 1664 } // namespace o3d |
| OLD | NEW |