diff --git a/libraries/render-utils/src/OutlineEffect.cpp b/libraries/render-utils/src/OutlineEffect.cpp index 3876a87c02..f7cb72b8ef 100644 --- a/libraries/render-utils/src/OutlineEffect.cpp +++ b/libraries/render-utils/src/OutlineEffect.cpp @@ -145,12 +145,12 @@ void DrawOutline::run(const render::RenderContextPointer& renderContext, const I auto mainFrameBuffer = inputs.get1(); if (mainFrameBuffer) { - auto sceneDepthBuffer = mainFrameBuffer->getPrimaryDepthTexture(); + auto sceneDepthBuffer = inputs.get2(); const auto frameTransform = inputs.get0(); - auto outlinedDepthBuffer = inputs.get2(); + auto outlinedDepthBuffer = mainFrameBuffer->getPrimaryDepthTexture(); auto destinationFrameBuffer = inputs.get3(); auto pipeline = getPipeline(); - auto framebufferSize = glm::ivec2(sceneDepthBuffer->getDimensions()); + auto framebufferSize = glm::ivec2(outlinedDepthBuffer->getDimensions()); if (!_primaryWithoutDepthBuffer || framebufferSize!=_frameBufferSize) { // Failing to recreate this frame buffer when the screen has been resized creates a bug on Mac @@ -159,7 +159,7 @@ void DrawOutline::run(const render::RenderContextPointer& renderContext, const I _frameBufferSize = framebufferSize; } - if (outlinedDepthBuffer) { + if (sceneDepthBuffer) { auto args = renderContext->args; { auto& configuration = _configuration.edit(); @@ -185,8 +185,8 @@ void DrawOutline::run(const render::RenderContextPointer& renderContext, const I batch.setUniformBuffer(OUTLINE_PARAMS_SLOT, _configuration); batch.setUniformBuffer(FRAME_TRANSFORM_SLOT, frameTransform->getFrameTransformBuffer()); - batch.setResourceTexture(SCENE_DEPTH_SLOT, sceneDepthBuffer); - batch.setResourceTexture(OUTLINED_DEPTH_SLOT, outlinedDepthBuffer->getDepthTexture()); + batch.setResourceTexture(SCENE_DEPTH_SLOT, sceneDepthBuffer->getDepthTexture()); + batch.setResourceTexture(OUTLINED_DEPTH_SLOT, outlinedDepthBuffer); batch.draw(gpu::TRIANGLE_STRIP, 4); // Restore previous frame buffer @@ -255,7 +255,7 @@ void DebugOutline::run(const render::RenderContextPointer& renderContext, const batch.setModelTransform(Transform()); batch.setPipeline(getDebugPipeline()); - batch.setResourceTexture(0, outlineFramebuffer->getDepthTexture()); + batch.setResourceTexture(0, outlineFramebuffer->getPrimaryDepthTexture()); const glm::vec4 color(1.0f, 0.5f, 0.2f, 1.0f); const glm::vec2 bottomLeft(-1.0f, -1.0f); @@ -369,7 +369,7 @@ void DrawOutlineTask::build(JobModel& task, const render::Varying& inputs, rende const auto input = inputs.get(); const auto selectedMetas = inputs.getN(0); const auto shapePlumber = input.get1(); - const auto deferredFramebuffer = inputs.getN(2); + const auto outlinedFrameBuffer = inputs.getN(2); const auto primaryFramebuffer = inputs.getN(3); const auto deferredFrameTransform = inputs.getN(4); @@ -383,22 +383,22 @@ void DrawOutlineTask::build(JobModel& task, const render::Varying& inputs, rende initZPassPipelines(*shapePlumberZPass, state); } - const auto& outlinedItemIDs = task.addJob("MetaToSubItemIDs", selectedMetas); - const auto& outlinedItems = task.addJob("MetaToSubItems", outlinedItemIDs, true); + const auto& outlinedItemIDs = task.addJob("OutlineMetaToSubItemIDs", selectedMetas); + const auto& outlinedItems = task.addJob("OutlineMetaToSubItems", outlinedItemIDs, true); + + // Retrieve z value of the scene objects + const auto outlinePrepareInputs = PrepareOutline::Inputs(outlinedItems, outlinedFrameBuffer).asVarying(); + const auto sceneFrameBuffer = task.addJob("OutlineCopyDepth", outlinePrepareInputs); // Sort - const auto& sortedPipelines = task.addJob("PipelineSort", outlinedItems); - const auto& sortedShapes = task.addJob("DepthSort", sortedPipelines); - task.addJob("Depth", sortedShapes, shapePlumberZPass); - - // Retrieve z value of the outlined objects - const auto outlinePrepareInputs = PrepareOutline::Inputs(outlinedItems, deferredFramebuffer).asVarying(); - const auto outlinedFrameBuffer = task.addJob("CopyDepth", outlinePrepareInputs); + const auto& sortedPipelines = task.addJob("OutlinePipelineSort", outlinedItems); + const auto& sortedShapes = task.addJob("OutlineDepthSort", sortedPipelines); + task.addJob("OutlineDepth", sortedShapes, shapePlumberZPass); // Draw outline - const auto drawOutlineInputs = DrawOutline::Inputs(deferredFrameTransform, deferredFramebuffer, outlinedFrameBuffer, primaryFramebuffer).asVarying(); - task.addJob("Effect", drawOutlineInputs); + const auto drawOutlineInputs = DrawOutline::Inputs(deferredFrameTransform, outlinedFrameBuffer, sceneFrameBuffer, primaryFramebuffer).asVarying(); + task.addJob("OutlineEffect", drawOutlineInputs); // Debug outline - task.addJob("Debug", outlinedFrameBuffer); + task.addJob("OutlineDebug", outlinedFrameBuffer); } diff --git a/libraries/render-utils/src/OutlineEffect.h b/libraries/render-utils/src/OutlineEffect.h index a0e1823a56..4cbfb5851c 100644 --- a/libraries/render-utils/src/OutlineEffect.h +++ b/libraries/render-utils/src/OutlineEffect.h @@ -146,7 +146,7 @@ signals: class DebugOutline { public: - using Inputs = OutlineFramebufferPointer; + using Inputs = DeferredFramebufferPointer; using Config = DebugOutlineConfig; using JobModel = render::Job::ModelI; diff --git a/scripts/developer/utilities/lib/plotperf/PlotPerf.qmlc b/scripts/developer/utilities/lib/plotperf/PlotPerf.qmlc new file mode 100644 index 0000000000..e23e6334ff Binary files /dev/null and b/scripts/developer/utilities/lib/plotperf/PlotPerf.qmlc differ diff --git a/scripts/developer/utilities/render/configSlider/ConfigSlider.qmlc b/scripts/developer/utilities/render/configSlider/ConfigSlider.qmlc new file mode 100644 index 0000000000..2fdd99273a Binary files /dev/null and b/scripts/developer/utilities/render/configSlider/ConfigSlider.qmlc differ diff --git a/scripts/developer/utilities/render/fade.qmlc b/scripts/developer/utilities/render/fade.qmlc new file mode 100644 index 0000000000..8c69d76eff Binary files /dev/null and b/scripts/developer/utilities/render/fade.qmlc differ diff --git a/scripts/developer/utilities/render/outline.qml b/scripts/developer/utilities/render/outline.qml index 321dd9271b..e17f7c1f1c 100644 --- a/scripts/developer/utilities/render/outline.qml +++ b/scripts/developer/utilities/render/outline.qml @@ -14,20 +14,12 @@ import "configSlider" Item { id: root - property var pickConfig: Render.getConfig("RenderMainView.PickOutlined") - property var debugConfig: Render.getConfig("RenderMainView.DebugOutline") - property var drawConfig: Render.getConfig("RenderMainView.DrawOutline") + property var debugConfig: Render.getConfig("RenderMainView.OutlineDebug") + property var drawConfig: Render.getConfig("RenderMainView.OutlineEffect") Column { spacing: 8 - CheckBox { - text: "Edit Outline" - checked: root.pickConfig["pick"] - onCheckedChanged: { - root.pickConfig["pick"] = checked; - } - } CheckBox { text: "View Outlined Depth" checked: root.debugConfig["viewOutlinedDepth"] diff --git a/scripts/developer/utilities/render/outline.qmlc b/scripts/developer/utilities/render/outline.qmlc new file mode 100644 index 0000000000..e85e72ad3c Binary files /dev/null and b/scripts/developer/utilities/render/outline.qmlc differ