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 | using namespace render; | 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 | PerformanceTimer perfTimer("PrepareDeferred"); | 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 | PerformanceTimer perfTimer("RenderDeferred"); | 30 | PerformanceTimer perfTimer("RenderDeferred"); |
| 31 | DependencyManager::get<DeferredLightingEffect>()->render(); | 31 | DependencyManager::get<DeferredLightingEffect>()->render(renderContext->args); |
| 32 | // renderContext->args->_context->syncCache(); | 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 | PerformanceTimer perfTimer("ResolveDeferred"); | 36 | PerformanceTimer perfTimer("ResolveDeferred"); |
| 37 | DependencyManager::get<DeferredLightingEffect>()->copyBack(renderContext->args); | 37 | DependencyManager::get<DeferredLightingEffect>()->copyBack(renderContext->args); |
| 38 | renderContext->args->_context->syncCache(); | 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 | RenderDeferredTask::RenderDeferredTask() : Task() { | 44 | RenderDeferredTask::RenderDeferredTask() : Task() { |
| 45 | _jobs.push_back(Job(PrepareDeferred())); | 45 | _jobs.push_back(Job(PrepareDeferred())); |
| 46 | _jobs.push_back(Job(DrawBackground())); | 46 | _jobs.push_back(Job(DrawBackground())); |
| @@ -53,6 +53,22 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 6 unmodified lines | |||
| 53 | _jobs.push_back(Job(DrawPostLayered())); | 53 | _jobs.push_back(Job(DrawPostLayered())); |
| 54 | _jobs.push_back(Job(ResetGLState())); | 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 | RenderDeferredTask::~RenderDeferredTask() { | 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 | 96 | /* | |
| 81 | 97 | void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | |
| 82 | template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { | ||
| 83 | PerformanceTimer perfTimer("DrawOpaqueDeferred"); | 98 | PerformanceTimer perfTimer("DrawOpaqueDeferred"); |
| 84 | assert(renderContext->args); | 99 | assert(renderContext->args); |
| 85 | assert(renderContext->args->_viewFrustum); | 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 | if (renderContext->_renderOpaque) { | 145 | if (renderContext->_renderOpaque) { |
| 131 | RenderArgs* args = renderContext->args; | 146 | RenderArgs* args = renderContext->args; |
| 132 | gpu::Batch batch; | 147 | gpu::Batch batch; |
| @@ -153,13 +168,49 @@ template <> void render::jobRun(const DrawOpaqueDeferred& job, const SceneContex · 20 unmodified lines | |||
| 153 | 168 | ||
| 154 | renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems); | 169 | renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems); |
| 155 | 170 | ||
| 171 | renderContext->args->_context->syncCache(); | ||
| 156 | args->_context->render((*args->_batch)); | 172 | args->_context->render((*args->_batch)); |
| 157 | args->_batch = nullptr; | 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 | PerformanceTimer perfTimer("DrawTransparentDeferred"); | 214 | PerformanceTimer perfTimer("DrawTransparentDeferred"); |
| 164 | assert(renderContext->args); | 215 | assert(renderContext->args); |
| 165 | assert(renderContext->args->_viewFrustum); | 216 | assert(renderContext->args->_viewFrustum); |
| @@ -172,7 +223,13 @@ template <> void render::jobRun(const DrawTransparentDeferred& job, const SceneC · 6 unmodified lines | |||
| 172 | ItemIDsBounds inItems; | 223 | ItemIDsBounds inItems; |
| 173 | inItems.reserve(items.size()); | 224 | inItems.reserve(items.size()); |
| 174 | for (auto id : items) { | 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 | ItemIDsBounds& renderedItems = inItems; | 234 | ItemIDsBounds& renderedItems = inItems; |
| 178 | 235 | ||