2009-08-02 39 views
6

của OpenGL Tôi vừa cố gắng hiển thị ví dụ sổ đỏ đầu tiên (Quad trắng) bằng cách sử dụng VBO.
Nó hoạt động tốt với chế độ ngay lập tức và mảng đỉnh.Sự cố khi sử dụng VBO

Nhưng khi sử dụng VBO, màn hình vẫn đen. Tôi nghĩ rằng tôi đã phải bỏ lỡ một cái gì đó quan trọng.

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); 

renderloop cho VBO (không hoạt động):

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 cho mảng đỉnh (làm việc):

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); 

Trả lời

5

argh tôi chỉ figured it out bởi cố đọc lại nội dung của bộ đệm:

tôi cần phải cấp phát bộ đệm với 12 * sizeof (GLfloat) thay vì chỉ 12

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

tôi đọc lại đang

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 ]; 
} 
+0

+1 Awesome! Tôi đã có chính xác cùng một vấn đề, cảm ơn bạn rất nhiều! –

Các vấn đề liên quan