Здравствуйте, Phoenics, Вы писали:
P>Возможно ты не правильно используешь VBO, например пересоздаёшь его каждый кадр, или многократно отправляешь туда данные... Как говрится код в студию. Где VBO делаешь, где отрисовка происходит...
Эта процедура вызывается каждый кадр
int Terrain::draw() // return FPC
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, meshVBO );
glVertexPointer( 3, GL_FLOAT, 0, (char *)NULL );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, texVBO );
glTexCoordPointer( 2, GL_FLOAT, 0, (char *)NULL );
glDrawArrays( GL_TRIANGLE_STRIP, 0, number_of_vertex);
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );
int ret = (int)(1000.0f/ timer->get_time());
timer->flush();
return ret;
}
Эта единожды при инициализации
void Terrain::buildVBO() {
if( IsExtensionSupported("GL_ARB_vertex_buffer_object")) {
glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB");
glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB");
glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB");
glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wglGetProcAddress("glDeleteBuffersARB");
}else {
MessageBox( NULL, "VBO doesn't supported!", "ERROR", MB_OK | MB_ICONERROR );
PostQuitMessage( 0 );
}
glGenBuffersARB( 1, &meshVBO );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, meshVBO );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, number_of_vertex * 3 * sizeof(float), matrix, GL_STATIC_DRAW_ARB );
glGenBuffersARB( 1, &texVBO );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, texVBO );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, number_of_vertex * 2 * sizeof(float), textures, GL_STATIC_DRAW_ARB );
free( matrix ); matrix = NULL;
free( textures ); textures = NULL;
}