diff --git a/src/common/2d/v_draw.h b/src/common/2d/v_draw.h index f4746af99d..a9e2d7306c 100644 --- a/src/common/2d/v_draw.h +++ b/src/common/2d/v_draw.h @@ -328,3 +328,4 @@ public: }; void Draw2D(F2DDrawer* drawer, FRenderState& state); +void Draw2D(F2DDrawer* drawer, FRenderState& state, int x, int y, int width, int height); diff --git a/src/common/rendering/hwrenderer/hw_draw2d.cpp b/src/common/rendering/hwrenderer/hw_draw2d.cpp index bd2691fbdd..5c7100b34f 100644 --- a/src/common/rendering/hwrenderer/hw_draw2d.cpp +++ b/src/common/rendering/hwrenderer/hw_draw2d.cpp @@ -51,13 +51,18 @@ CVAR(Bool, gl_aalines, false, CVAR_ARCHIVE) -void Draw2D(F2DDrawer *drawer, FRenderState &state) +void Draw2D(F2DDrawer* drawer, FRenderState& state) +{ + const auto& mScreenViewport = screen->mScreenViewport; + Draw2D(drawer, state, mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); +} + +void Draw2D(F2DDrawer* drawer, FRenderState& state, int x, int y, int width, int height) { twoD.Clock(); - const auto &mScreenViewport = screen->mScreenViewport; - state.SetViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); - screen->mViewpoints->Set2D(state, twod->GetWidth(), twod->GetHeight()); + state.SetViewport(x, y, width, height); + screen->mViewpoints->Set2D(state, drawer->GetWidth(), drawer->GetHeight()); state.EnableStencil(false); state.SetStencil(0, SOP_Keep, SF_AllOn); diff --git a/src/common/textures/textures.h b/src/common/textures/textures.h index 6af12ea4c1..30700cca58 100644 --- a/src/common/textures/textures.h +++ b/src/common/textures/textures.h @@ -304,6 +304,7 @@ public: }; class FCanvas; +extern TArray AllCanvases; // A texture that can be drawn to. @@ -319,6 +320,15 @@ public: aspectRatio = (float)width / height; } + ~FCanvasTexture() + { + if (Canvas) + { + AllCanvases.Delete(AllCanvases.Find(Canvas)); + Canvas = nullptr; + } + } + void NeedUpdate() { bNeedsUpdate = true; } void SetUpdated(bool rendertype) { bNeedsUpdate = false; bFirstUpdate = false; bLastUpdateType = rendertype; } bool CheckNeedsUpdate() const { return bNeedsUpdate; } diff --git a/src/rendering/hwrenderer/hw_entrypoint.cpp b/src/rendering/hwrenderer/hw_entrypoint.cpp index f27abec59c..fc5a995d53 100644 --- a/src/rendering/hwrenderer/hw_entrypoint.cpp +++ b/src/rendering/hwrenderer/hw_entrypoint.cpp @@ -359,7 +359,7 @@ sector_t* RenderView(player_t* player) { screen->RenderTextureView(canvas->Tex, [=](IntRect& bounds) { - Draw2D(&canvas->Drawer, *screen->RenderState()); + Draw2D(&canvas->Drawer, *screen->RenderState(), 0, 0, canvas->Tex->GetWidth(), canvas->Tex->GetHeight()); canvas->Drawer.Clear(); }); canvas->Tex->SetUpdated(true);