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
33 // libraries/render-utils/src
44 //
55 // Created by Anna Brewer on 7/3/19.
6−// Copyright 2015 High Fidelity, Inc.
6+// Copyright 2019 High Fidelity, Inc.
77 //
88 // Distributed under the Apache License, Version 2.0.
99 // 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
6161 setToneCurve((ToneCurve)config.curve);
6262 }
6363
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) {
6565 assert(renderContext->args);
6666 assert(renderContext->args->hasViewFrustum());
6767
6868 RenderArgs* args = renderContext->args;
69− auto sourceFramebuffer = input;
7069
71− auto lightingBuffer = input->getRenderBuffer(0);
70+ auto lightingBuffer = input.get0()->getRenderBuffer(0);
71+ auto resampledFramebuffer = input.get1();
7272
73− resampledFrameBuffer = args->_blitFramebuffer;
73+ if (!resampledFramebuffer) {
74+ resampledFramebuffer = args->_blitFramebuffer;
75+ }
7476
75− if (!lightingBuffer || !resampledFrameBuffer) {
77+ if (!lightingBuffer || !resampledFramebuffer) {
7678 return;
7779 }
7880
79− if (resampledFrameBuffer != sourceFramebuffer) {
81+ if (!_pipeline) {
82+ init();
83+ }
8084
81− if (!_pipeline) {
82− init();
83− }
85+ const auto bufferSize = resampledFramebuffer->getSize();
8486
85− const auto bufferSize = resampledFrameBuffer->getSize();
87+ auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions());
8688
87− auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions());
89+ glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y };
8890
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);
9094
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);
9499
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+ });
99105
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;
105108
106− // Set full final viewport
107− args->_viewport = destViewport;
108− }
109+ output = resampledFramebuffer;
109110 }