History

New stereo rendering implementation

Brad Davis committed 11 years ago

Commit 76f236a1 parent f6f189c27 files · +452 −210Browse files

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

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+41−24
@@ -35,6 +35,7 @@ void SetupDeferred::run(const SceneContextPointer& sceneContext, const RenderCon · 34 unmodified lines
35 auto primaryFbo = DependencyManager::get<FramebufferCache>()->getPrimaryFramebufferDepthColor();35 auto primaryFbo = DependencyManager::get<FramebufferCache>()->getPrimaryFramebufferDepthColor();
36 36
37 gpu::Batch batch;37 gpu::Batch batch;
38 batch.enableStereo(false);
38 batch.setFramebuffer(nullptr);39 batch.setFramebuffer(nullptr);
39 batch.setFramebuffer(primaryFbo);40 batch.setFramebuffer(primaryFbo);
40 41
@@ -159,6 +160,8 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 118 unmodified lines
159 160
160 RenderArgs* args = renderContext->args;161 RenderArgs* args = renderContext->args;
161 gpu::Batch batch;162 gpu::Batch batch;
163 batch.setViewportTransform(args->_viewport);
164 batch.setStateScissorRect(args->_viewport);
162 args->_batch = &batch;165 args->_batch = &batch;
163 166
164 renderContext->_numDrawnOpaqueItems = inItems.size();167 renderContext->_numDrawnOpaqueItems = inItems.size();
@@ -188,6 +191,8 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 23 unmodified lines
188 191
189 RenderArgs* args = renderContext->args;192 RenderArgs* args = renderContext->args;
190 gpu::Batch batch;193 gpu::Batch batch;
194 batch.setViewportTransform(args->_viewport);
195 batch.setStateScissorRect(args->_viewport);
191 args->_batch = &batch;196 args->_batch = &batch;
192 197
193 renderContext->_numDrawnTransparentItems = inItems.size();198 renderContext->_numDrawnTransparentItems = inItems.size();
@@ -247,30 +252,42 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 53 unmodified lines
247 renderContext->_numFeedOverlay3DItems = inItems.size();252 renderContext->_numFeedOverlay3DItems = inItems.size();
248 renderContext->_numDrawnOverlay3DItems = inItems.size();253 renderContext->_numDrawnOverlay3DItems = inItems.size();
249 254
250 RenderArgs* args = renderContext->args;
251 gpu::Batch batch;
252 args->_batch = &batch;
253 args->_whiteTexture = DependencyManager::get<TextureCache>()->getWhiteTexture();
254
255 glm::mat4 projMat;
256 Transform viewMat;
257 args->_viewFrustum->evalProjectionMatrix(projMat);
258 args->_viewFrustum->evalViewTransform(viewMat);
259
260 batch.setProjectionTransform(projMat);
261 batch.setViewTransform(viewMat);
262 batch.setViewportTransform(args->_viewport);
263 batch.setStateScissorRect(args->_viewport);
264
265 batch.setPipeline(getOpaquePipeline());
266 batch.setResourceTexture(0, args->_whiteTexture);
267
268 if (!inItems.empty()) {255 if (!inItems.empty()) {
269 batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0, true);256 RenderArgs* args = renderContext->args;
270 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);257
271 }258 // Clear the framebuffer without stereo
259 // Needs to be distinct from the other batch because using the clear call
260 // while stereo is enabled triggers a warning
261 {
262 gpu::Batch batch;
263 batch.enableStereo(false);
264 batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0, true);
265 args->_context->render(batch);
266 }
272 267
273 args->_context->render((*args->_batch));268 // Render the items
274 args->_batch = nullptr;269 {
275 args->_whiteTexture.reset();270 gpu::Batch batch;
271 args->_batch = &batch;
272 args->_whiteTexture = DependencyManager::get<TextureCache>()->getWhiteTexture();
273
274 glm::mat4 projMat;
275 Transform viewMat;
276 args->_viewFrustum->evalProjectionMatrix(projMat);
277 args->_viewFrustum->evalViewTransform(viewMat);
278
279 batch.setProjectionTransform(projMat);
280 batch.setViewTransform(viewMat);
281 batch.setViewportTransform(args->_viewport);
282 batch.setStateScissorRect(args->_viewport);
283
284 batch.setPipeline(getOpaquePipeline());
285 batch.setResourceTexture(0, args->_whiteTexture);
286 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
287
288 args->_context->render((*args->_batch));
289 args->_batch = nullptr;
290 args->_whiteTexture.reset();
291 }
292 }
276}293}