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:
Robert Osfield
2003-03-10 11:59:41 +00:00
parent ebbd03c114
commit 5c4bcd4aac
4 changed files with 79 additions and 114 deletions

View File

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