mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-25 05:06:59 +00:00
Examples: DX9, DX10, DX11: Queue framebuffer resize instead of processing in WM_SIZE. (#6374)
This commit is contained in:
parent
15da1a9abc
commit
031e152d29
@ -64,6 +64,8 @@ Other changes:
|
|||||||
- Examples: Added native Win32+OpenGL3 example. We don't recommend using this setup but we
|
- Examples: Added native Win32+OpenGL3 example. We don't recommend using this setup but we
|
||||||
provide it for completeness. (#3218, #5170, #6086, #2772, #2600, #2359, #2022, #1553) [@learn-more]
|
provide it for completeness. (#3218, #5170, #6086, #2772, #2600, #2359, #2022, #1553) [@learn-more]
|
||||||
- Examples: Vulkan: Use integrated GPU if nothing else is available. (#6359) [@kimidaisuki22]
|
- Examples: Vulkan: Use integrated GPU if nothing else is available. (#6359) [@kimidaisuki22]
|
||||||
|
- Examples: DX9, DX10, DX11: Queue framebuffer resize instead of processing in WM_SIZE,
|
||||||
|
as some drivers tends to only cleanup after existing the native resize modal loop. (#6374)
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
// Data
|
// Data
|
||||||
static ID3D10Device* g_pd3dDevice = nullptr;
|
static ID3D10Device* g_pd3dDevice = nullptr;
|
||||||
static IDXGISwapChain* g_pSwapChain = nullptr;
|
static IDXGISwapChain* g_pSwapChain = nullptr;
|
||||||
|
static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
|
||||||
static ID3D10RenderTargetView* g_mainRenderTargetView = nullptr;
|
static ID3D10RenderTargetView* g_mainRenderTargetView = nullptr;
|
||||||
|
|
||||||
// Forward declarations of helper functions
|
// Forward declarations of helper functions
|
||||||
@ -95,6 +96,15 @@ int main(int, char**)
|
|||||||
if (done)
|
if (done)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Handle window resize (we don't resize directly in the WM_SIZE handler)
|
||||||
|
if (g_ResizeWidth != 0 && g_ResizeHeight != 0)
|
||||||
|
{
|
||||||
|
CleanupRenderTarget();
|
||||||
|
g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);
|
||||||
|
g_ResizeWidth = g_ResizeHeight = 0;
|
||||||
|
CreateRenderTarget();
|
||||||
|
}
|
||||||
|
|
||||||
// Start the Dear ImGui frame
|
// Start the Dear ImGui frame
|
||||||
ImGui_ImplDX10_NewFrame();
|
ImGui_ImplDX10_NewFrame();
|
||||||
ImGui_ImplWin32_NewFrame();
|
ImGui_ImplWin32_NewFrame();
|
||||||
@ -228,12 +238,10 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
if (g_pd3dDevice != nullptr && wParam != SIZE_MINIMIZED)
|
if (wParam == SIZE_MINIMIZED)
|
||||||
{
|
return 0;
|
||||||
CleanupRenderTarget();
|
g_ResizeWidth = (UINT)LOWORD(lParam); // Queue resize
|
||||||
g_pSwapChain->ResizeBuffers(0, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam), DXGI_FORMAT_UNKNOWN, 0);
|
g_ResizeHeight = (UINT)HIWORD(lParam);
|
||||||
CreateRenderTarget();
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
static ID3D11Device* g_pd3dDevice = nullptr;
|
static ID3D11Device* g_pd3dDevice = nullptr;
|
||||||
static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
|
static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
|
||||||
static IDXGISwapChain* g_pSwapChain = nullptr;
|
static IDXGISwapChain* g_pSwapChain = nullptr;
|
||||||
|
static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
|
||||||
static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;
|
static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;
|
||||||
|
|
||||||
// Forward declarations of helper functions
|
// Forward declarations of helper functions
|
||||||
@ -95,6 +96,15 @@ int main(int, char**)
|
|||||||
if (done)
|
if (done)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Handle window resize (we don't resize directly in the WM_SIZE handler)
|
||||||
|
if (g_ResizeWidth != 0 && g_ResizeHeight != 0)
|
||||||
|
{
|
||||||
|
CleanupRenderTarget();
|
||||||
|
g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);
|
||||||
|
g_ResizeWidth = g_ResizeHeight = 0;
|
||||||
|
CreateRenderTarget();
|
||||||
|
}
|
||||||
|
|
||||||
// Start the Dear ImGui frame
|
// Start the Dear ImGui frame
|
||||||
ImGui_ImplDX11_NewFrame();
|
ImGui_ImplDX11_NewFrame();
|
||||||
ImGui_ImplWin32_NewFrame();
|
ImGui_ImplWin32_NewFrame();
|
||||||
@ -232,12 +242,10 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
if (g_pd3dDevice != nullptr && wParam != SIZE_MINIMIZED)
|
if (wParam == SIZE_MINIMIZED)
|
||||||
{
|
return 0;
|
||||||
CleanupRenderTarget();
|
g_ResizeWidth = (UINT)LOWORD(lParam); // Queue resize
|
||||||
g_pSwapChain->ResizeBuffers(0, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam), DXGI_FORMAT_UNKNOWN, 0);
|
g_ResizeHeight = (UINT)HIWORD(lParam);
|
||||||
CreateRenderTarget();
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
// Data
|
// Data
|
||||||
static LPDIRECT3D9 g_pD3D = nullptr;
|
static LPDIRECT3D9 g_pD3D = nullptr;
|
||||||
static LPDIRECT3DDEVICE9 g_pd3dDevice = nullptr;
|
static LPDIRECT3DDEVICE9 g_pd3dDevice = nullptr;
|
||||||
|
static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
|
||||||
static D3DPRESENT_PARAMETERS g_d3dpp = {};
|
static D3DPRESENT_PARAMETERS g_d3dpp = {};
|
||||||
|
|
||||||
// Forward declarations of helper functions
|
// Forward declarations of helper functions
|
||||||
@ -93,6 +94,14 @@ int main(int, char**)
|
|||||||
if (done)
|
if (done)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Handle window resize (we don't resize directly in the WM_SIZE handler)
|
||||||
|
if (g_ResizeWidth != 0 && g_ResizeHeight != 0)
|
||||||
|
{
|
||||||
|
g_d3dpp.BackBufferWidth = g_ResizeWidth;
|
||||||
|
g_d3dpp.BackBufferHeight = g_ResizeHeight;
|
||||||
|
ResetDevice();
|
||||||
|
}
|
||||||
|
|
||||||
// Start the Dear ImGui frame
|
// Start the Dear ImGui frame
|
||||||
ImGui_ImplDX9_NewFrame();
|
ImGui_ImplDX9_NewFrame();
|
||||||
ImGui_ImplWin32_NewFrame();
|
ImGui_ImplWin32_NewFrame();
|
||||||
@ -219,12 +228,10 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
if (g_pd3dDevice != nullptr && wParam != SIZE_MINIMIZED)
|
if (wParam == SIZE_MINIMIZED)
|
||||||
{
|
return 0;
|
||||||
g_d3dpp.BackBufferWidth = LOWORD(lParam);
|
g_ResizeWidth = (UINT)LOWORD(lParam); // Queue resize
|
||||||
g_d3dpp.BackBufferHeight = HIWORD(lParam);
|
g_ResizeHeight = (UINT)HIWORD(lParam);
|
||||||
ResetDevice();
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
||||||
|
Loading…
Reference in New Issue
Block a user