Moved the RenderLeaf implementatation across to always applying matrices
before state, which fixes problem that can occur with state that needs the current model view or projection matrices. Changes osgreflect so that it uses ClipNode rather than clip plane, thereby fixing the problems which occur when the above is applied. Create a new osgProducer version of the original GLUT based version.
This commit is contained in:
@@ -16,22 +16,16 @@
|
||||
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_MATRICES_BEFORE_STATE
|
||||
|
||||
void RenderLeaf::render(State& state,RenderLeaf* previous)
|
||||
{
|
||||
|
||||
if (previous)
|
||||
{
|
||||
|
||||
#ifdef APPLY_MATRICES_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;
|
||||
@@ -52,34 +46,21 @@ void RenderLeaf::render(State& state,RenderLeaf* previous)
|
||||
|
||||
}
|
||||
|
||||
#ifndef APPLY_MATRICES_BEFORE_STATE
|
||||
// apply matrices if required.
|
||||
state.applyProjectionMatrix(_projection.get());
|
||||
state.applyModelViewMatrix(_modelview.get());
|
||||
#endif
|
||||
|
||||
// draw the drawable
|
||||
_drawable->draw(state);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef APPLY_MATRICES_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);
|
||||
|
||||
#ifndef APPLY_MATRICES_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