History

FramebufferCache, cleanup & thread safety

Bradley Austin Davis committed 10 years ago

Commit bb6abf11 parent a455f3a2 files · +14 −26Browse files

Showing the changes to libraries/render-utils/src/FramebufferCache.cpp (1 of 2 files). Show all

Unified · Split

libraries/render-utils/src/FramebufferCache.cpp+9−18
@@ -11,34 +11,25 @@ · 10 unmodified lines
1111
1212 #include "FramebufferCache.h"
1313
14−#include <mutex>
15−
1614 #include <glm/glm.hpp>
15+#include <gpu/Format.h>
16+#include <gpu/Framebuffer.h>
1717
18−#include <QMap>
19−#include <QQueue>
20−#include <gpu/Batch.h>
2118 #include "RenderUtilsLogging.h"
2219
23−static QQueue<gpu::FramebufferPointer> _cachedFramebuffers;
24−
25−FramebufferCache::FramebufferCache() {
26−}
27−
28−FramebufferCache::~FramebufferCache() {
29− _cachedFramebuffers.clear();
30−}
31−
3220 void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) {
3321 //If the size changed, we need to delete our FBOs
3422 if (_frameBufferSize != frameBufferSize) {
3523 _frameBufferSize = frameBufferSize;
3624 _selfieFramebuffer.reset();
37− _cachedFramebuffers.clear();
3825 _occlusionFramebuffer.reset();
3926 _occlusionTexture.reset();
4027 _occlusionBlurredFramebuffer.reset();
4128 _occlusionBlurredTexture.reset();
29+ {
30+ std::unique_lock<std::mutex> lock(_mutex);
31+ _cachedFramebuffers.clear();
32+ }
4233 }
4334 }
4435
@@ -55,8 +46,6 @@ void FramebufferCache::createPrimaryFramebuffer() { · 10 unmodified lines
5546
5647 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);
5748
58−
59−
6049 resizeAmbientOcclusionBuffers();
6150 }
6251
@@ -87,7 +76,8 @@ void FramebufferCache::resizeAmbientOcclusionBuffers() { · 24 unmodified lines
8776
8877
8978 gpu::FramebufferPointer FramebufferCache::getFramebuffer() {
90− if (_cachedFramebuffers.isEmpty()) {
79+ std::unique_lock<std::mutex> lock(_mutex);
80+ if (_cachedFramebuffers.empty()) {
9181 _cachedFramebuffers.push_back(gpu::FramebufferPointer(gpu::Framebuffer::create(gpu::Element::COLOR_SRGBA_32, _frameBufferSize.width(), _frameBufferSize.height())));
9282 }
9383 gpu::FramebufferPointer result = _cachedFramebuffers.front();
@@ -96,6 +86,7 @@ gpu::FramebufferPointer FramebufferCache::getFramebuffer() { · 2 unmodified lines
9686 }
9787
9888 void FramebufferCache::releaseFramebuffer(const gpu::FramebufferPointer& framebuffer) {
89+ std::unique_lock<std::mutex> lock(_mutex);
9990 if (QSize(framebuffer->getSize().x, framebuffer->getSize().y) == _frameBufferSize) {
10091 _cachedFramebuffers.push_back(framebuffer);
10192 }