Simpler way to deal with the GL deleter

This commit is contained in:
Henrik Rydgård committed 2018-01-30 22:32:16 +01:00
1 parent bd2c875c9a
commit 3a988400a7
4 files changed
+60 -23

No files matched your search

+5 -8
View File
@@ -13,7 +13,6 @@
#endif
void GLDeleter::Perform() {
deleterMutex_.lock();
for (auto shader : shaders) {
delete shader;
}
@@ -38,7 +37,6 @@ void GLDeleter::Perform() {
delete framebuffer;
}
framebuffers.clear();
deleterMutex_.unlock();
}
GLRenderManager::GLRenderManager() {
@@ -357,8 +355,6 @@ void GLRenderManager::Finish() {
frameData.pull_condVar.notify_all();
}
frameData_[curFrame_].deleter.Take(deleter_);
curFrame_++;
if (curFrame_ >= MAX_INFLIGHT_FRAMES)
curFrame_ = 0;
@@ -380,10 +376,6 @@ void GLRenderManager::Submit(int frame, bool triggerFence) {
// When !triggerFence, we notify after syncing with Vulkan.
// Putting deletes here is safe but only because OpenGL has its own delete handling..
// ideally we'd like to wait a frame or two.
frameData.deleter.Perform();
if (useThread_ && triggerFence) {
VLOG("PULL: Frame %d.readyForFence = true", frame);
@@ -414,6 +406,10 @@ void GLRenderManager::Run(int frame) {
BeginSubmitFrame(frame);
FrameData &frameData = frameData_[frame];
// Delete stuff from the last round.
frameData.deleter_prev.Perform();
auto &stepsOnThread = frameData_[frame].steps;
auto &initStepsOnThread = frameData_[frame].initSteps;
// queueRunner_.LogSteps(stepsOnThread);
@@ -424,6 +420,7 @@ void GLRenderManager::Run(int frame) {
switch (frameData.type) {
case GLRRunType::END:
frameData.deleter_prev.Take(frameData.deleter);
EndSubmitFrame(frame);
break;