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