From 2fca77867ba42a3b7d5a137868b325c79efc5797 Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 29 Jul 2019 13:45:08 -0700 Subject: [PATCH] broken on android again somehow --- libraries/render-utils/src/BloomEffect.cpp | 3 +-- .../render-utils/src/RenderCommonTask.cpp | 8 ++++++- .../render-utils/src/RenderForwardTask.cpp | 7 +++--- .../src/ToneMapAndResampleTask.cpp | 22 ++++++++++++------- libraries/render-utils/src/toneMapping.slf | 2 +- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/libraries/render-utils/src/BloomEffect.cpp b/libraries/render-utils/src/BloomEffect.cpp index a069aa60fa..10df138fad 100644 --- a/libraries/render-utils/src/BloomEffect.cpp +++ b/libraries/render-utils/src/BloomEffect.cpp @@ -60,8 +60,7 @@ void BloomThreshold::run(const render::RenderContextPointer& renderContext, cons auto colorTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(inputBuffer->getTexelFormat(), bufferSize.x, bufferSize.y, gpu::Texture::SINGLE_MIP, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT, gpu::Sampler::WRAP_CLAMP))); - //_outputBuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("BloomThreshold")); - _outputBuffer = args->_blitFramebuffer; + _outputBuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("BloomThreshold")); _outputBuffer->setRenderBuffer(0, colorTexture); _parameters.edit()._deltaUV = { 1.0f / bufferSize.x, 1.0f / bufferSize.y }; diff --git a/libraries/render-utils/src/RenderCommonTask.cpp b/libraries/render-utils/src/RenderCommonTask.cpp index 8868d2fe7c..cddf1a6410 100644 --- a/libraries/render-utils/src/RenderCommonTask.cpp +++ b/libraries/render-utils/src/RenderCommonTask.cpp @@ -154,13 +154,19 @@ void NewFramebuffer::run(const render::RenderContextPointer& renderContext, cons glm::uvec2 frameSize(args->_viewport.z, args->_viewport.w); output.reset(); + auto destBlitFbo = args->_blitFramebuffer; + if (destBlitFbo && destBlitFbo->getSize() == frameSize) { + output = destBlitFbo; + return; + } + // Else use the lodal Framebuffer if (_outputFramebuffer && _outputFramebuffer->getSize() != frameSize) { _outputFramebuffer.reset(); } if (!_outputFramebuffer) { - _outputFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("newFramebuffer.out")); + _outputFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("newFramebuffer2.out")); auto colorFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::R11G11B10); auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR); auto colorTexture = gpu::Texture::createRenderBuffer(colorFormat, frameSize.x, frameSize.y, gpu::Texture::SINGLE_MIP, defaultSampler); diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index 714291d103..97d0bbbc2e 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -140,7 +140,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend task.addJob("DrawZoneStack", debugZoneInputs); } - const auto newResolvedFramebuffer = task.addJob("MakeResolvingFramebuffer"); + //const auto newResolvedFramebuffer = task.addJob("MakeResolvingFramebuffer"); #if 1 const auto resolveInputs = ResolveFramebuffer::Inputs(scaledPrimaryFramebuffer, static_cast(nullptr)).asVarying(); @@ -149,12 +149,13 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend #endif const auto resolvedFramebuffer = task.addJob("Resolve", resolveInputs); + const auto toneMappedBuffer = resolvedFramebuffer; //const auto toneMappingInputs = ToneMappingDeferred::Input(resolvedFramebuffer, args->blitFramebuffer).asVarying(); - const auto toneMappedBuffer = task.addJob("ToneMapAndResample", resolvedFramebuffer); + const auto primaryFramebuffer = task.addJob("ToneMapAndResample", toneMappedBuffer); // HUD Layer - const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(toneMappedBuffer, lightingModel, hudOpaque, hudTransparent, hazeFrame).asVarying(); + const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(primaryFramebuffer, 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 adafdf0531..dbd735f098 100644 --- a/libraries/render-utils/src/ToneMapAndResampleTask.cpp +++ b/libraries/render-utils/src/ToneMapAndResampleTask.cpp @@ -29,9 +29,8 @@ ToneMapAndResample::ToneMapAndResample() { Parameters parameters; _parametersBuffer = gpu::BufferView(std::make_shared(sizeof(Parameters), (const gpu::Byte*) ¶meters)); } - -void ToneMapAndResample::init(RenderArgs* args) { - +/* +void ToneMapAndResample::init() { // shared_ptr to gpu::State gpu::StatePointer blitState = gpu::StatePointer(new gpu::State()); @@ -41,6 +40,7 @@ void ToneMapAndResample::init(RenderArgs* args) { _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(gpu::Shader::createProgram(toneMapping), blitState)); _mirrorPipeline = gpu::PipelinePointer(gpu::Pipeline::create(gpu::Shader::createProgram(toneMapping_mirrored), blitState)); } + */ void ToneMapAndResample::setExposure(float exposure) { auto& params = _parametersBuffer.get(); @@ -72,20 +72,26 @@ void ToneMapAndResample::run(const RenderContextPointer& renderContext, const In auto lightingBuffer = input->getRenderBuffer(0); resampledFrameBuffer = args->_blitFramebuffer; - - if (!lightingBuffer || !resampledFramebuffer) { +/* + if (!lightingBuffer || !resampledFrameBuffer) { return; - } + }*/ if (resampledFrameBuffer != sourceFramebuffer) { if (!_pipeline) { - init(args); + gpu::StatePointer blitState = gpu::StatePointer(new gpu::State()); + + blitState->setDepthTest(gpu::State::DepthTest(false, false)); + blitState->setColorWriteMask(true, true, true, true); + + _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(gpu::Shader::createProgram(toneMapping), blitState)); + _mirrorPipeline = gpu::PipelinePointer(gpu::Pipeline::create(gpu::Shader::createProgram(toneMapping_mirrored), blitState)); } const auto bufferSize = resampledFrameBuffer->getSize(); - const auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); + auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); glm::ivec4 destViewport{ 0, 0, bufferSize.x, bufferSize.y }; diff --git a/libraries/render-utils/src/toneMapping.slf b/libraries/render-utils/src/toneMapping.slf index d90d1b3c8a..32aa2b0788 100644 --- a/libraries/render-utils/src/toneMapping.slf +++ b/libraries/render-utils/src/toneMapping.slf @@ -44,7 +44,7 @@ layout(location=0) out vec4 outFragColor; void main(void) { <@if HIFI_USE_MIRRORED@> - vec4 fragColorRaw = texture(colorMap, vec2(1.0 - varTexCoord0.x, varTexCoord0.y); + vec4 fragColorRaw = texture(colorMap, vec2(1.0 - varTexCoord0.x, varTexCoord0.y)); <@else@> vec4 fragColorRaw = texture(colorMap, varTexCoord0); <@endif@>