History

added optional output buffer to ToneMapAndResampleTask

Anna committed 7 years ago

Commit d3107ef1 parent 3a437cf4 files · +42 −33Browse files

Showing the changes to libraries/render-utils/src/ToneMapAndResampleTask.cpp (1 of 4 files). Show all

Unified · Split

libraries/render-utils/src/ToneMapAndResampleTask.cpp+29−28
@@ -3,7 +3,7 @@ · 2 unmodified lines
3// libraries/render-utils/src3// 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.html9// 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
64void ToneMapAndResample::run(const RenderContextPointer& renderContext, const Input& input, gpu::FramebufferPointer& resampledFrameBuffer) {64void 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 viewport109 output = resampledFramebuffer;
107 args->_viewport = destViewport;
108 }
109}110}