Showing the changes to libraries/render-utils/src/ToneMapAndResampleTask.cpp (1 of 4 files). Show all
Unified · Split
| @@ -3,7 +3,7 @@ · 2 unmodified lines | |||
| 3 | // libraries/render-utils/src | 3 | // libraries/render-utils/src |
| 4 | // | 4 | // |
| 5 | // Created by Anna Brewer on 7/3/19. | 5 | // Created by Anna Brewer on 7/3/19. |
| 6 | // Copyright 2015 High Fidelity, Inc. | 6 | // Copyright 2019 High Fidelity, Inc. |
| 7 | // | 7 | // |
| 8 | // Distributed under the Apache License, Version 2.0. | 8 | // Distributed under the Apache License, Version 2.0. |
| 9 | // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html | 9 | // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html |
| @@ -61,49 +61,50 @@ void ToneMapAndResample::configure(const Config& config) { · 51 unmodified lines | |||
| 61 | setToneCurve((ToneCurve)config.curve); | 61 | setToneCurve((ToneCurve)config.curve); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | void ToneMapAndResample::run(const RenderContextPointer& renderContext, const Input& input, gpu::FramebufferPointer& resampledFrameBuffer) { | 64 | void ToneMapAndResample::run(const RenderContextPointer& renderContext, const Input& input, Output& output) { |
| 65 | assert(renderContext->args); | 65 | assert(renderContext->args); |
| 66 | assert(renderContext->args->hasViewFrustum()); | 66 | assert(renderContext->args->hasViewFrustum()); |
| 67 | 67 | ||
| 68 | RenderArgs* args = renderContext->args; | 68 | RenderArgs* args = renderContext->args; |
| 69 | auto sourceFramebuffer = input; | ||
| 70 | 69 | ||
| 71 | auto lightingBuffer = input->getRenderBuffer(0); | 70 | auto lightingBuffer = input.get0()->getRenderBuffer(0); |
| 71 | auto resampledFramebuffer = input.get1(); | ||
| 72 | 72 | ||
| 73 | resampledFrameBuffer = args->_blitFramebuffer; | 73 | if (!resampledFramebuffer) { |
| 74 | resampledFramebuffer = args->_blitFramebuffer; | ||
| 75 | } | ||
| 74 | 76 | ||
| 75 | if (!lightingBuffer || !resampledFrameBuffer) { | 77 | if (!lightingBuffer || !resampledFramebuffer) { |
| 76 | return; | 78 | return; |
| 77 | } | 79 | } |
| 78 | 80 | ||
| 79 | if (resampledFrameBuffer != sourceFramebuffer) { | 81 | if (!_pipeline) { |
| 82 | init(); | ||
| 83 | } | ||
| 80 | 84 | ||
| 81 | if (!_pipeline) { | 85 | const auto bufferSize = resampledFramebuffer->getSize(); |
| 82 | init(); | ||
| 83 | } | ||
| 84 | 86 | ||
| 85 | const auto bufferSize = resampledFrameBuffer->getSize(); | 87 | auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); |
| 86 | 88 | ||
| 87 | auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); | 89 | glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y }; |
| 88 | 90 | ||
| 89 | glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y }; | 91 | gpu::doInBatch("Resample::run", args->_context, [&](gpu::Batch& batch) { |
| 92 | batch.enableStereo(false); | ||
| 93 | batch.setFramebuffer(resampledFramebuffer); | ||
| 90 | 94 | ||
| 91 | gpu::doInBatch("Resample::run", args->_context, [&](gpu::Batch& batch) { | 95 | batch.setViewportTransform(destViewport); |
| 92 | batch.enableStereo(false); | 96 | batch.setProjectionTransform(glm::mat4()); |
| 93 | batch.setFramebuffer(resampledFrameBuffer); | 97 | batch.resetViewTransform(); |
| 98 | batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); | ||
| 94 | 99 | ||
| 95 | batch.setViewportTransform(destViewport); | 100 | batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); |
| 96 | batch.setProjectionTransform(glm::mat4()); | 101 | batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); |
| 97 | batch.resetViewTransform(); | 102 | batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); |
| 98 | batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); | 103 | batch.draw(gpu::TRIANGLE_STRIP, 4); |
| 104 | }); | ||
| 99 | 105 | ||
| 100 | batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); | 106 | // Set full final viewport |
| 101 | batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); | 107 | args->_viewport = destViewport; |
| 102 | batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); | ||
| 103 | batch.draw(gpu::TRIANGLE_STRIP, 4); | ||
| 104 | }); | ||
| 105 | 108 | ||
| 106 | // Set full final viewport | 109 | output = resampledFramebuffer; |
| 107 | args->_viewport = destViewport; | ||
| 108 | } | ||
| 109 | } | 110 | } |