我正在创建两个不同的顶点缓冲区,使用两个不同的着色器来渲染它们。一旦我绑定第二个顶点缓冲区,我停放在第一个顶点缓冲区中的数据似乎已损坏或丢失。
如果我只生成并绘制一个顶点缓冲区,如下所示:
glGenBuffers( 1, &vb1 ) ;
glBindBuffer( GL_ARRAY_BUFFER, vb1 ) ;
// fill it..
glBufferData( .. )
然后,在draw()循环中,
glUseProgram( shader1 ) ;
glBindBuffer( vb1 ) ; // make sure it is bound
glDrawArrays( ... ) // draw it
然后它工作正常,没有问题,没有错误(我是 glGettingLastError() 之后everygl* 调用,所以看来这段代码完全没问题)
现在如果我如此生成并绑定第二个顶点缓冲区,在第一个顶点缓冲区生成并绑定后的任何时间,
// 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
(not vb2
!),我遇到了这个崩溃:
我什至用以下内容填充了数组GL_STATIC_DRAW
.
我不明白,我认为这些顶点缓冲区应该保留数据,即使创建并初始化了另一个顶点缓冲区? .. 我究竟做错了什么?