diff --git a/libraries/render-utils/CMakeLists.txt b/libraries/render-utils/CMakeLists.txt index 833d78bb74..4fbd076d05 100644 --- a/libraries/render-utils/CMakeLists.txt +++ b/libraries/render-utils/CMakeLists.txt @@ -12,7 +12,9 @@ include_hifi_library_headers(hfm) # tell CMake to exclude qrc_fonts.cpp for policy CMP0071 set_property(SOURCE qrc_fonts.cpp PROPERTY SKIP_AUTOMOC ON) -if (NOT ANDROID) +if (ANDROID) + target_link_libraries(${TARGET_NAME} android log) +else() target_nsight() endif () diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index 814c5a9080..33af6aaa71 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -145,8 +145,14 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend const auto resolveInputs = ResolveFramebuffer::Inputs(scaledPrimaryFramebuffer, newResolvedFramebuffer).asVarying(); const auto resolvedFramebuffer = task.addJob("Resolve", resolveInputs); - const auto toneMappedBuffer = task.addJob("ToneMapAndResample", resolvedFramebuffer); +#if defined(Q_OS_ANDROID) + const auto destFramebuffer = static_cast(nullptr); +#else + const auto destFramebuffer = resolvedFramebuffer; +#endif + const auto toneMappingInputs = ToneMapAndResample::Input(resolvedFramebuffer, destFramebuffer).asVarying(); + const auto toneMappedBuffer = task.addJob("ToneMapAndResample", toneMappingInputs); // HUD Layer const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(toneMappedBuffer, lightingModel, hudOpaque, hudTransparent, hazeFrame).asVarying(); task.addJob("RenderHUDLayer", renderHUDLayerInputs); diff --git a/libraries/render-utils/src/ToneMapAndResampleTask.cpp b/libraries/render-utils/src/ToneMapAndResampleTask.cpp index 45370d1dee..d9439f7a92 100644 --- a/libraries/render-utils/src/ToneMapAndResampleTask.cpp +++ b/libraries/render-utils/src/ToneMapAndResampleTask.cpp @@ -3,7 +3,7 @@ // libraries/render-utils/src // // Created by Anna Brewer on 7/3/19. -// Copyright 2015 High Fidelity, Inc. +// Copyright 2019 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // 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) { setToneCurve((ToneCurve)config.curve); } -void ToneMapAndResample::run(const RenderContextPointer& renderContext, const Input& input, gpu::FramebufferPointer& resampledFrameBuffer) { +void ToneMapAndResample::run(const RenderContextPointer& renderContext, const Input& input, Output& output) { assert(renderContext->args); assert(renderContext->args->hasViewFrustum()); RenderArgs* args = renderContext->args; - auto sourceFramebuffer = input; - auto lightingBuffer = input->getRenderBuffer(0); + auto lightingBuffer = input.get0()->getRenderBuffer(0); + auto resampledFramebuffer = input.get1(); - resampledFrameBuffer = args->_blitFramebuffer; + if (!resampledFramebuffer) { + resampledFramebuffer = args->_blitFramebuffer; + } - if (!lightingBuffer || !resampledFrameBuffer) { + if (!lightingBuffer || !resampledFramebuffer) { return; } - if (resampledFrameBuffer != sourceFramebuffer) { - - if (!_pipeline) { - init(); - } - - const auto bufferSize = resampledFrameBuffer->getSize(); - - auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); - - glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y }; - - gpu::doInBatch("Resample::run", args->_context, [&](gpu::Batch& batch) { - batch.enableStereo(false); - batch.setFramebuffer(resampledFrameBuffer); - - batch.setViewportTransform(destViewport); - batch.setProjectionTransform(glm::mat4()); - batch.resetViewTransform(); - batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); - - batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); - batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); - batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); - batch.draw(gpu::TRIANGLE_STRIP, 4); - }); - - // Set full final viewport - args->_viewport = destViewport; + if (!_pipeline) { + init(); } + + const auto bufferSize = resampledFramebuffer->getSize(); + + auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); + + glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y }; + + gpu::doInBatch("Resample::run", args->_context, [&](gpu::Batch& batch) { + batch.enableStereo(false); + batch.setFramebuffer(resampledFramebuffer); + + batch.setViewportTransform(destViewport); + batch.setProjectionTransform(glm::mat4()); + batch.resetViewTransform(); + batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); + + batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); + batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); + batch.setResourceTexture(render_utils::slot::texture::ToneMappingColor, lightingBuffer); + batch.draw(gpu::TRIANGLE_STRIP, 4); + }); + + // Set full final viewport + args->_viewport = destViewport; + + output = resampledFramebuffer; } \ No newline at end of file diff --git a/libraries/render-utils/src/ToneMapAndResampleTask.h b/libraries/render-utils/src/ToneMapAndResampleTask.h index 6d7def5f85..d02cb4afda 100644 --- a/libraries/render-utils/src/ToneMapAndResampleTask.h +++ b/libraries/render-utils/src/ToneMapAndResampleTask.h @@ -3,7 +3,7 @@ // libraries/render-utils/src // // Created by Anna Brewer on 7/3/19. -// Copyright 2015 High Fidelity, Inc. +// Copyright 2019 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -59,7 +59,7 @@ public: ToneCurve getToneCurve() const { return (ToneCurve)_parametersBuffer.get()._toneCurve; } // Inputs: lightingFramebuffer, destinationFramebuffer - using Input = gpu::FramebufferPointer; + using Input = render::VaryingSet2; using Output = gpu::FramebufferPointer; using Config = ToneMappingConfig; using JobModel = render::Job::ModelIO;