문제

방금 VBO를 사용하여 첫 번째 Redbook 예제 (White Quad)를 렌더링하려고했습니다.
즉각적인 모드 및 정점 배열에서 잘 작동합니다.

그러나 VBO를 사용할 때 화면은 검은 색을 유지합니다. 나는 중요한 것을 놓친 것 같아요.

init :

unsigned int bufIds[2];
glGenBuffers( 2, bufIds );
GLfloat vertices[] = {
  0.25, 0.25, 0.0,
  0.75, 0.25, 0.0,
  0.75, 0.75, 0.0,
  0.25, 0.75, 0.0
};
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glBufferData( GL_ARRAY_BUFFER, 12, vertices, GL_STATIC_DRAW );
glBindBuffer( GL_ARRAY_BUFFER, 0 );

glClearColor( 0, 0, 0, 1 );
glColor3f( 1, 1, 1 );
glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 );

VBO 용 RenderLoop (작동하지 않음) :

glClear( GL_COLOR_BUFFER_BIT );
glEnableClientState( GL_VERTEX_ARRAY );
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glVertexPointer( 3, GL_FLOAT, 0, 0 );
glDrawArrays( GL_QUADS, 0, 12 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glDisableClientState( GL_VERTEX_ARRAY );

정점 배열 용 RenderLoop (작동) :

glClear( GL_COLOR_BUFFER_BIT );
glEnableClientState( GL_VERTEX_ARRAY );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glVertexPointer( 3, GL_FLOAT, 0, vertices );
glDrawArrays( GL_QUADS, 0, 12 );
glDisableClientState( GL_VERTEX_ARRAY );
도움이 되었습니까?

해결책

ARGH 방금 버퍼의 내용을 다시 읽으려고 노력하여 다음을 알아 냈습니다.

12 * sizeof (glfloat)로 버퍼를 할당해야합니다.

glBufferData( GL_ARRAY_BUFFER, 12 * sizeof( GLfloat ), vertices, GL_STATIC_DRAW );

내 읽기 백 코드

GLfloat vertices2[12];
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glGetBufferSubData ( GL_ARRAY_BUFFER, 0, 12 * sizeof( GLfloat ), vertices2 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );

for ( int i = 0; i < 4; i ++ ) {
    LOG_DEBUG << "point " << i << ": " << vertices2[ i * 3 + 0 ] << " / " << vertices2[ i * 3 + 1 ] << " / " << vertices2[ i * 3 + 2 ];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top