From f36500a74c281a864b55c506349b0fab659c382c Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Wed, 9 Aug 2017 14:52:52 +0200 Subject: [PATCH] Working outline debugging view --- libraries/render-utils/src/OutlineEffect.cpp | 16 ++++++++++------ libraries/render-utils/src/OutlineEffect.h | 12 ++++++------ .../render-utils/src/RenderDeferredTask.cpp | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/libraries/render-utils/src/OutlineEffect.cpp b/libraries/render-utils/src/OutlineEffect.cpp index 758783760d..84315c6004 100644 --- a/libraries/render-utils/src/OutlineEffect.cpp +++ b/libraries/render-utils/src/OutlineEffect.cpp @@ -69,7 +69,7 @@ gpu::TexturePointer OutlineFramebuffer::getDepthTexture() { return _depthTexture; } -void PrepareOutline::run(const render::RenderContextPointer& renderContext, const PrepareOutline::Input& input, PrepareOutline::Output& output) { +void PrepareOutline::run(const render::RenderContextPointer& renderContext, const PrepareOutline::Inputs& input, PrepareOutline::Output& output) { auto outlinedItems = input.get1(); if (!outlinedItems.empty()) { @@ -137,8 +137,10 @@ void DebugOutline::configure(const Config& config) { _isDisplayDepthEnabled = config.viewOutlinedDepth; } -void DebugOutline::run(const render::RenderContextPointer& renderContext, const Input& input) { - if (_isDisplayDepthEnabled && input) { +void DebugOutline::run(const render::RenderContextPointer& renderContext, const Inputs& input) { + const auto outlineFramebuffer = input; + + if (_isDisplayDepthEnabled && outlineFramebuffer) { assert(renderContext->args); assert(renderContext->args->hasViewFrustum()); RenderArgs* args = renderContext->args; @@ -158,7 +160,8 @@ void DebugOutline::run(const render::RenderContextPointer& renderContext, const batch.setModelTransform(Transform()); batch.setPipeline(getDebugPipeline()); - batch.setResourceTexture(0, input->getDepthTexture()); + batch.setResourceTexture(0, outlineFramebuffer->getDepthTexture()); + const glm::vec4 color(1.0f, 0.5f, 0.2f, 1.0f); const glm::vec2 bottomLeft(-1.0f, -1.0f); const glm::vec2 topRight(1.0f, 1.0f); @@ -179,8 +182,9 @@ const gpu::PipelinePointer& DebugOutline::getDebugPipeline() { "Could not find source placeholder"); static const std::string DEFAULT_DEPTH_SHADER{ "vec4 getFragmentColor() {" - " float depth = texture(depthMap, uv).x;" - " return vec4(vec3(depth), 1.0);" + " float Zdb = texelFetch(depthMap, ivec2(gl_FragCoord.xy), 0).x;" + " Zdb = 1.0-(1.0-Zdb)*100;" + " return vec4(Zdb, Zdb, Zdb, 1.0);" " }" }; diff --git a/libraries/render-utils/src/OutlineEffect.h b/libraries/render-utils/src/OutlineEffect.h index bb4343b06a..2b5faf4378 100644 --- a/libraries/render-utils/src/OutlineEffect.h +++ b/libraries/render-utils/src/OutlineEffect.h @@ -58,14 +58,14 @@ class PrepareOutline { public: - using Input = render::VaryingSet2; + using Inputs = render::VaryingSet2; // Output will contain outlined objects only z-depth texture using Output = OutlineFramebufferPointer; - using JobModel = render::Job::ModelIO; + using JobModel = render::Job::ModelIO; PrepareOutline() {} - void run(const render::RenderContextPointer& renderContext, const PrepareOutline::Input& input, PrepareOutline::Output& output); + void run(const render::RenderContextPointer& renderContext, const PrepareOutline::Inputs& input, PrepareOutline::Output& output); private: @@ -88,15 +88,15 @@ signals: class DebugOutline { public: - using Input = OutlineFramebufferPointer; + using Inputs = OutlineFramebufferPointer; using Config = DebugOutlineConfig; - using JobModel = render::Job::ModelI; + using JobModel = render::Job::ModelI; DebugOutline(); ~DebugOutline(); void configure(const Config& config); - void run(const render::RenderContextPointer& renderContext, const Input& inputs); + void run(const render::RenderContextPointer& renderContext, const Inputs& inputs); private: diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index ba045dfff9..b48934f664 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -97,7 +97,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("DrawOpaqueOutlined", opaqueOutlineInputs, shapePlumber); // Retrieve z value of the outlined objects - const auto outlinePrepareInputs = PrepareOutline::Input(deferredFramebuffer, outlinedOpaques).hasVarying(); + const auto outlinePrepareInputs = PrepareOutline::Inputs(deferredFramebuffer, outlinedOpaques).hasVarying(); const auto outlinedFrameBuffer = task.addJob("PrepareOutline", outlinePrepareInputs); // Render opaque objects in DeferredBuffer