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 | 3 | // libraries/render-utils/src |
| 4 | 4 | // |
| 5 | 5 | // Created by Anna Brewer on 7/3/19. |
| 6 | −// Copyright 2015 High Fidelity, Inc. | |
| 6 | +// Copyright 2019 High Fidelity, Inc. | |
| 7 | 7 | // |
| 8 | 8 | // Distributed under the Apache License, Version 2.0. |
| 9 | 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 | 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 | 65 | assert(renderContext->args); |
| 66 | 66 | assert(renderContext->args->hasViewFrustum()); |
| 67 | 67 | |
| 68 | 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 | 78 | return; |
| 77 | 79 | } |
| 78 | 80 | |
| 79 | − if (resampledFrameBuffer != sourceFramebuffer) { | |
| 81 | + if (!_pipeline) { | |
| 82 | + init(); | |
| 83 | + } | |
| 80 | 84 | |
| 81 | − if (!_pipeline) { | |
| 82 | − init(); | |
| 83 | − } | |
| 85 | + const auto bufferSize = resampledFramebuffer->getSize(); | |
| 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) { | |
| 92 | − batch.enableStereo(false); | |
| 93 | − batch.setFramebuffer(resampledFrameBuffer); | |
| 95 | + batch.setViewportTransform(destViewport); | |
| 96 | + batch.setProjectionTransform(glm::mat4()); | |
| 97 | + batch.resetViewTransform(); | |
| 98 | + batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); | |
| 94 | 99 | |
| 95 | − batch.setViewportTransform(destViewport); | |
| 96 | − batch.setProjectionTransform(glm::mat4()); | |
| 97 | − batch.resetViewTransform(); | |
| 98 | − batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); | |
| 100 | + batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); | |
| 101 | + batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); | |
| 102 | + batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); | |
| 103 | + batch.draw(gpu::TRIANGLE_STRIP, 4); | |
| 104 | + }); | |
| 99 | 105 | |
| 100 | − batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); | |
| 101 | − batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); | |
| 102 | − batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); | |
| 103 | − batch.draw(gpu::TRIANGLE_STRIP, 4); | |
| 104 | − }); | |
| 106 | + // Set full final viewport | |
| 107 | + args->_viewport = destViewport; | |
| 105 | 108 | |
| 106 | − // Set full final viewport | |
| 107 | − args->_viewport = destViewport; | |
| 108 | − } | |
| 109 | + output = resampledFramebuffer; | |
| 109 | 110 | } |