History

Improving the design of the Jobs and varying

Sam Gateau committed 11 years ago

Commit 9be87751 parent fb5738e8 files · +310 −127Browse files

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

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+69−12
@@ -21,18 +21,18 @@ · 20 unmodified lines
2121
2222 using namespace render;
2323
24−template <> void render::jobRun(const PrepareDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
24+void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
2525 PerformanceTimer perfTimer("PrepareDeferred");
26− DependencyManager::get<DeferredLightingEffect>()->prepare();
26+ DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
2727 }
2828
29−template <> void render::jobRun(const RenderDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
29+void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
3030 PerformanceTimer perfTimer("RenderDeferred");
31− DependencyManager::get<DeferredLightingEffect>()->render();
31+ DependencyManager::get<DeferredLightingEffect>()->render(renderContext->args);
3232 // renderContext->args->_context->syncCache();
3333 }
3434
35−template <> void render::jobRun(const ResolveDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
35+void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
3636 PerformanceTimer perfTimer("ResolveDeferred");
3737 DependencyManager::get<DeferredLightingEffect>()->copyBack(renderContext->args);
3838 renderContext->args->_context->syncCache();
@@ -40,7 +40,7 @@ template <> void render::jobRun(const ResolveDeferred& job, const SceneContextPo · 1 unmodified line
4040 }
4141
4242
43−
43+/*
4444 RenderDeferredTask::RenderDeferredTask() : Task() {
4545 _jobs.push_back(Job(PrepareDeferred()));
4646 _jobs.push_back(Job(DrawBackground()));
@@ -53,6 +53,22 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 6 unmodified lines
5353 _jobs.push_back(Job(DrawPostLayered()));
5454 _jobs.push_back(Job(ResetGLState()));
5555 }
56+*/
57+RenderDeferredTask::RenderDeferredTask() : Task() {
58+ _jobs.push_back(Job(new PrepareDeferred::JobModel()));
59+ _jobs.push_back(Job(new DrawBackground::JobModel()));
60+ _jobs.push_back(Job(new FetchItems::JobModel()));
61+ _jobs.push_back(Job(new CullItems::JobModel(_jobs.back().getOutput())));
62+ _jobs.push_back(Job(new DepthSortItems::JobModel(_jobs.back().getOutput())));
63+ _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel(_jobs.back().getOutput())));
64+ _jobs.push_back(Job(new DrawLight::JobModel()));
65+ _jobs.push_back(Job(new ResetGLState::JobModel()));
66+ _jobs.push_back(Job(new RenderDeferred::JobModel()));
67+ _jobs.push_back(Job(new ResolveDeferred::JobModel()));
68+ _jobs.push_back(Job(new DrawTransparentDeferred::JobModel()));
69+ _jobs.push_back(Job(new DrawPostLayered::JobModel()));
70+ _jobs.push_back(Job(new ResetGLState::JobModel()));
71+}
5672
5773 RenderDeferredTask::~RenderDeferredTask() {
5874 }
@@ -77,9 +93,8 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 18 unmodified lines
7793 }
7894 };
7995
80−
81−
82−template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
96+/*
97+void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
8398 PerformanceTimer perfTimer("DrawOpaqueDeferred");
8499 assert(renderContext->args);
85100 assert(renderContext->args->_viewFrustum);
@@ -126,7 +141,7 @@ template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContex · 40 unmodified lines
126141 }
127142 }
128143 */
129−
144+/*
130145 if (renderContext->_renderOpaque) {
131146 RenderArgs* args = renderContext->args;
132147 gpu::Batch batch;
@@ -153,13 +168,49 @@ template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContex · 20 unmodified lines
153168
154169 renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems);
155170
171+ renderContext->args->_context->syncCache();
156172 args->_context->render((*args->_batch));
157173 args->_batch = nullptr;
158174 }
159175 }
176+*/
160177
178+void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems) {
179+ PerformanceTimer perfTimer("DrawOpaqueDeferred");
180+ assert(renderContext->args);
181+ assert(renderContext->args->_viewFrustum);
161182
162−template <> void render::jobRun(const DrawTransparentDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
183+ RenderArgs* args = renderContext->args;
184+ gpu::Batch batch;
185+ args->_batch = &batch;
186+
187+ glm::mat4 projMat;
188+ Transform viewMat;
189+ args->_viewFrustum->evalProjectionMatrix(projMat);
190+ args->_viewFrustum->evalViewTransform(viewMat);
191+ if (args->_renderMode == RenderArgs::MIRROR_RENDER_MODE) {
192+ viewMat.postScale(glm::vec3(-1.0f, 1.0f, 1.0f));
193+ }
194+ batch.setProjectionTransform(projMat);
195+ batch.setViewTransform(viewMat);
196+
197+ {
198+ GLenum buffers[3];
199+ int bufferCount = 0;
200+ buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
201+ buffers[bufferCount++] = GL_COLOR_ATTACHMENT1;
202+ buffers[bufferCount++] = GL_COLOR_ATTACHMENT2;
203+ batch._glDrawBuffers(bufferCount, buffers);
204+ }
205+
206+ renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
207+
208+ renderContext->args->_context->syncCache();
209+ args->_context->render((*args->_batch));
210+ args->_batch = nullptr;
211+}
212+
213+void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
163214 PerformanceTimer perfTimer("DrawTransparentDeferred");
164215 assert(renderContext->args);
165216 assert(renderContext->args->_viewFrustum);
@@ -172,7 +223,13 @@ template <> void render::jobRun(const DrawTransparentDeferred& job, const SceneC · 6 unmodified lines
172223 ItemIDsBounds inItems;
173224 inItems.reserve(items.size());
174225 for (auto id : items) {
175− inItems.push_back(id);
226+ auto item = scene->getItem(id);
227+ AABox bound;
228+ {
229+ PerformanceTimer perfTimer("getBound");
230+ bound = item.getBound();
231+ }
232+ inItems.emplace_back(ItemIDAndBounds(id, bound));
176233 }
177234 ItemIDsBounds& renderedItems = inItems;
178235