History

Introducing the Lighting Buffer where all the lighting is beeing accumulated, apply a manual gamma correction when copying back into the main color buffer

samcake committed 10 years ago

Commit 72d39391 parent b5a68803 files · +39 −18Browse files

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

Unified · Split

libraries/render-utils/src/FramebufferCache.cpp+22−0
@@ -41,6 +41,8 @@ void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) { · 40 unmodified lines
41 _primarySpecularTexture.reset();41 _primarySpecularTexture.reset();
42 _selfieFramebuffer.reset();42 _selfieFramebuffer.reset();
43 _cachedFramebuffers.clear();43 _cachedFramebuffers.clear();
44 _lightingTexture.reset();
45 _lightingFramebuffer.reset();
44 }46 }
45}47}
46 48
@@ -74,6 +76,12 @@ void FramebufferCache::createPrimaryFramebuffer() { · 27 unmodified lines
74 _selfieFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());76 _selfieFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
75 auto tex = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width * 0.5, height * 0.5, defaultSampler));77 auto tex = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width * 0.5, height * 0.5, defaultSampler));
76 _selfieFramebuffer->setRenderBuffer(0, tex);78 _selfieFramebuffer->setRenderBuffer(0, tex);
79
80 _lightingTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA), width, height, defaultSampler));
81 //_lightingTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::SRGBA), width, height, defaultSampler));
82 // _lightingTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::VEC4, gpu::HALF, gpu::RGBA), width, height, defaultSampler));
83 _lightingFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
84 _lightingFramebuffer->setRenderBuffer(0, _lightingTexture);
77}85}
78 86
79gpu::FramebufferPointer FramebufferCache::getPrimaryFramebuffer() {87gpu::FramebufferPointer FramebufferCache::getPrimaryFramebuffer() {
@@ -118,6 +126,20 @@ gpu::TexturePointer FramebufferCache::getPrimarySpecularTexture() { · 38 unmodified lines
118 return _primarySpecularTexture;126 return _primarySpecularTexture;
119}127}
120 128
129gpu::FramebufferPointer FramebufferCache::getLightingFramebuffer() {
130 if (!_lightingFramebuffer) {
131 createPrimaryFramebuffer();
132 }
133 return _lightingFramebuffer;
134}
135
136gpu::TexturePointer FramebufferCache::getLightingTexture() {
137 if (!_lightingTexture) {
138 createPrimaryFramebuffer();
139 }
140 return _lightingTexture;
141}
142
121gpu::FramebufferPointer FramebufferCache::getFramebuffer() {143gpu::FramebufferPointer FramebufferCache::getFramebuffer() {
122 if (_cachedFramebuffers.isEmpty()) {144 if (_cachedFramebuffers.isEmpty()) {
123 _cachedFramebuffers.push_back(gpu::FramebufferPointer(gpu::Framebuffer::create(gpu::Element::COLOR_RGBA_32, _frameBufferSize.width(), _frameBufferSize.height())));145 _cachedFramebuffers.push_back(gpu::FramebufferPointer(gpu::Framebuffer::create(gpu::Element::COLOR_RGBA_32, _frameBufferSize.width(), _frameBufferSize.height())));