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
33 //If the size changed, we need to delete our FBOs33 //If the size changed, we need to delete our FBOs
34 if (_frameBufferSize != frameBufferSize) {34 if (_frameBufferSize != frameBufferSize) {
35 _frameBufferSize = frameBufferSize;35 _frameBufferSize = frameBufferSize;
36 _primaryFramebufferFull.reset();
37 _primaryFramebufferDepthColor.reset();36 _primaryFramebufferDepthColor.reset();
38 _primaryDepthTexture.reset();37 _primaryDepthTexture.reset();
39 _primaryColorTexture.reset();38 _primaryColorTexture.reset();
40 _primaryNormalTexture.reset();39 _deferredFramebuffer.reset();
41 _primarySpecularTexture.reset();40 _deferredFramebufferDepthColor.reset();
41 _deferredColorTexture.reset();
42 _deferredNormalTexture.reset();
43 _deferredSpecularTexture.reset();
42 _selfieFramebuffer.reset();44 _selfieFramebuffer.reset();
43 _cachedFramebuffers.clear();45 _cachedFramebuffers.clear();
44 _lightingTexture.reset();46 _lightingTexture.reset();
@@ -47,8 +49,9 @@ void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) { · 2 unmodified lines
47}49}
48 50
49void FramebufferCache::createPrimaryFramebuffer() {51void FramebufferCache::createPrimaryFramebuffer() {
50 _primaryFramebufferFull = gpu::FramebufferPointer(gpu::Framebuffer::create());
51 _primaryFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());52 _primaryFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
53 _deferredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
54 _deferredFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
52 55
53 auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA);56 auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA);
54 auto width = _frameBufferSize.width();57 auto width = _frameBufferSize.width();
@@ -56,23 +59,30 @@ void FramebufferCache::createPrimaryFramebuffer() { · 1 unmodified line
56 59
57 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);60 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);
58 _primaryColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));61 _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);
65 62
66 _primaryFramebufferDepthColor->setRenderBuffer(0, _primaryColorTexture);63 _primaryFramebufferDepthColor->setRenderBuffer(0, _primaryColorTexture);
67 64
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
68 // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::DEPTH);75 // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::DEPTH);
69 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format76 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
70 _primaryDepthTexture = gpu::TexturePointer(gpu::Texture::create2D(depthFormat, width, height, defaultSampler));77 _primaryDepthTexture = gpu::TexturePointer(gpu::Texture::create2D(depthFormat, width, height, defaultSampler));
71
72 _primaryFramebufferFull->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
73 78
74 _primaryFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);79 _primaryFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
75 80
81 _deferredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
82
83 _deferredFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
84
85
76 _selfieFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());86 _selfieFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
77 auto tex = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width * 0.5, height * 0.5, defaultSampler));87 auto tex = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width * 0.5, height * 0.5, defaultSampler));
78 _selfieFramebuffer->setRenderBuffer(0, tex);88 _selfieFramebuffer->setRenderBuffer(0, tex);
@@ -84,13 +94,6 @@ void FramebufferCache::createPrimaryFramebuffer() { · 5 unmodified lines
84 _lightingFramebuffer->setRenderBuffer(0, _lightingTexture);94 _lightingFramebuffer->setRenderBuffer(0, _lightingTexture);
85}95}
86 96
87gpu::FramebufferPointer FramebufferCache::getPrimaryFramebuffer() {
88 if (!_primaryFramebufferFull) {
89 createPrimaryFramebuffer();
90 }
91 return _primaryFramebufferFull;
92}
93
94gpu::FramebufferPointer FramebufferCache::getPrimaryFramebufferDepthColor() {97gpu::FramebufferPointer FramebufferCache::getPrimaryFramebufferDepthColor() {
95 if (!_primaryFramebufferDepthColor) {98 if (!_primaryFramebufferDepthColor) {
96 createPrimaryFramebuffer();99 createPrimaryFramebuffer();
@@ -112,18 +115,39 @@ gpu::TexturePointer FramebufferCache::getPrimaryColorTexture() { · 15 unmodified lines
112 return _primaryColorTexture;115 return _primaryColorTexture;
113}116}
114 117
115gpu::TexturePointer FramebufferCache::getPrimaryNormalTexture() {118gpu::FramebufferPointer FramebufferCache::getDeferredFramebuffer() {
116 if (!_primaryNormalTexture) {119 if (!_deferredFramebuffer) {
120 createPrimaryFramebuffer();
121 }
122 return _deferredFramebuffer;
123}
124
125gpu::FramebufferPointer FramebufferCache::getDeferredFramebufferDepthColor() {
126 if (!_deferredFramebufferDepthColor) {
127 createPrimaryFramebuffer();
128 }
129 return _deferredFramebufferDepthColor;
130}
131
132gpu::TexturePointer FramebufferCache::getDeferredColorTexture() {
133 if (!_deferredColorTexture) {
134 createPrimaryFramebuffer();
135 }
136 return _deferredColorTexture;
137}
138
139gpu::TexturePointer FramebufferCache::getDeferredNormalTexture() {
140 if (!_deferredNormalTexture) {
117 createPrimaryFramebuffer();141 createPrimaryFramebuffer();
118 }142 }
119 return _primaryNormalTexture;143 return _deferredNormalTexture;
120}144}
121 145
122gpu::TexturePointer FramebufferCache::getPrimarySpecularTexture() {146gpu::TexturePointer FramebufferCache::getDeferredSpecularTexture() {
123 if (!_primarySpecularTexture) {147 if (!_deferredSpecularTexture) {
124 createPrimaryFramebuffer();148 createPrimaryFramebuffer();
125 }149 }
126 return _primarySpecularTexture;150 return _deferredSpecularTexture;
127}151}
128 152
129gpu::FramebufferPointer FramebufferCache::getLightingFramebuffer() {153gpu::FramebufferPointer FramebufferCache::getLightingFramebuffer() {