static void addPlaneData( const osg::Vec3& corner, const osg::Vec3& u, unsigned short uSteps, const osg::Vec3& v, unsigned short vSteps, const osg::Vec3& normal, osg::Geometry* geom ) { osg::Vec3Array* vert( static_cast< osg::Vec3Array* >( geom->getVertexArray() ) ); osg::Vec3Array* norm( static_cast< osg::Vec3Array* >( geom->getNormalArray() ) ); osg::Vec2Array* texc( static_cast< osg::Vec2Array* >( geom->getTexCoordArray( 0 ) ) ); unsigned short uIdx, vIdx; for( vIdx=0; vIdx<=vSteps; vIdx++ ) { const float vPct( (float)vIdx / (float)vSteps ); const osg::Vec3 vVec( v * vPct ); osg::ref_ptr< osg::DrawElementsUInt > deui; if( vIdx < vSteps ) deui = new osg::DrawElementsUInt( GL_TRIANGLE_STRIP ); unsigned int startIdx( vert->size() ), idx( 0 ); for( uIdx=0; uIdx<=uSteps; uIdx++ ) { const float uPct( (float)uIdx / (float)uSteps ); osg::Vec3 vertex( corner + vVec + (u * uPct) ); vert->push_back( vertex ); norm->push_back( normal ); texc->push_back( osg::Vec2( uPct, vPct ) ); if( deui.valid() ) { deui->push_back( startIdx + idx + uSteps + 1 ); deui->push_back( startIdx + idx ); idx++; } } if( deui.valid() ) geom->addPrimitiveSet( deui.get() ); } }
void gl4es_glMultiTexCoordPointer(GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) { texc(glTexCoordPointer(size, type, stride, pointer)); }