Clean up unused temporary Canvases after a few frames.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2017-11-13 19:45:18 -04:00
parent 8672ff2272
commit b8c4b07edf
3 changed files with 32 additions and 5 deletions
+15 -2
View File
@@ -287,8 +287,8 @@ void Graphics::unSetMode()
for (const auto &pair : framebufferObjects)
gl.deleteFramebuffer(pair.second);
for (auto c : temporaryCanvases)
c->release();
for (auto temp : temporaryCanvases)
temp.canvas->release();
framebufferObjects.clear();
temporaryCanvases.clear();
@@ -924,6 +924,19 @@ void Graphics::present(void *screenshotCallbackData)
gl.stats.shaderSwitches = 0;
canvasSwitchCount = 0;
drawCallsBatched = 0;
// This assumes temporary canvases will only be used within a render pass.
for (int i = (int) temporaryCanvases.size() - 1; i >= 0; i--)
{
if (temporaryCanvases[i].framesSinceUse >= MAX_TEMPORARY_CANVAS_UNUSED_FRAMES)
{
temporaryCanvases[i].canvas->release();
temporaryCanvases[i] = temporaryCanvases.back();
temporaryCanvases.pop_back();
}
else
temporaryCanvases[i].framesSinceUse++;
}
}
void Graphics::setScissor(const Rect &rect)