History

Introducing a true Primary Framebuffer and a different Deferred Framebuffer

samcake committed 10 years ago

Commit d593b821 parent 72d39397 files · +86 −54Browse files

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

Unified · Split

libraries/render-utils/src/FramebufferCache.cpp+50−26
@@ -33,12 +33,14 @@ void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) { · 32 unmodified lines
3333 //If the size changed, we need to delete our FBOs
3434 if (_frameBufferSize != frameBufferSize) {
3535 _frameBufferSize = frameBufferSize;
36− _primaryFramebufferFull.reset();
3736 _primaryFramebufferDepthColor.reset();
3837 _primaryDepthTexture.reset();
3938 _primaryColorTexture.reset();
40− _primaryNormalTexture.reset();
41− _primarySpecularTexture.reset();
39+ _deferredFramebuffer.reset();
40+ _deferredFramebufferDepthColor.reset();
41+ _deferredColorTexture.reset();
42+ _deferredNormalTexture.reset();
43+ _deferredSpecularTexture.reset();
4244 _selfieFramebuffer.reset();
4345 _cachedFramebuffers.clear();
4446 _lightingTexture.reset();
@@ -47,8 +49,9 @@ void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) { · 2 unmodified lines
4749 }
4850
4951 void FramebufferCache::createPrimaryFramebuffer() {
50− _primaryFramebufferFull = gpu::FramebufferPointer(gpu::Framebuffer::create());
5152 _primaryFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
53+ _deferredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
54+ _deferredFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
5255
5356 auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA);
5457 auto width = _frameBufferSize.width();
@@ -56,23 +59,30 @@ void FramebufferCache::createPrimaryFramebuffer() { · 1 unmodified line
5659
5760 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);
5861 _primaryColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
59− _primaryNormalTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
60− _primarySpecularTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
61−
62− _primaryFramebufferFull->setRenderBuffer(0, _primaryColorTexture);
63− _primaryFramebufferFull->setRenderBuffer(1, _primaryNormalTexture);
64− _primaryFramebufferFull->setRenderBuffer(2, _primarySpecularTexture);
6562
6663 _primaryFramebufferDepthColor->setRenderBuffer(0, _primaryColorTexture);
6764
65+ _deferredColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
66+ _deferredNormalTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
67+ _deferredSpecularTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
68+
69+ _deferredFramebuffer->setRenderBuffer(0, _deferredColorTexture);
70+ _deferredFramebuffer->setRenderBuffer(1, _deferredNormalTexture);
71+ _deferredFramebuffer->setRenderBuffer(2, _deferredSpecularTexture);
72+
73+ _deferredFramebufferDepthColor->setRenderBuffer(0, _deferredColorTexture);
74+
6875 // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::DEPTH);
6976 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
7077 _primaryDepthTexture = gpu::TexturePointer(gpu::Texture::create2D(depthFormat, width, height, defaultSampler));
71−
72− _primaryFramebufferFull->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
7378
7479 _primaryFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
75−
80+
81+ _deferredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
82+
83+ _deferredFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
84+
85+
7686 _selfieFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
7787 auto tex = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width * 0.5, height * 0.5, defaultSampler));
7888 _selfieFramebuffer->setRenderBuffer(0, tex);
@@ -84,13 +94,6 @@ void FramebufferCache::createPrimaryFramebuffer() { · 5 unmodified lines
8494 _lightingFramebuffer->setRenderBuffer(0, _lightingTexture);
8595 }
8696
87−gpu::FramebufferPointer FramebufferCache::getPrimaryFramebuffer() {
88− if (!_primaryFramebufferFull) {
89− createPrimaryFramebuffer();
90− }
91− return _primaryFramebufferFull;
92−}
93−
9497 gpu::FramebufferPointer FramebufferCache::getPrimaryFramebufferDepthColor() {
9598 if (!_primaryFramebufferDepthColor) {
9699 createPrimaryFramebuffer();
@@ -112,18 +115,39 @@ gpu::TexturePointer FramebufferCache::getPrimaryColorTexture() { · 15 unmodified lines
112115 return _primaryColorTexture;
113116 }
114117
115−gpu::TexturePointer FramebufferCache::getPrimaryNormalTexture() {
116− if (!_primaryNormalTexture) {
118+gpu::FramebufferPointer FramebufferCache::getDeferredFramebuffer() {
119+ if (!_deferredFramebuffer) {
120+ createPrimaryFramebuffer();
121+ }
122+ return _deferredFramebuffer;
123+}
124+
125+gpu::FramebufferPointer FramebufferCache::getDeferredFramebufferDepthColor() {
126+ if (!_deferredFramebufferDepthColor) {
127+ createPrimaryFramebuffer();
128+ }
129+ return _deferredFramebufferDepthColor;
130+}
131+
132+gpu::TexturePointer FramebufferCache::getDeferredColorTexture() {
133+ if (!_deferredColorTexture) {
134+ createPrimaryFramebuffer();
135+ }
136+ return _deferredColorTexture;
137+}
138+
139+gpu::TexturePointer FramebufferCache::getDeferredNormalTexture() {
140+ if (!_deferredNormalTexture) {
117141 createPrimaryFramebuffer();
118142 }
119− return _primaryNormalTexture;
143+ return _deferredNormalTexture;
120144 }
121145
122−gpu::TexturePointer FramebufferCache::getPrimarySpecularTexture() {
123− if (!_primarySpecularTexture) {
146+gpu::TexturePointer FramebufferCache::getDeferredSpecularTexture() {
147+ if (!_deferredSpecularTexture) {
124148 createPrimaryFramebuffer();
125149 }
126− return _primarySpecularTexture;
150+ return _deferredSpecularTexture;
127151 }
128152
129153 gpu::FramebufferPointer FramebufferCache::getLightingFramebuffer() {