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
3535 auto primaryFbo = DependencyManager::get<FramebufferCache>()->getPrimaryFramebufferDepthColor();
3636
3737 gpu::Batch batch;
38+ batch.enableStereo(false);
3839 batch.setFramebuffer(nullptr);
3940 batch.setFramebuffer(primaryFbo);
4041
@@ -159,6 +160,8 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 118 unmodified lines
159160
160161 RenderArgs* args = renderContext->args;
161162 gpu::Batch batch;
163+ batch.setViewportTransform(args->_viewport);
164+ batch.setStateScissorRect(args->_viewport);
162165 args->_batch = &batch;
163166
164167 renderContext->_numDrawnOpaqueItems = inItems.size();
@@ -188,6 +191,8 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 23 unmodified lines
188191
189192 RenderArgs* args = renderContext->args;
190193 gpu::Batch batch;
194+ batch.setViewportTransform(args->_viewport);
195+ batch.setStateScissorRect(args->_viewport);
191196 args->_batch = &batch;
192197
193198 renderContext->_numDrawnTransparentItems = inItems.size();
@@ -247,30 +252,42 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 53 unmodified lines
247252 renderContext->_numFeedOverlay3DItems = inItems.size();
248253 renderContext->_numDrawnOverlay3DItems = inItems.size();
249254
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−
268255 if (!inItems.empty()) {
269− batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0, true);
270− renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
271− }
256+ RenderArgs* args = renderContext->args;
257+
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+ }
272267
273− args->_context->render((*args->_batch));
274− args->_batch = nullptr;
275− args->_whiteTexture.reset();
268+ // Render the items
269+ {
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+ }
276293 }