summaryrefslogtreecommitdiffstats
path: root/Projects/Asteroids/src/WinWrapper.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-07-04 17:20:10 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-07-04 17:20:10 +0000
commitf7d81819a1a59a8ae3734f22d4481fa9d6976155 (patch)
treee4b5679a2a7b54f8e8044f935f18f2db15a71b3b /Projects/Asteroids/src/WinWrapper.cpp
parentEnabled switching between D3D and Vulkan in asteroids demo (diff)
downloadDiligentEngine-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.cpp13
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