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); } }