Showing the changes to libraries/render-utils/src/DeferredLightingEffect.cpp (1 of 5 files). Show all
Unified · Split
| @@ -227,6 +227,8 @@ void DeferredLightingEffect::prepare(RenderArgs* args) { · 226 unmodified lines | ||
| 227 | 227 | args->_context->render(batch); |
| 228 | 228 | } |
| 229 | 229 | |
| 230 | +gpu::FramebufferPointer _copyFBO; | |
| 231 | + | |
| 230 | 232 | void DeferredLightingEffect::render(RenderArgs* args) { |
| 231 | 233 | gpu::Batch batch; |
| 232 | 234 | |
| @@ -236,18 +238,20 @@ void DeferredLightingEffect::render(RenderArgs* args) { · 3 unmodified lines | ||
| 236 | 238 | QSize framebufferSize = framebufferCache->getFrameBufferSize(); |
| 237 | 239 | |
| 238 | 240 | // binding the first framebuffer |
| 239 | − auto freeFBO = framebufferCache->getSecondaryFramebuffer(); | |
| 240 | − batch.setFramebuffer(freeFBO); | |
| 241 | + _copyFBO = framebufferCache->getFramebuffer(); | |
| 242 | + batch.setFramebuffer(_copyFBO); | |
| 241 | 243 | |
| 242 | 244 | batch.setViewportTransform(args->_viewport); |
| 243 | 245 | |
| 244 | − batch.clearColorFramebuffer(freeFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f)); | |
| 246 | + batch.clearColorFramebuffer(_copyFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f)); | |
| 245 | 247 | |
| 246 | − auto primaryFramebuffer = framebufferCache->getPrimaryFramebuffer(); | |
| 247 | − for (int i = 0; i < 3; ++i) { | |
| 248 | − batch.setResourceTexture(i, primaryFramebuffer->getRenderBuffer(i)); | |
| 249 | − } | |
| 250 | − batch.setResourceTexture(3, primaryFramebuffer->getDepthStencilBuffer()); | |
| 248 | + batch.setResourceTexture(0, framebufferCache->getPrimaryColorTexture()); | |
| 249 | + | |
| 250 | + batch.setResourceTexture(1, framebufferCache->getPrimaryNormalTexture()); | |
| 251 | + | |
| 252 | + batch.setResourceTexture(2, framebufferCache->getPrimarySpecularTexture()); | |
| 253 | + | |
| 254 | + batch.setResourceTexture(3, framebufferCache->getPrimaryDepthTexture()); | |
| 251 | 255 | |
| 252 | 256 | float sMin = args->_viewport.x / (float)framebufferSize.width(); |
| 253 | 257 | float sWidth = args->_viewport.z / (float)framebufferSize.width(); |
| @@ -532,17 +536,16 @@ void DeferredLightingEffect::render(RenderArgs* args) { · 278 unmodified lines | ||
| 532 | 536 | // End of the Lighting pass |
| 533 | 537 | } |
| 534 | 538 | |
| 539 | + | |
| 535 | 540 | void DeferredLightingEffect::copyBack(RenderArgs* args) { |
| 536 | 541 | gpu::Batch batch; |
| 537 | 542 | auto framebufferCache = DependencyManager::get<FramebufferCache>(); |
| 538 | 543 | QSize framebufferSize = framebufferCache->getFrameBufferSize(); |
| 539 | 544 | |
| 540 | − auto freeFBO = framebufferCache->getSecondaryFramebuffer(); | |
| 541 | − | |
| 542 | 545 | batch.setFramebuffer(framebufferCache->getPrimaryFramebuffer()); |
| 543 | 546 | batch.setPipeline(_blitLightBuffer); |
| 544 | 547 | |
| 545 | − batch.setResourceTexture(0, freeFBO->getRenderBuffer(0)); | |
| 548 | + batch.setResourceTexture(0, _copyFBO->getRenderBuffer(0)); | |
| 546 | 549 | |
| 547 | 550 | batch.setProjectionTransform(glm::mat4()); |
| 548 | 551 | batch.setViewTransform(Transform()); |
| @@ -561,8 +564,10 @@ void DeferredLightingEffect::copyBack(RenderArgs* args) { · 12 unmodified lines | ||
| 561 | 564 | |
| 562 | 565 | batch.draw(gpu::TRIANGLE_STRIP, 4); |
| 563 | 566 | |
| 567 | + | |
| 564 | 568 | args->_context->syncCache(); |
| 565 | 569 | args->_context->render(batch); |
| 570 | + framebufferCache->releaseFramebuffer(_copyFBO); | |
| 566 | 571 | } |
| 567 | 572 | |
| 568 | 573 | void DeferredLightingEffect::setupTransparent(RenderArgs* args, int lightBufferUnit) { |