void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) { OpenGLVertexBuffer *glVertexBuffer = (OpenGLVertexBuffer*)buffer; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); if(enableColorBuffer) { glEnableClientState(GL_COLOR_ARRAY); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getColorBufferID()); glColorPointer( 4, GL_FLOAT, 0, (char *) NULL ); } glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getVertexBufferID()); glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getNormalBufferID()); glNormalPointer(GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getTextCoordBufferID()); glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getTangentBufferID()); glEnableVertexAttribArrayARB(6); glVertexAttribPointer(6, 3, GL_FLOAT, 0, 0, (char *)NULL); GLenum mode = GL_TRIANGLES; switch(buffer->meshType) { case Mesh::TRI_MESH: mode = GL_TRIANGLES; break; case Mesh::TRIFAN_MESH: mode = GL_TRIANGLE_FAN; break; case Mesh::QUAD_MESH: mode = GL_QUADS; break; case Mesh::LINE_STRIP_MESH: mode = GL_LINE_STRIP; break; case Mesh::LINE_LOOP_MESH: mode = GL_LINE_LOOP; break; case Mesh::LINE_MESH: mode = GL_LINES; break; case Mesh::POINT_MESH: mode = GL_POINTS; break; } glDrawArrays( mode, 0, buffer->getVertexCount() ); glDisableClientState( GL_VERTEX_ARRAY); glDisableClientState( GL_TEXTURE_COORD_ARRAY ); glDisableClientState( GL_NORMAL_ARRAY ); if(enableColorBuffer) { glDisableClientState( GL_COLOR_ARRAY ); } }
void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer) { OpenGLVertexBuffer *glVertexBuffer = (OpenGLVertexBuffer*)buffer; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); // glEnableClientState(GL_COLOR_ARRAY); // glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getColorBufferID()); // glTexCoordPointer( 4, GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getVertexBufferID()); glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getNormalBufferID()); glNormalPointer(GL_FLOAT, 0, (char *) NULL ); glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getTextCoordBufferID()); glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL ); GLenum mode = GL_TRIANGLES; switch(buffer->meshType) { case Mesh::TRI_MESH: switch(renderMode) { case RENDER_MODE_NORMAL: mode = GL_TRIANGLES; break; case RENDER_MODE_WIREFRAME: mode = GL_LINE_LOOP; break; } break; case Mesh::TRIFAN_MESH: switch(renderMode) { case RENDER_MODE_NORMAL: mode = GL_TRIANGLE_FAN; break; case RENDER_MODE_WIREFRAME: mode = GL_LINE_LOOP; break; } break; case Mesh::QUAD_MESH: switch(renderMode) { case RENDER_MODE_NORMAL: mode = GL_QUADS; break; case RENDER_MODE_WIREFRAME: mode = GL_LINE_LOOP; break; } break; case Mesh::LINE_MESH: mode = GL_LINES; break; case Mesh::POINT_MESH: mode = GL_POINTS; break; } glDrawArrays( mode, 0, buffer->getVertexCount() ); glDisableClientState( GL_VERTEX_ARRAY); glDisableClientState( GL_TEXTURE_COORD_ARRAY ); glDisableClientState( GL_NORMAL_ARRAY ); // glDisableClientState( GL_COLOR_ARRAY ); }