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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user