mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Simplified version that works directly with metas
This commit is contained in:
parent
700d4a4b43
commit
75e06b691f
3 changed files with 11 additions and 17 deletions
|
@ -66,12 +66,11 @@ gpu::TexturePointer OutlineFramebuffer::getDepthTexture() {
|
|||
}
|
||||
|
||||
void PrepareOutline::run(const render::RenderContextPointer& renderContext, const PrepareOutline::Inputs& inputs, PrepareOutline::Output& output) {
|
||||
auto outlinedOpaqueItems = inputs.get0();
|
||||
auto outlinedTransparentItems = inputs.get1();
|
||||
auto outlinedItems = inputs.get0();
|
||||
|
||||
if (!outlinedOpaqueItems.empty() || !outlinedTransparentItems.empty()) {
|
||||
if (!outlinedItems.empty()) {
|
||||
auto args = renderContext->args;
|
||||
auto deferredFrameBuffer = inputs.get2();
|
||||
auto deferredFrameBuffer = inputs.get1();
|
||||
auto frameSize = deferredFrameBuffer->getFrameSize();
|
||||
|
||||
if (!_outlineFramebuffer) {
|
||||
|
|
|
@ -44,7 +44,7 @@ class PrepareOutline {
|
|||
|
||||
public:
|
||||
|
||||
using Inputs = render::VaryingSet3<render::ItemBounds, render::ItemBounds, DeferredFramebufferPointer>;
|
||||
using Inputs = render::VaryingSet2<render::ItemBounds, DeferredFramebufferPointer>;
|
||||
// Output will contain outlined objects only z-depth texture and the input primary buffer but without the primary depth buffer
|
||||
using Output = OutlineFramebufferPointer;
|
||||
using JobModel = render::Job::ModelIO<PrepareOutline, Inputs, Output>;
|
||||
|
|
|
@ -96,19 +96,15 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
|||
|
||||
// Select items that need to be outlined
|
||||
const auto outlineSelectionName = "contextOverlayHighlightList";
|
||||
const auto outlinedOpaquesSelection = task.addJob<SelectItems>("SelectOutlinedOpaques", opaques, outlineSelectionName);
|
||||
const auto outlinedTransparentSelection = task.addJob<SelectItems>("SelectOutlinedTransparents", transparents, outlineSelectionName);
|
||||
const auto outlinedOpaqueItems = task.addJob<MetaToSubItems>("OutlinedOpaqueMetaToSubItems", outlinedOpaquesSelection);
|
||||
const auto outlinedTransparentItems = task.addJob<MetaToSubItems>("OutlinedTransparentMetaToSubItems", outlinedTransparentSelection);
|
||||
const auto selectedMetas = task.addJob<SelectItems>("PassTestSelection", metas, "contextOverlayHighlightList");
|
||||
const auto outlinedItems = task.addJob<MetaToSubItems>("OutlinedMetaToSubItems", selectedMetas);
|
||||
|
||||
// Render opaque outline objects first in DeferredBuffer
|
||||
const auto outlineOpaqueInputs = DrawStateSortDeferred::Inputs(outlinedOpaqueItems, lightingModel).asVarying();
|
||||
const auto outlineTransparentInputs = DrawStateSortDeferred::Inputs(outlinedTransparentItems, lightingModel).asVarying();
|
||||
task.addJob<DrawStateSortDeferred>("DrawOpaqueOutlined", outlineOpaqueInputs, shapePlumber);
|
||||
task.addJob<DrawStateSortDeferred>("DrawTransparentOutlined", outlineTransparentInputs, shapePlumber);
|
||||
const auto outlineInputs = DrawStateSortDeferred::Inputs(outlinedItems, lightingModel).asVarying();
|
||||
task.addJob<DrawStateSortDeferred>("DrawOutlinedDepth", outlineInputs, shapePlumber);
|
||||
|
||||
// Retrieve z value of the outlined objects
|
||||
const auto outlinePrepareInputs = PrepareOutline::Inputs(outlinedOpaqueItems, outlinedTransparentItems, deferredFramebuffer).asVarying();
|
||||
const auto outlinePrepareInputs = PrepareOutline::Inputs(outlinedItems, deferredFramebuffer).asVarying();
|
||||
const auto outlinedFrameBuffer = task.addJob<PrepareOutline>("PrepareOutline", outlinePrepareInputs);
|
||||
|
||||
// Render opaque objects in DeferredBuffer
|
||||
|
@ -181,8 +177,8 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
|||
task.addJob<ToneMappingDeferred>("ToneMapping", toneMappingInputs);
|
||||
|
||||
// Draw outline
|
||||
const auto outlineInputs = DrawOutline::Inputs(deferredFrameTransform, deferredFramebuffer, outlinedFrameBuffer, primaryFramebuffer).asVarying();
|
||||
task.addJob<DrawOutline>("DrawOutline", outlineInputs);
|
||||
const auto drawOutlineInputs = DrawOutline::Inputs(deferredFrameTransform, deferredFramebuffer, outlinedFrameBuffer, primaryFramebuffer).asVarying();
|
||||
task.addJob<DrawOutline>("DrawOutline", drawOutlineInputs);
|
||||
|
||||
{ // DEbug the bounds of the rendered items, still look at the zbuffer
|
||||
task.addJob<DrawBounds>("DrawMetaBounds", metas);
|
||||
|
@ -237,7 +233,6 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
|||
task.addJob<DebugZoneLighting>("DrawZoneStack", deferredFrameTransform);
|
||||
|
||||
// Render.getConfig("RenderMainView.DrawSelectionBounds").enabled = true
|
||||
const auto selectedMetas = task.addJob<SelectItems>("PassTestSelection", metas, "contextOverlayHighlightList");
|
||||
task.addJob<DrawBounds>("DrawSelectionBounds", selectedMetas);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue