要在OpenGL中创建缓冲区,我们需要写下以下代码:
GLuint buffer;
glCreateBuffers(1,&buffer);
glNamedBufferStorage(buffer,size,data,flags);
我知道我们可以通过以下方式创建PBO:
GLuint pbo;
glCreateBuffers(1,&pbo);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER,&pbo);
glBufferData(...);//initializing buffer
我的问题是,我能以第一种方式创建pbo吗?
1条答案
按热度按时间qrjkbowd1#
根本就没有“PBO”这种东西;至少,不是你所认为的那样。2只有缓冲对象,作为像素传输的源/目的地只是它们的一种用法。3缓冲对象与它的任何特定用法都没有直接的联系。
你可以用一个缓冲对象来传输像素,然后用同一个缓冲对象来传输顶点数据,再用同一个缓冲对象来传输其他数据。或者你可以用一个缓冲对象的不同部分来做不同的事情。OpenGL并不在乎。任何缓冲对象都可以在任何时候做任何事情(在某些合理的限制下)。
使用DSA API创建的缓冲区可以像任何其他缓冲区对象一样用于像素传输。