2011-01-13 17 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

関連する問題