我正在创建两个不同的顶点缓冲区,它们使用两个不同的着色器来渲染它们。一旦我绑定第二个顶点缓冲区,我停在第一个顶点缓冲区中的数据似乎已损坏或丢失。
如果我只生成并绘制一个顶点缓冲区,如下所示:
glGenBuffers( 1, &vb1 ) ;
glBindBuffer( GL_ARRAY_BUFFER, vb1 ) ;
// fill it..
glBufferData( .. )
然后,在 draw() 循环中,
glUseProgram( shader1 ) ;
glBindBuffer( vb1 ) ; // make sure it is bound
glDrawArrays( ... ) // draw it
然后它工作正常,没有问题,没有错误(每次gl* 调用后我都是 glGettingLastError() ,所以看起来这段代码非常好)
现在,如果我生成并绑定第二个顶点缓冲区,那么在第一个顶点缓冲区生成并绑定之后的任何时间,
// ran in init() -- then previously working code in draw() is broken
glGenBuffers( 1, &vb2 ) ; // ok.. no problems with this line
glBindBuffer( GL_ARRAY_BUFFER, vb2 ) ; // spoils data in vb1?
一旦我glBindBuffer
使用这个新生成vb2
的缓冲区调用,似乎其中的数据vb1
已完全转储或丢失。在尝试绘制vb1
(不是vb2
!)时,我遇到了这个崩溃:
我什至用GL_STATIC_DRAW
.
我不明白,我认为这些顶点缓冲区应该保留数据,即使创建并初始化了另一个顶点缓冲区?.. 我究竟做错了什么?