From db888b191c805604c24af26a5e566b8c4ecf9048 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 13 Jul 2002 20:31:30 +0000 Subject: [PATCH] Conveted GeoSet to use the new state::set*Pointer/disable*Pointer methods to keep the current state valid. --- include/osg/GeoSet | 4 +- src/osg/GeoSet.cpp | 6 +- src/osg/GeoSet_ogl.cpp | 170 +++++++++++++++++++------------ src/osgPlugins/osg/BlendFunc.cpp | 2 +- 4 files changed, 111 insertions(+), 71 deletions(-) diff --git a/include/osg/GeoSet b/include/osg/GeoSet index d23c479ba..791dc56d4 100644 --- a/include/osg/GeoSet +++ b/include/osg/GeoSet @@ -394,8 +394,8 @@ class SG_EXPORT GeoSet : public Drawable int _fast_path; void set_fast_path( void ); - void draw_fast_path( void ); - void draw_alternate_path( void ); + void draw_fast_path( State& state ); + void draw_alternate_path( State& state ); }; diff --git a/src/osg/GeoSet.cpp b/src/osg/GeoSet.cpp index 1aec3ddad..2f589629d 100644 --- a/src/osg/GeoSet.cpp +++ b/src/osg/GeoSet.cpp @@ -244,7 +244,7 @@ void GeoSet::setTextureBinding( const BindingType binding ) set_fast_path(); } -void GeoSet::drawImmediateMode(State&) +void GeoSet::drawImmediateMode(State& state) { if( _coords == (Vec3 *)0 && _iaformat == IA_OFF ) return; @@ -253,9 +253,9 @@ void GeoSet::drawImmediateMode(State&) computeNumVerts(); if( _fast_path ) - draw_fast_path(); + draw_fast_path(state); else - draw_alternate_path(); + draw_alternate_path(state); } void GeoSet::computeNumVerts() const diff --git a/src/osg/GeoSet_ogl.cpp b/src/osg/GeoSet_ogl.cpp index 46a439aa4..015b86c90 100644 --- a/src/osg/GeoSet_ogl.cpp +++ b/src/osg/GeoSet_ogl.cpp @@ -81,7 +81,7 @@ void GeoSet::set_fast_path( void ) } -void GeoSet::draw_fast_path( void ) +void GeoSet::draw_fast_path( State& state ) { IndexPointer ocindex = _cindex; @@ -93,79 +93,112 @@ void GeoSet::draw_fast_path( void ) break; case (V_ON) : - glDisableClientState( GL_COLOR_ARRAY ); - glDisableClientState( GL_NORMAL_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + + state.disableNormalPointer(); + state.disableColorPointer(); + state.disableTexCoordPointer(0); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glDisableClientState( GL_COLOR_ARRAY ); +// glDisableClientState( GL_NORMAL_ARRAY ); +// glDisableClientState( GL_TEXTURE_COORD_ARRAY ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (T_ON|V_ON) : - glDisableClientState( GL_COLOR_ARRAY ); - glDisableClientState( GL_NORMAL_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableNormalPointer(); + state.disableColorPointer(); + state.setTexCoordPointer(0, 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glDisableClientState( GL_COLOR_ARRAY ); +// glDisableClientState( GL_NORMAL_ARRAY ); +// glEnableClientState( GL_TEXTURE_COORD_ARRAY ); +// glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (N_ON|V_ON) : - glDisableClientState( GL_COLOR_ARRAY ); - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableColorPointer(); + state.disableTexCoordPointer(0); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); + state.setNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glDisableClientState( GL_COLOR_ARRAY ); +// glEnableClientState( GL_NORMAL_ARRAY ); +// glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glDisableClientState( GL_TEXTURE_COORD_ARRAY ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (N_ON|T_ON|V_ON) : - glDisableClientState( GL_COLOR_ARRAY ); - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableColorPointer(); + state.setNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); + state.setTexCoordPointer(0, 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glDisableClientState( GL_COLOR_ARRAY ); +// glEnableClientState( GL_NORMAL_ARRAY ); +// glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glEnableClientState( GL_TEXTURE_COORD_ARRAY ); +// glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (C_ON|V_ON) : - glEnableClientState( GL_COLOR_ARRAY ); - glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); - glDisableClientState( GL_NORMAL_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableNormalPointer(); + state.disableTexCoordPointer(0); + state.setColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glEnableClientState( GL_COLOR_ARRAY ); +// glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); +// glDisableClientState( GL_NORMAL_ARRAY ); +// glDisableClientState( GL_TEXTURE_COORD_ARRAY ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (C_ON|T_ON|V_ON) : - glEnableClientState( GL_COLOR_ARRAY ); - glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); - glDisableClientState( GL_NORMAL_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableNormalPointer(); + state.setColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); + state.setTexCoordPointer(0, 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glEnableClientState( GL_COLOR_ARRAY ); +// glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); +// glDisableClientState( GL_NORMAL_ARRAY ); +// glEnableClientState( GL_TEXTURE_COORD_ARRAY ); +// glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (C_ON|N_ON|V_ON) : - glEnableClientState( GL_COLOR_ARRAY ); - glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.disableTexCoordPointer(0); + state.setNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); + state.setColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glEnableClientState( GL_COLOR_ARRAY ); +// glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); +// glEnableClientState( GL_NORMAL_ARRAY ); +// glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glDisableClientState( GL_TEXTURE_COORD_ARRAY ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; case (C_ON|N_ON|T_ON|V_ON) : - glEnableClientState( GL_COLOR_ARRAY ); - glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.setNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); + state.setColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); + state.setTexCoordPointer(0, 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); + state.setVertexPointer(3, GL_FLOAT, 0,_coords); +// glEnableClientState( GL_COLOR_ARRAY ); +// glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); +// glEnableClientState( GL_NORMAL_ARRAY ); +// glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glEnableClientState( GL_TEXTURE_COORD_ARRAY ); +// glTexCoordPointer( 2, GL_FLOAT, 0, (GLfloat *)_tcoords ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); break; } @@ -227,16 +260,18 @@ void GeoSet::draw_fast_path( void ) } -void GeoSet::draw_alternate_path( void ) +void GeoSet::draw_alternate_path( State& state ) { if( (_color_binding == BIND_PERVERTEX) && (_colindex.null() || _colindex ==_cindex) && (_flat_shaded_skip == 0) ) { - glEnableClientState( GL_COLOR_ARRAY ); - glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); +// glEnableClientState( GL_COLOR_ARRAY ); +// glColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); + state.setColorPointer( 4, GL_FLOAT, 0, (GLfloat *)_colors ); } else { - glDisableClientState( GL_COLOR_ARRAY ); +// glDisableClientState( GL_COLOR_ARRAY ); + state.disableColorPointer(); if( _color_binding == BIND_OVERALL ) { if( _colindex.valid() ) @@ -248,12 +283,14 @@ void GeoSet::draw_alternate_path( void ) if( (_normal_binding == BIND_PERVERTEX) && (_nindex.null() || _nindex ==_cindex) && (_flat_shaded_skip == 0) ) { - glEnableClientState( GL_NORMAL_ARRAY ); - glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); +// glEnableClientState( GL_NORMAL_ARRAY ); +// glNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); + state.setNormalPointer( GL_FLOAT, 0, (GLfloat *)_normals ); } else { - glDisableClientState( GL_NORMAL_ARRAY ); + state.disableNormalPointer(); +// glDisableClientState( GL_NORMAL_ARRAY ); if( _normal_binding == BIND_OVERALL ) { if( _nindex.valid() ) @@ -265,14 +302,17 @@ void GeoSet::draw_alternate_path( void ) if( (_texture_binding == BIND_PERVERTEX) && (_tindex.null()) ) { - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glTexCoordPointer( 2, GL_FLOAT, 0, _tcoords ); +// glEnableClientState( GL_TEXTURE_COORD_ARRAY ); +// glTexCoordPointer( 2, GL_FLOAT, 0, _tcoords ); + state.setTexCoordPointer( 0, 2, GL_FLOAT, 0, _tcoords ); } else - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); + state.disableTexCoordPointer(0); +// glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); +// glEnableClientState( GL_VERTEX_ARRAY ); +// glVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); + state.setVertexPointer( 3, GL_FLOAT, 0, (GLfloat *)_coords ); if( _needprimlen ) // LINE_STRIP, LINE_LOOP, TRIANGLE_STRIP, // TRIANGLE_FAN, QUAD_STRIP, POLYGONS diff --git a/src/osgPlugins/osg/BlendFunc.cpp b/src/osgPlugins/osg/BlendFunc.cpp index 944e655ad..5478ed847 100644 --- a/src/osgPlugins/osg/BlendFunc.cpp +++ b/src/osgPlugins/osg/BlendFunc.cpp @@ -27,7 +27,7 @@ RegisterDotOsgWrapperProxy g_BlendFuncProxy RegisterDotOsgWrapperProxy g_TransparencyProxy ( osgNew osg::BlendFunc, - "Transparancy", + "Transparency", "Object StateAttribute Transparency", &BlendFunc_readLocalData, &BlendFunc_writeLocalData