summaryrefslogtreecommitdiffstats
path: root/Projects/Asteroids/src/WinWrapper.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-07-04 17:08:57 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-07-04 17:08:57 +0000
commit73e144f44e084244749af04106dfd3b6d9e331ac (patch)
treebf158368f07293cf49f7b956788ea1829dd0d4d7 /Projects/Asteroids/src/WinWrapper.cpp
parentEnabled resource binding mode toggle in Vulkan mode in asteroids demo (diff)
downloadDiligentEngine-73e144f44e084244749af04106dfd3b6d9e331ac.tar.gz
DiligentEngine-73e144f44e084244749af04106dfd3b6d9e331ac.zip
Enabled switching between D3D and Vulkan in asteroids demo
Diffstat (limited to 'Projects/Asteroids/src/WinWrapper.cpp')
-rw-r--r--Projects/Asteroids/src/WinWrapper.cpp84
1 files changed, 52 insertions, 32 deletions
diff --git a/Projects/Asteroids/src/WinWrapper.cpp b/Projects/Asteroids/src/WinWrapper.cpp
index ff3d82b..f632688 100644
--- a/Projects/Asteroids/src/WinWrapper.cpp
+++ b/Projects/Asteroids/src/WinWrapper.cpp
@@ -131,7 +131,10 @@ LRESULT CALLBACK WindowProc(
{
switch (message) {
case WM_DESTROY:
- PostQuitMessage(0);
+ // If all workloads are null, we are recreating the window
+ // and should not post quit message
+ if(gWorkloadD3D11 || gWorkloadD3D12 || gWorkloadDE)
+ PostQuitMessage(0);
return 0;
case WM_SIZE: {
@@ -224,7 +227,7 @@ LRESULT CALLBACK WindowProc(
case '2': gSettings.mode = gd3d12Available ? Settings::RenderMode::NativeD3D12 : gSettings.mode; return 0;
case '3': gSettings.mode = gd3d11Available ? Settings::RenderMode::DiligentD3D11 : gSettings.mode; return 0;
case '4': gSettings.mode = gd3d12Available ? Settings::RenderMode::DiligentD3D12 : gSettings.mode; return 0;
- //case '5': gSettings.mode = gVulkanAvailable ? Settings::RenderMode::DiligentVulkan : gSettings.mode; return 0;
+ case '5': gSettings.mode = gVulkanAvailable ? Settings::RenderMode::DiligentVulkan : gSettings.mode; return 0;
case VK_ESCAPE:
SendMessage(hWnd, WM_CLOSE, 0, 0);
@@ -239,6 +242,7 @@ LRESULT CALLBACK WindowProc(
}
switch (wParam) {
case VK_RETURN:
+ gSettings.windowed = !gSettings.windowed;
ToggleFullscreen(hWnd);
break;
}
@@ -287,12 +291,6 @@ LRESULT CALLBACK WindowProc(
int InitWorkload(HWND hWnd, AsteroidsSimulation &asteroids)
{
- delete gWorkloadD3D11;
- gWorkloadD3D11 = nullptr;
- delete gWorkloadD3D12;
- gWorkloadD3D12 = nullptr;
- delete gWorkloadDE;
- gWorkloadDE = nullptr;
switch (gSettings.mode)
{
case Settings::RenderMode::NativeD3D11:
@@ -347,6 +345,41 @@ int InitWorkload(HWND hWnd, AsteroidsSimulation &asteroids)
return 0;
}
+void CreateDemoWindow(HWND& hWnd)
+{
+ RECT windowRect = { 100, 100, gSettings.windowWidth, gSettings.windowHeight };
+ if(hWnd)
+ {
+ GetWindowRect(hWnd, &windowRect);
+ DestroyWindow(hWnd);
+ }
+ else
+ {
+ AdjustWindowRect(&windowRect, windowedStyle, FALSE);
+ }
+
+ // create the window and store a handle to it
+ hWnd = CreateWindowEx(
+ WS_EX_APPWINDOW,
+ "AsteroidsDemoWndClass",
+ "Asteroids",
+ windowedStyle,
+ windowRect.left,
+ windowRect.top,
+ windowRect.right - windowRect.left,
+ windowRect.bottom - windowRect.top,
+ NULL,
+ NULL,
+ GetModuleHandle(NULL),
+ NULL);
+
+ if (!gSettings.windowed) {
+ ToggleFullscreen(hWnd);
+ }
+
+ SetForegroundWindow(hWnd);
+}
+
int main(int argc, char** argv)
{
#if defined(_DEBUG) || defined(DEBUG)
@@ -443,32 +476,10 @@ int main(int argc, char** argv)
windowClass.lpfnWndProc = WindowProc;
windowClass.hInstance = GetModuleHandle(NULL);
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
- windowClass.lpszClassName = "AsteroidsD3D12WindowClass";
+ windowClass.lpszClassName = "AsteroidsDemoWndClass";
RegisterClassEx(&windowClass);
- RECT windowRect = { 0, 0, gSettings.windowWidth, gSettings.windowHeight };
- AdjustWindowRect(&windowRect, windowedStyle, FALSE);
-
- // create the window and store a handle to it
- auto hWnd = CreateWindowEx(
- WS_EX_APPWINDOW,
- "AsteroidsD3D12WindowClass",
- "Asteroids",
- windowedStyle,
- 0, // CW_USE_DEFAULT
- 0, // CW_USE_DEFAULT
- windowRect.right - windowRect.left,
- windowRect.bottom - windowRect.top,
- NULL,
- NULL,
- windowClass.hInstance,
- NULL);
-
- if (!gSettings.windowed) {
- ToggleFullscreen(hWnd);
- }
-
- SetForegroundWindow(hWnd);
+ HWND hWnd = NULL;
// Initialize performance counters
UINT64 perfCounterFreq = 0;
@@ -508,6 +519,15 @@ int main(int argc, char** argv)
// If we swap to a new API we need to recreate swap chains
if (gLastFrameRenderMode != gSettings.mode) {
+ // Delete workload first so that the window does not
+ // post quit message to the queue
+ delete gWorkloadD3D11;
+ gWorkloadD3D11 = nullptr;
+ delete gWorkloadD3D12;
+ gWorkloadD3D12 = nullptr;
+ delete gWorkloadDE;
+ gWorkloadDE = nullptr;
+ CreateDemoWindow(hWnd);
InitWorkload(hWnd, asteroids);
gLastFrameRenderMode = gSettings.mode;
}