/* Render the leaf with buffer objects. */ void VertexBufferLeaf::renderBufferObject( VertexBufferState& state ) const { GLuint buffers[4]; for( int i = 0; i < 4; ++i ) buffers[i] = state.getBufferObject( reinterpret_cast< const char* >(this) + i ); if( buffers[VERTEX_OBJECT] == state.INVALID || buffers[NORMAL_OBJECT] == state.INVALID || buffers[COLOR_OBJECT] == state.INVALID || buffers[INDEX_OBJECT] == state.INVALID ) setupRendering( state, buffers ); if( state.useColors() ) { glBindBuffer( GL_ARRAY_BUFFER, buffers[COLOR_OBJECT] ); glColorPointer( 4, GL_UNSIGNED_BYTE, 0, 0 ); } glBindBuffer( GL_ARRAY_BUFFER, buffers[NORMAL_OBJECT] ); glNormalPointer( GL_FLOAT, 0, 0 ); glBindBuffer( GL_ARRAY_BUFFER, buffers[VERTEX_OBJECT] ); glVertexPointer( 3, GL_FLOAT, 0, 0 ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, buffers[INDEX_OBJECT] ); glDrawElements( GL_TRIANGLES, GLsizei( _indexLength ), GL_UNSIGNED_SHORT, 0 ); }
/* Render the leaf with a display list. */ inline void VertexBufferLeaf::renderDisplayList( VertexBufferState& state ) const { char* key = (char*)( this ); if( state.useColors( )) ++key; GLuint displayList = state.getDisplayList( key ); if( displayList == state.INVALID ) setupRendering( state, &displayList ); glCallList( displayList ); }
// Start the application void ClientMain::start() { setupComponents(); setupRendering(); initComponents(); }