History

Revert "Revert "Mirrors + Portals""

Dale Glass committed 2 years ago

Commit e7591d61 parent b33d35c81 files · +1047 −263Browse files

Showing the changes to libraries/render-utils/src/RenderForwardTask.cpp (1 of 81 files). Show all

Unified · Split

libraries/render-utils/src/RenderForwardTask.cpp+20−6
@@ -34,6 +34,8 @@ · 33 unmodified lines
34#include "RenderCommonTask.h"34#include "RenderCommonTask.h"
35#include "RenderHUDLayerTask.h"35#include "RenderHUDLayerTask.h"
36 36
37#include "RenderViewTask.h"
38
37namespace ru {39namespace ru {
38 using render_utils::slot::texture::Texture;40 using render_utils::slot::texture::Texture;
39 using render_utils::slot::buffer::Buffer;41 using render_utils::slot::buffer::Buffer;
@@ -66,13 +68,16 @@ void RenderForwardTask::configure(const Config& config) { · 26 unmodified lines
66 preparePrimaryBufferConfig->setResolutionScale(config.resolutionScale);68 preparePrimaryBufferConfig->setResolutionScale(config.resolutionScale);
67}69}
68 70
69void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output) {71void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output, render::CullFunctor cullFunctor, size_t depth) {
70 task.addJob<SetRenderMethod>("SetRenderMethodTask", render::Args::FORWARD);72 task.addJob<SetRenderMethod>("SetRenderMethodTask", render::Args::FORWARD);
71 73
72 // Prepare the ShapePipelines74 // Prepare the ShapePipelines
73 auto fadeEffect = DependencyManager::get<FadeEffect>();75 auto fadeEffect = DependencyManager::get<FadeEffect>();
74 ShapePlumberPointer shapePlumber = std::make_shared<ShapePlumber>();76 static ShapePlumberPointer shapePlumber = std::make_shared<ShapePlumber>();
75 initForwardPipelines(*shapePlumber);77 static std::once_flag once;
78 std::call_once(once, [] {
79 initForwardPipelines(*shapePlumber);
80 });
76 81
77 // Unpack inputs82 // Unpack inputs
78 const auto& inputs = input.get<Input>();83 const auto& inputs = input.get<Input>();
@@ -86,6 +91,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 7 unmodified lines
86 const auto& opaques = items[RenderFetchCullSortTask::OPAQUE_SHAPE];91 const auto& opaques = items[RenderFetchCullSortTask::OPAQUE_SHAPE];
87 const auto& transparents = items[RenderFetchCullSortTask::TRANSPARENT_SHAPE];92 const auto& transparents = items[RenderFetchCullSortTask::TRANSPARENT_SHAPE];
88 const auto& metas = items[RenderFetchCullSortTask::META];93 const auto& metas = items[RenderFetchCullSortTask::META];
94 const auto& mirrors = items[RenderFetchCullSortTask::MIRROR];
89 const auto& inFrontOpaque = items[RenderFetchCullSortTask::LAYER_FRONT_OPAQUE_SHAPE];95 const auto& inFrontOpaque = items[RenderFetchCullSortTask::LAYER_FRONT_OPAQUE_SHAPE];
90 const auto& inFrontTransparent = items[RenderFetchCullSortTask::LAYER_FRONT_TRANSPARENT_SHAPE];96 const auto& inFrontTransparent = items[RenderFetchCullSortTask::LAYER_FRONT_TRANSPARENT_SHAPE];
91 const auto& hudOpaque = items[RenderFetchCullSortTask::LAYER_HUD_OPAQUE_SHAPE];97 const auto& hudOpaque = items[RenderFetchCullSortTask::LAYER_HUD_OPAQUE_SHAPE];
@@ -107,7 +113,6 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 15 unmodified lines
107 // First job, alter faded113 // First job, alter faded
108 fadeEffect->build(task, opaques);114 fadeEffect->build(task, opaques);
109 115
110
111 // GPU jobs: Start preparing the main framebuffer116 // GPU jobs: Start preparing the main framebuffer
112 const auto scaledPrimaryFramebuffer = task.addJob<PreparePrimaryFramebufferMSAA>("PreparePrimaryBufferForward");117 const auto scaledPrimaryFramebuffer = task.addJob<PreparePrimaryFramebufferMSAA>("PreparePrimaryBufferForward");
113 118
@@ -125,6 +130,16 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 11 unmodified lines
125 const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel, hazeFrame).asVarying();130 const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel, hazeFrame).asVarying();
126 task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber, true);131 task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber, true);
127 132
133 const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f));
134#ifndef Q_OS_ANDROID
135 if (depth < RenderMirrorTask::MAX_MIRROR_DEPTH) {
136 const auto mirrorInputs = RenderMirrorTask::Inputs(mirrors, scaledPrimaryFramebuffer, nullJitter).asVarying();
137 for (size_t i = 0; i < RenderMirrorTask::MAX_MIRRORS_PER_LEVEL; i++) {
138 task.addJob<RenderMirrorTask>("RenderMirrorTask" + std::to_string(i) + "Depth" + std::to_string(depth), mirrorInputs, i, cullFunctor, depth);
139 }
140 }
141#endif
142
128 // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job143 // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job
129 const auto backgroundInputs = DrawBackgroundStage::Inputs(lightingModel, backgroundFrame, hazeFrame).asVarying();144 const auto backgroundInputs = DrawBackgroundStage::Inputs(lightingModel, backgroundFrame, hazeFrame).asVarying();
130 task.addJob<DrawBackgroundStage>("DrawBackgroundForward", backgroundInputs);145 task.addJob<DrawBackgroundStage>("DrawBackgroundForward", backgroundInputs);
@@ -134,7 +149,6 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 3 unmodified lines
134 task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber, false);149 task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber, false);
135 150
136 // Layered151 // Layered
137 const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f));
138 const auto inFrontOpaquesInputs = DrawLayered3D::Inputs(inFrontOpaque, lightingModel, hazeFrame, nullJitter).asVarying();152 const auto inFrontOpaquesInputs = DrawLayered3D::Inputs(inFrontOpaque, lightingModel, hazeFrame, nullJitter).asVarying();
139 const auto inFrontTransparentsInputs = DrawLayered3D::Inputs(inFrontTransparent, lightingModel, hazeFrame, nullJitter).asVarying();153 const auto inFrontTransparentsInputs = DrawLayered3D::Inputs(inFrontTransparent, lightingModel, hazeFrame, nullJitter).asVarying();
140 task.addJob<DrawLayered3D>("DrawInFrontOpaque", inFrontOpaquesInputs, true);154 task.addJob<DrawLayered3D>("DrawInFrontOpaque", inFrontOpaquesInputs, true);
@@ -159,7 +173,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 18 unmodified lines
159 const auto destFramebuffer = static_cast<gpu::FramebufferPointer>(nullptr);173 const auto destFramebuffer = static_cast<gpu::FramebufferPointer>(nullptr);
160 174
161 const auto toneMappingInputs = ToneMapAndResample::Input(resolvedFramebuffer, destFramebuffer).asVarying();175 const auto toneMappingInputs = ToneMapAndResample::Input(resolvedFramebuffer, destFramebuffer).asVarying();
162 const auto toneMappedBuffer = task.addJob<ToneMapAndResample>("ToneMapping", toneMappingInputs);176 const auto toneMappedBuffer = task.addJob<ToneMapAndResample>("ToneMapping", toneMappingInputs, depth);
163 // HUD Layer177 // HUD Layer
164 const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(toneMappedBuffer, lightingModel, hudOpaque, hudTransparent, hazeFrame).asVarying();178 const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(toneMappedBuffer, lightingModel, hudOpaque, hudTransparent, hazeFrame).asVarying();
165 task.addJob<RenderHUDLayerTask>("RenderHUDLayer", renderHUDLayerInputs);179 task.addJob<RenderHUDLayerTask>("RenderHUDLayer", renderHUDLayerInputs);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t