diff --git a/wpigui/src/main/native/cpp/wpigui.cpp b/wpigui/src/main/native/cpp/wpigui.cpp index 16abf8abe0..038abe00e6 100644 --- a/wpigui/src/main/native/cpp/wpigui.cpp +++ b/wpigui/src/main/native/cpp/wpigui.cpp @@ -38,6 +38,10 @@ static void WindowSizeCallback(GLFWwindow* window, int width, int height) { } } +static void FramebufferSizeCallback(GLFWwindow* window, int width, int height) { + PlatformFramebufferSizeChanged(width, height); +} + static void WindowMaximizeCallback(GLFWwindow* window, int maximized) { gContext->maximized = maximized; } @@ -197,6 +201,7 @@ bool gui::Initialize(const char* title, int width, int height) { // Set window callbacks glfwGetWindowSize(gContext->window, &gContext->width, &gContext->height); glfwSetWindowSizeCallback(gContext->window, WindowSizeCallback); + glfwSetFramebufferSizeCallback(gContext->window, FramebufferSizeCallback); glfwSetWindowMaximizeCallback(gContext->window, WindowMaximizeCallback); glfwSetWindowPosCallback(gContext->window, WindowPosCallback); diff --git a/wpigui/src/main/native/directx11/wpigui_directx11.cpp b/wpigui/src/main/native/directx11/wpigui_directx11.cpp index efd5865c95..6ecf155918 100644 --- a/wpigui/src/main/native/directx11/wpigui_directx11.cpp +++ b/wpigui/src/main/native/directx11/wpigui_directx11.cpp @@ -152,6 +152,15 @@ void gui::PlatformShutdown() { ImGui_ImplDX11_Shutdown(); } +void gui::PlatformFramebufferSizeChanged(int width, int height) { + if (gPlatformContext && gPlatformContext->pd3dDevice) { + CleanupRenderTarget(); + gPlatformContext->pSwapChain->ResizeBuffers(0, width, height, + DXGI_FORMAT_UNKNOWN, 0); + CreateRenderTarget(); + } +} + static inline DXGI_FORMAT DXPixelFormat(PixelFormat format) { switch (format) { case kPixelRGBA: diff --git a/wpigui/src/main/native/include/wpigui_internal.h b/wpigui/src/main/native/include/wpigui_internal.h index 89badf41af..9a2c70f5c2 100644 --- a/wpigui/src/main/native/include/wpigui_internal.h +++ b/wpigui/src/main/native/include/wpigui_internal.h @@ -67,6 +67,7 @@ void PlatformGlfwWindowHints(); bool PlatformInitRenderer(); void PlatformRenderFrame(); void PlatformShutdown(); +void PlatformFramebufferSizeChanged(int width, int height); void CommonRenderFrame(); diff --git a/wpigui/src/main/native/metal/wpigui_metal.mm b/wpigui/src/main/native/metal/wpigui_metal.mm index fb41dbc202..cf46247b63 100644 --- a/wpigui/src/main/native/metal/wpigui_metal.mm +++ b/wpigui/src/main/native/metal/wpigui_metal.mm @@ -107,6 +107,8 @@ void gui::PlatformShutdown() { gPlatformValid = false; } +void gui::PlatformFramebufferSizeChanged(int, int) {} + static inline MTLPixelFormat MetalPixelFormat(PixelFormat format) { switch (format) { case kPixelRGBA: diff --git a/wpigui/src/main/native/opengl3/wpigui_opengl3.cpp b/wpigui/src/main/native/opengl3/wpigui_opengl3.cpp index f6837d6c3f..bf14700c86 100644 --- a/wpigui/src/main/native/opengl3/wpigui_opengl3.cpp +++ b/wpigui/src/main/native/opengl3/wpigui_opengl3.cpp @@ -99,6 +99,8 @@ void gui::PlatformShutdown() { ImGui_ImplOpenGL3_Shutdown(); } +void gui::PlatformFramebufferSizeChanged(int width, int height) {} + static inline GLenum GLPixelFormat(PixelFormat format) { switch (format) { case kPixelRGBA: