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
11 11
12#include "FramebufferCache.h"12#include "FramebufferCache.h"
13 13
14#include <mutex>
15
16#include <glm/glm.hpp>14#include <glm/glm.hpp>
15#include <gpu/Format.h>
16#include <gpu/Framebuffer.h>
17 17
18#include <QMap>
19#include <QQueue>
20#include <gpu/Batch.h>
21#include "RenderUtilsLogging.h"18#include "RenderUtilsLogging.h"
22 19
23static QQueue<gpu::FramebufferPointer> _cachedFramebuffers;
24
25FramebufferCache::FramebufferCache() {
26}
27
28FramebufferCache::~FramebufferCache() {
29 _cachedFramebuffers.clear();
30}
31
32void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) {20void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) {
33 //If the size changed, we need to delete our FBOs21 //If the size changed, we need to delete our FBOs
34 if (_frameBufferSize != frameBufferSize) {22 if (_frameBufferSize != frameBufferSize) {
35 _frameBufferSize = frameBufferSize;23 _frameBufferSize = frameBufferSize;
36 _selfieFramebuffer.reset();24 _selfieFramebuffer.reset();
37 _cachedFramebuffers.clear();
38 _occlusionFramebuffer.reset();25 _occlusionFramebuffer.reset();
39 _occlusionTexture.reset();26 _occlusionTexture.reset();
40 _occlusionBlurredFramebuffer.reset();27 _occlusionBlurredFramebuffer.reset();
41 _occlusionBlurredTexture.reset();28 _occlusionBlurredTexture.reset();
29 {
30 std::unique_lock<std::mutex> lock(_mutex);
31 _cachedFramebuffers.clear();
32 }
42 }33 }
43}34}
44 35
@@ -55,8 +46,6 @@ void FramebufferCache::createPrimaryFramebuffer() { · 10 unmodified lines
55 46
56 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);47 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);
57 48
58
59
60 resizeAmbientOcclusionBuffers();49 resizeAmbientOcclusionBuffers();
61}50}
62 51
@@ -87,7 +76,8 @@ void FramebufferCache::resizeAmbientOcclusionBuffers() { · 24 unmodified lines
87 76
88 77
89gpu::FramebufferPointer FramebufferCache::getFramebuffer() {78gpu::FramebufferPointer FramebufferCache::getFramebuffer() {
90 if (_cachedFramebuffers.isEmpty()) {79 std::unique_lock<std::mutex> lock(_mutex);
80 if (_cachedFramebuffers.empty()) {
91 _cachedFramebuffers.push_back(gpu::FramebufferPointer(gpu::Framebuffer::create(gpu::Element::COLOR_SRGBA_32, _frameBufferSize.width(), _frameBufferSize.height())));81 _cachedFramebuffers.push_back(gpu::FramebufferPointer(gpu::Framebuffer::create(gpu::Element::COLOR_SRGBA_32, _frameBufferSize.width(), _frameBufferSize.height())));
92 }82 }
93 gpu::FramebufferPointer result = _cachedFramebuffers.front();83 gpu::FramebufferPointer result = _cachedFramebuffers.front();
@@ -96,6 +86,7 @@ gpu::FramebufferPointer FramebufferCache::getFramebuffer() { · 2 unmodified lines
96}86}
97 87
98void FramebufferCache::releaseFramebuffer(const gpu::FramebufferPointer& framebuffer) {88void FramebufferCache::releaseFramebuffer(const gpu::FramebufferPointer& framebuffer) {
89 std::unique_lock<std::mutex> lock(_mutex);
99 if (QSize(framebuffer->getSize().x, framebuffer->getSize().y) == _frameBufferSize) {90 if (QSize(framebuffer->getSize().x, framebuffer->getSize().y) == _frameBufferSize) {
100 _cachedFramebuffers.push_back(framebuffer);91 _cachedFramebuffers.push_back(framebuffer);
101 }92 }