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.
This commit is contained in:
Robert Osfield
2003-01-14 14:21:06 +00:00
parent 3365634a01
commit a03fff8c57

View File

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