Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 8 files). Show all
Unified · Split
| @@ -21,18 +21,18 @@ · 20 unmodified lines | ||
| 21 | 21 | |
| 22 | 22 | using namespace render; |
| 23 | 23 | |
| 24 | −template <> void render::jobRun(const PrepareDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 24 | +void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 25 | 25 | PerformanceTimer perfTimer("PrepareDeferred"); |
| 26 | − DependencyManager::get<DeferredLightingEffect>()->prepare(); | |
| 26 | + DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args); | |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | −template <> void render::jobRun(const RenderDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 29 | +void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 30 | 30 | PerformanceTimer perfTimer("RenderDeferred"); |
| 31 | − DependencyManager::get<DeferredLightingEffect>()->render(); | |
| 31 | + DependencyManager::get<DeferredLightingEffect>()->render(renderContext->args); | |
| 32 | 32 | // renderContext->args->_context->syncCache(); |
| 33 | 33 | } |
| 34 | 34 | |
| 35 | −template <> void render::jobRun(const ResolveDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 35 | +void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 36 | 36 | PerformanceTimer perfTimer("ResolveDeferred"); |
| 37 | 37 | DependencyManager::get<DeferredLightingEffect>()->copyBack(renderContext->args); |
| 38 | 38 | renderContext->args->_context->syncCache(); |
| @@ -40,7 +40,7 @@ template <> void render::jobRun(const ResolveDeferred& job, const SceneContextPo · 1 unmodified line | ||
| 40 | 40 | } |
| 41 | 41 | |
| 42 | 42 | |
| 43 | − | |
| 43 | +/* | |
| 44 | 44 | RenderDeferredTask::RenderDeferredTask() : Task() { |
| 45 | 45 | _jobs.push_back(Job(PrepareDeferred())); |
| 46 | 46 | _jobs.push_back(Job(DrawBackground())); |
| @@ -53,6 +53,22 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 6 unmodified lines | ||
| 53 | 53 | _jobs.push_back(Job(DrawPostLayered())); |
| 54 | 54 | _jobs.push_back(Job(ResetGLState())); |
| 55 | 55 | } |
| 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 | +} | |
| 56 | 72 | |
| 57 | 73 | RenderDeferredTask::~RenderDeferredTask() { |
| 58 | 74 | } |
| @@ -77,9 +93,8 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 18 unmodified lines | ||
| 77 | 93 | } |
| 78 | 94 | }; |
| 79 | 95 | |
| 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) { | |
| 83 | 98 | PerformanceTimer perfTimer("DrawOpaqueDeferred"); |
| 84 | 99 | assert(renderContext->args); |
| 85 | 100 | assert(renderContext->args->_viewFrustum); |
| @@ -126,7 +141,7 @@ template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContex · 40 unmodified lines | ||
| 126 | 141 | } |
| 127 | 142 | } |
| 128 | 143 | */ |
| 129 | − | |
| 144 | +/* | |
| 130 | 145 | if (renderContext->_renderOpaque) { |
| 131 | 146 | RenderArgs* args = renderContext->args; |
| 132 | 147 | gpu::Batch batch; |
| @@ -153,13 +168,49 @@ template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContex · 20 unmodified lines | ||
| 153 | 168 | |
| 154 | 169 | renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems); |
| 155 | 170 | |
| 171 | + renderContext->args->_context->syncCache(); | |
| 156 | 172 | args->_context->render((*args->_batch)); |
| 157 | 173 | args->_batch = nullptr; |
| 158 | 174 | } |
| 159 | 175 | } |
| 176 | +*/ | |
| 160 | 177 | |
| 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); | |
| 161 | 182 | |
| 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) { | |
| 163 | 214 | PerformanceTimer perfTimer("DrawTransparentDeferred"); |
| 164 | 215 | assert(renderContext->args); |
| 165 | 216 | assert(renderContext->args->_viewFrustum); |
| @@ -172,7 +223,13 @@ template <> void render::jobRun(const DrawTransparentDeferred& job, const SceneC · 6 unmodified lines | ||
| 172 | 223 | ItemIDsBounds inItems; |
| 173 | 224 | inItems.reserve(items.size()); |
| 174 | 225 | 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)); | |
| 176 | 233 | } |
| 177 | 234 | ItemIDsBounds& renderedItems = inItems; |
| 178 | 235 | |