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
3434 #include "RenderCommonTask.h"
3535 #include "RenderHUDLayerTask.h"
3636
37+#include "RenderViewTask.h"
38+
3739 namespace ru {
3840 using render_utils::slot::texture::Texture;
3941 using render_utils::slot::buffer::Buffer;
@@ -66,13 +68,16 @@ void RenderForwardTask::configure(const Config& config) { · 26 unmodified lines
6668 preparePrimaryBufferConfig->setResolutionScale(config.resolutionScale);
6769 }
6870
69−void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output) {
71+void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output, render::CullFunctor cullFunctor, size_t depth) {
7072 task.addJob<SetRenderMethod>("SetRenderMethodTask", render::Args::FORWARD);
7173
7274 // Prepare the ShapePipelines
7375 auto fadeEffect = DependencyManager::get<FadeEffect>();
74− ShapePlumberPointer shapePlumber = std::make_shared<ShapePlumber>();
75− initForwardPipelines(*shapePlumber);
76+ static ShapePlumberPointer shapePlumber = std::make_shared<ShapePlumber>();
77+ static std::once_flag once;
78+ std::call_once(once, [] {
79+ initForwardPipelines(*shapePlumber);
80+ });
7681
7782 // Unpack inputs
7883 const auto& inputs = input.get<Input>();
@@ -86,6 +91,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 7 unmodified lines
8691 const auto& opaques = items[RenderFetchCullSortTask::OPAQUE_SHAPE];
8792 const auto& transparents = items[RenderFetchCullSortTask::TRANSPARENT_SHAPE];
8893 const auto& metas = items[RenderFetchCullSortTask::META];
94+ const auto& mirrors = items[RenderFetchCullSortTask::MIRROR];
8995 const auto& inFrontOpaque = items[RenderFetchCullSortTask::LAYER_FRONT_OPAQUE_SHAPE];
9096 const auto& inFrontTransparent = items[RenderFetchCullSortTask::LAYER_FRONT_TRANSPARENT_SHAPE];
9197 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
107113 // First job, alter faded
108114 fadeEffect->build(task, opaques);
109115
110−
111116 // GPU jobs: Start preparing the main framebuffer
112117 const auto scaledPrimaryFramebuffer = task.addJob<PreparePrimaryFramebufferMSAA>("PreparePrimaryBufferForward");
113118
@@ -125,6 +130,16 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 11 unmodified lines
125130 const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel, hazeFrame).asVarying();
126131 task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber, true);
127132
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+
128143 // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job
129144 const auto backgroundInputs = DrawBackgroundStage::Inputs(lightingModel, backgroundFrame, hazeFrame).asVarying();
130145 task.addJob<DrawBackgroundStage>("DrawBackgroundForward", backgroundInputs);
@@ -134,7 +149,6 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 3 unmodified lines
134149 task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber, false);
135150
136151 // Layered
137− const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f));
138152 const auto inFrontOpaquesInputs = DrawLayered3D::Inputs(inFrontOpaque, lightingModel, hazeFrame, nullJitter).asVarying();
139153 const auto inFrontTransparentsInputs = DrawLayered3D::Inputs(inFrontTransparent, lightingModel, hazeFrame, nullJitter).asVarying();
140154 task.addJob<DrawLayered3D>("DrawInFrontOpaque", inFrontOpaquesInputs, true);
@@ -159,7 +173,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend · 18 unmodified lines
159173 const auto destFramebuffer = static_cast<gpu::FramebufferPointer>(nullptr);
160174
161175 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);
163177 // HUD Layer
164178 const auto renderHUDLayerInputs = RenderHUDLayerTask::Input(toneMappedBuffer, lightingModel, hudOpaque, hudTransparent, hazeFrame).asVarying();
165179 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