2011-01-13 100 views
3

我有一個抽獎程序完全工作如下:調用glDrawArrays問題

glEnable(GL_TEXTURE_2D); 
glMatrixMode(GL_MODELVIEW); 
{ 
    glBindTexture(GL_TEXTURE_2D, [texture name]); 
    GLsizei stride = sizeof(quads[0].tl); 

    glBindBuffer(GL_ARRAY_BUFFER, buffers[0]); 

    glBufferData(GL_ARRAY_BUFFER, sizeof(TQuad2D), quads, GL_STATIC_DRAW); 
    glVertexPointer(2, GL_FLOAT, stride, (void *)offsetof(TVertex2D, pos)); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glTexCoordPointer(2, GL_FLOAT, stride, (void *)offsetof(TVertex2D, tex)); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 


    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
} 

glBindTexture(GL_TEXTURE_2D, 0); 
glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisable(GL_TEXTURE_2D); 

而且之前或之後上面,我想畫一個簡單的線條,如下面的一個。這本身工作正常,但如果我將它與上面的例程結合起來,它會給我一個506錯誤,它是GL_INVALID_FRAMEBUFFER_OPERATION

GLfloat verts[4]; 
verts[0] = 0; 
verts[1] = 0; 
verts[2] = 600; 
verts[3] = 600; 

glColor4f(0.0f,1.0f,0.0f,1.0f); 
glVertexPointer(2, GL_FLOAT, 0, &verts); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_LINES, 0, 2); 
glDisableClientState(GL_VERTEX_ARRAY); 
GLErrCheck(@"err"); 

我可能忘記重置GL狀態,但我無法弄清楚。

回答

2

你對忘記重置狀態的假設是正確的。只要緩衝區綁定到GL_ARRAY_BUFFER,glVertexPointer和類似函數的最後一個參數將被解釋爲此緩衝區中的偏移量,而不是像&verts這樣的常規指針。您可以通過致電

glBindBuffer(GL_ARRAY_BUFFER, 0) 

重置您的第一個代碼段。

+0

感謝您的解釋。這正是發生的事情! – Morrowless 2011-01-15 04:05:53