diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-07-04 17:20:10 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-07-04 17:20:10 +0000 |
| commit | f7d81819a1a59a8ae3734f22d4481fa9d6976155 (patch) | |
| tree | e4b5679a2a7b54f8e8044f935f18f2db15a71b3b /Projects/Asteroids/src/WinWrapper.cpp | |
| parent | Enabled switching between D3D and Vulkan in asteroids demo (diff) | |
| download | DiligentEngine-f7d81819a1a59a8ae3734f22d4481fa9d6976155.tar.gz DiligentEngine-f7d81819a1a59a8ae3734f22d4481fa9d6976155.zip | |
Asteroids demo: only recreating the window when render mode changes
Diffstat (limited to 'Projects/Asteroids/src/WinWrapper.cpp')
| -rw-r--r-- | Projects/Asteroids/src/WinWrapper.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Projects/Asteroids/src/WinWrapper.cpp b/Projects/Asteroids/src/WinWrapper.cpp index f632688..036b205 100644 --- a/Projects/Asteroids/src/WinWrapper.cpp +++ b/Projects/Asteroids/src/WinWrapper.cpp @@ -43,6 +43,7 @@ bool gd3d11Available = false; bool gd3d12Available = false; bool gVulkanAvailable = false; Settings::RenderMode gLastFrameRenderMode = static_cast<Settings::RenderMode>(-1); +bool gUpdateWorkload = false; GUI gGUI; GUIText* gFPSControl; @@ -208,19 +209,19 @@ LRESULT CALLBACK WindowProc( case 'B': if (gSettings.mode == Settings::RenderMode::DiligentD3D12 || gSettings.mode == Settings::RenderMode::DiligentVulkan) { gSettings.resourceBindingMode = (gSettings.resourceBindingMode + 1) % 3; - gLastFrameRenderMode = static_cast<Settings::RenderMode>(-1); + gUpdateWorkload = true; } return 0; case VK_ADD: case VK_OEM_PLUS: gSettings.numThreads = std::min(gSettings.numThreads+1, 16); - gLastFrameRenderMode = static_cast<Settings::RenderMode>(-1); + gUpdateWorkload = true; return 0; case VK_SUBTRACT: case VK_OEM_MINUS: gSettings.numThreads = std::max(gSettings.numThreads-1, 2); - gLastFrameRenderMode = static_cast<Settings::RenderMode>(-1); + gUpdateWorkload = true; return 0; case '1': gSettings.mode = gd3d11Available ? Settings::RenderMode::NativeD3D11 : gSettings.mode; return 0; @@ -518,7 +519,7 @@ int main(int argc, char** argv) } // If we swap to a new API we need to recreate swap chains - if (gLastFrameRenderMode != gSettings.mode) { + if (gLastFrameRenderMode != gSettings.mode || gUpdateWorkload) { // Delete workload first so that the window does not // post quit message to the queue delete gWorkloadD3D11; @@ -527,9 +528,11 @@ int main(int argc, char** argv) gWorkloadD3D12 = nullptr; delete gWorkloadDE; gWorkloadDE = nullptr; - CreateDemoWindow(hWnd); + if (hWnd == NULL || gLastFrameRenderMode != gSettings.mode) + CreateDemoWindow(hWnd); InitWorkload(hWnd, asteroids); gLastFrameRenderMode = gSettings.mode; + gUpdateWorkload = false; } // Still need to process inertia even when no interaction is happening |
