From a03fff8c5778528659d0520eaa6af43ea1729a13 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 14 Jan 2003 14:21:06 +0000 Subject: [PATCH] Added an compile in option of applying the matrices before state in the RenderLeaf apply method. This order is intended to help support of vertex programming, but unfortunately breaks the osgreflect demo so the original ordering is kept by default. --- src/osgUtil/RenderLeaf.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/osgUtil/RenderLeaf.cpp b/src/osgUtil/RenderLeaf.cpp index 323fe54ae..0cb890dd1 100644 --- a/src/osgUtil/RenderLeaf.cpp +++ b/src/osgUtil/RenderLeaf.cpp @@ -4,16 +4,26 @@ using namespace osg; using namespace osgUtil; +// comment if you are are working with vertex programs, +// but it does break osgreflect demo and perhaps others, so keep an eye +// out artifacts. +// #define APPLY_MATICES_BEFORE_STATE + void RenderLeaf::render(State& state,RenderLeaf* previous) { if (previous) { +#ifdef APPLY_MATICES_BEFORE_STATE + // apply matrices if required. + state.applyProjectionMatrix(_projection.get()); + state.applyModelViewMatrix(_modelview.get()); +#endif + // apply state if required. RenderGraph* prev_rg = previous->_parent; RenderGraph* prev_rg_parent = prev_rg->_parent; RenderGraph* rg = _parent; - if (prev_rg_parent!=rg->_parent) { RenderGraph::moveRenderGraph(state,prev_rg_parent,rg->_parent); @@ -30,21 +40,35 @@ void RenderLeaf::render(State& state,RenderLeaf* previous) } +#ifndef APPLY_MATICES_BEFORE_STATE + // apply matrices if required. state.applyProjectionMatrix(_projection.get()); state.applyModelViewMatrix(_modelview.get()); +#endif + // draw the drawable _drawable->draw(state); } else { - RenderGraph::moveRenderGraph(state,NULL,_parent->_parent); - - // send state changes and matrix changes to OpenGL. - state.apply(_parent->_stateset.get()); - +#ifdef APPLY_MATICES_BEFORE_STATE + // apply matrices if required. state.applyProjectionMatrix(_projection.get()); state.applyModelViewMatrix(_modelview.get()); +#endif + // apply state if required. + RenderGraph::moveRenderGraph(state,NULL,_parent->_parent); + + state.apply(_parent->_stateset.get()); + +#ifndef APPLY_MATICES_BEFORE_STATE + // apply matrices if required. + state.applyProjectionMatrix(_projection.get()); + state.applyModelViewMatrix(_modelview.get()); +#endif + + // draw the drawable _drawable->draw(state); } }