From cbf9e96067de0ca16c21bce02cf0145ccc1dc7b9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 13 May 2024 23:53:25 -0500 Subject: [PATCH] DirectX 9 backend, part 7 resizing works --- src/gui/render/renderDX9.cpp | 24 ++++++++++++++++-------- src/gui/render/renderDX9.h | 3 ++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/gui/render/renderDX9.cpp b/src/gui/render/renderDX9.cpp index 29708d1fe..02199fecf 100644 --- a/src/gui/render/renderDX9.cpp +++ b/src/gui/render/renderDX9.cpp @@ -93,6 +93,8 @@ FurnaceGUITexture* FurnaceGUIRenderDX9::createTexture(bool dynamic, int width, i logV("width: %d (requested)... %d (actual)",width,widthReal); logV("height: %d (requested)... %d (actual)",height,heightReal); + if (!supportsDynamicTex) dynamic=false; + HRESULT result=device->CreateTexture(widthReal,heightReal,1,dynamic?D3DUSAGE_DYNAMIC:0,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&tex,NULL); if (result!=D3D_OK) { @@ -124,14 +126,7 @@ void FurnaceGUIRenderDX9::setBlendMode(FurnaceGUIBlendMode mode) { } void FurnaceGUIRenderDX9::resized(const SDL_Event& ev) { - logI("DX9: resizing buffers"); - ImGui_ImplDX9_InvalidateDeviceObjects(); - HRESULT result=device->Reset(&priv->present); - if (result==D3DERR_INVALIDCALL) { - logE("OH NO"); - } - ImGui_ImplDX9_CreateDeviceObjects(); - + mustResize=true; outW=ev.window.data1; outH=ev.window.data2; } @@ -145,6 +140,19 @@ void FurnaceGUIRenderDX9::present() { } bool FurnaceGUIRenderDX9::newFrame() { + if (mustResize) { + logI("DX9: resizing buffers"); + ImGui_ImplDX9_InvalidateDeviceObjects(); + priv->present.BackBufferWidth=outW; + priv->present.BackBufferHeight=outH; + HRESULT result=device->Reset(&priv->present); + if (result==D3DERR_INVALIDCALL) { + logE("OH NO"); + } + ImGui_ImplDX9_CreateDeviceObjects(); + mustResize=false; + } + return ImGui_ImplDX9_NewFrame(); } diff --git a/src/gui/render/renderDX9.h b/src/gui/render/renderDX9.h index f3076686b..e53eddb89 100644 --- a/src/gui/render/renderDX9.h +++ b/src/gui/render/renderDX9.h @@ -36,7 +36,7 @@ class FurnaceGUIRenderDX9: public FurnaceGUIRender { int outW, outH, swapInterval; - bool dead, haveScene, supportsDynamicTex, supportsVSync; + bool dead, haveScene, supportsDynamicTex, supportsVSync, mustResize; // SHADERS // @@ -87,6 +87,7 @@ class FurnaceGUIRenderDX9: public FurnaceGUIRender { haveScene(false), supportsDynamicTex(false), supportsVSync(false), + mustResize(false), maxWidth(8192), maxHeight(8192) { }