mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-15 08:41:46 +00:00
Fix GC shutdown crash due to canvas objects not getting GC'ed at the end
Fix typo in Draw2D and add support for specifying the viewport size directly
This commit is contained in:
parent
6137ea12d1
commit
b8569fa29f
4 changed files with 21 additions and 5 deletions
|
@ -328,3 +328,4 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
void Draw2D(F2DDrawer* drawer, FRenderState& state);
|
void Draw2D(F2DDrawer* drawer, FRenderState& state);
|
||||||
|
void Draw2D(F2DDrawer* drawer, FRenderState& state, int x, int y, int width, int height);
|
||||||
|
|
|
@ -51,13 +51,18 @@
|
||||||
|
|
||||||
CVAR(Bool, gl_aalines, false, CVAR_ARCHIVE)
|
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();
|
twoD.Clock();
|
||||||
|
|
||||||
const auto &mScreenViewport = screen->mScreenViewport;
|
state.SetViewport(x, y, width, height);
|
||||||
state.SetViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height);
|
screen->mViewpoints->Set2D(state, drawer->GetWidth(), drawer->GetHeight());
|
||||||
screen->mViewpoints->Set2D(state, twod->GetWidth(), twod->GetHeight());
|
|
||||||
|
|
||||||
state.EnableStencil(false);
|
state.EnableStencil(false);
|
||||||
state.SetStencil(0, SOP_Keep, SF_AllOn);
|
state.SetStencil(0, SOP_Keep, SF_AllOn);
|
||||||
|
|
|
@ -304,6 +304,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
class FCanvas;
|
class FCanvas;
|
||||||
|
extern TArray<FCanvas*> AllCanvases;
|
||||||
|
|
||||||
// A texture that can be drawn to.
|
// A texture that can be drawn to.
|
||||||
|
|
||||||
|
@ -319,6 +320,15 @@ public:
|
||||||
aspectRatio = (float)width / height;
|
aspectRatio = (float)width / height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~FCanvasTexture()
|
||||||
|
{
|
||||||
|
if (Canvas)
|
||||||
|
{
|
||||||
|
AllCanvases.Delete(AllCanvases.Find(Canvas));
|
||||||
|
Canvas = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NeedUpdate() { bNeedsUpdate = true; }
|
void NeedUpdate() { bNeedsUpdate = true; }
|
||||||
void SetUpdated(bool rendertype) { bNeedsUpdate = false; bFirstUpdate = false; bLastUpdateType = rendertype; }
|
void SetUpdated(bool rendertype) { bNeedsUpdate = false; bFirstUpdate = false; bLastUpdateType = rendertype; }
|
||||||
bool CheckNeedsUpdate() const { return bNeedsUpdate; }
|
bool CheckNeedsUpdate() const { return bNeedsUpdate; }
|
||||||
|
|
|
@ -359,7 +359,7 @@ sector_t* RenderView(player_t* player)
|
||||||
{
|
{
|
||||||
screen->RenderTextureView(canvas->Tex, [=](IntRect& bounds)
|
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->Drawer.Clear();
|
||||||
});
|
});
|
||||||
canvas->Tex->SetUpdated(true);
|
canvas->Tex->SetUpdated(true);
|
||||||
|
|
Loading…
Reference in a new issue