History

Clenaing the rendering and the framebuffer allocations

samcake committed 10 years ago

Commit cde17ec1 parent 5d4b55e18 files · +234 −361Browse files

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

Unified · Split

libraries/render-utils/src/DeferredFramebuffer.cpp+15−54
@@ -15,34 +15,34 @@ DeferredFramebuffer::DeferredFramebuffer() { · 14 unmodified lines
1515 }
1616
1717
18−void DeferredFramebuffer::setPrimaryDepth(const gpu::TexturePointer& depthBuffer) {
19− //If the size changed, we need to delete our FBOs
20− if (_primaryDepthTexture != depthBuffer) {
18+void DeferredFramebuffer::updatePrimaryDepth(const gpu::TexturePointer& depthBuffer) {
19+ //If the depth buffer or size changed, we need to delete our FBOs
20+ bool reset = false;
21+ if ((_primaryDepthTexture != depthBuffer)) {
2122 _primaryDepthTexture = depthBuffer;
22−
23+ reset = true;
24+ }
25+ if (_primaryDepthTexture) {
26+ auto newFrameSize = glm::ivec2(_primaryDepthTexture->getDimensions());
27+ if (_frameSize != newFrameSize) {
28+ _frameSize = newFrameSize;
29+ reset = true;
30+ }
2331 }
24−}
2532
26−void DeferredFramebuffer::setFrameSize(const glm::ivec2& frameBufferSize) {
27− //If the size changed, we need to delete our FBOs
28− if (_frameSize != frameBufferSize) {
29− _frameSize = frameBufferSize;
30− _deferredFramebuffer.reset();
33+ if (reset) {
34+ _deferredFramebuffer.reset();
3135 _deferredFramebufferDepthColor.reset();
3236 _deferredColorTexture.reset();
3337 _deferredNormalTexture.reset();
3438 _deferredSpecularTexture.reset();
3539 _lightingTexture.reset();
3640 _lightingFramebuffer.reset();
37−
38− _occlusionFramebuffer.reset();
39− _occlusionTexture.reset();
40− _occlusionBlurredFramebuffer.reset();
41− _occlusionBlurredTexture.reset();
4241 }
4342 }
4443
4544 void DeferredFramebuffer::allocate() {
45+
4646 _deferredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
4747 _deferredFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
4848
@@ -52,9 +52,6 @@ void DeferredFramebuffer::allocate() { · 3 unmodified lines
5252 auto height = _frameSize.y;
5353
5454 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);
55− // _primaryColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
56−
57− // _primaryFramebuffer->setRenderBuffer(0, _primaryColorTexture);
5855
5956 _deferredColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
6057
@@ -67,8 +64,6 @@ void DeferredFramebuffer::allocate() { · 6 unmodified lines
6764
6865 _deferredFramebufferDepthColor->setRenderBuffer(0, _deferredColorTexture);
6966
70− // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::DEPTH);
71−
7267 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
7368 if (!_primaryDepthTexture) {
7469 _primaryDepthTexture = gpu::TexturePointer(gpu::Texture::create2D(depthFormat, width, height, defaultSampler));
@@ -88,41 +83,7 @@ void DeferredFramebuffer::allocate() { · 13 unmodified lines
8883
8984 _deferredFramebuffer->setRenderBuffer(3, _lightingTexture);
9085
91− // For AO:
92− // auto pointMipSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_POINT);
93− // _depthPyramidTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
94− // _depthPyramidFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
95− // _depthPyramidFramebuffer->setRenderBuffer(0, _depthPyramidTexture);
96− // _depthPyramidFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
97−
98− // resizeAmbientOcclusionBuffers();
99−}
100−
101−/*
102−void DeferredFramebuffer::resizeAmbientOcclusionBuffers() {
103− _occlusionFramebuffer.reset();
104− _occlusionTexture.reset();
105− _occlusionBlurredFramebuffer.reset();
106− _occlusionBlurredTexture.reset();
107−
108−
109− auto width = _frameBufferSize.width() >> _AOResolutionLevel;
110− auto height = _frameBufferSize.height() >> _AOResolutionLevel;
111− auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGB);
112− auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR);
113− auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
114−
115− _occlusionTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
116− _occlusionFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
117− _occlusionFramebuffer->setRenderBuffer(0, _occlusionTexture);
118− _occlusionFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
119−
120− _occlusionBlurredTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
121− _occlusionBlurredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
122− _occlusionBlurredFramebuffer->setRenderBuffer(0, _occlusionBlurredTexture);
123− _occlusionBlurredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
12486 }
125−*/
12687
12788
12889 gpu::TexturePointer DeferredFramebuffer::getPrimaryDepthTexture() {