我在 OpenGL 中读到了一些关于 PBO 的内容,我收到了一个关于竞态条件的问题。
让我们看下面的例子:我有两个 PBO,我想将它们的像素数据轮流传输到一个纹理对象。因此,当我为一个 PBO 启动异步像素传输时,我可以立即使用 CPU 执行其他操作,同时在后台传输像素数据。现在我对第二个 PBO 进行一些像素操作,完成后我想将像素从第二个 PBO 转移到纹理对象。但是,如果第一个 PBO 的转让还没有完成怎么办?就像在第一个示例中一样:http: //www.songho.ca/opengl/gl_pbo.html
index = (index + 1) % 2;
nextIndex = (index + 1) % 2;
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[index]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, 0);
glTextSubImage2D() 将立即返回,当第一个 PBO 的数据传输到 GPU 时,我可以开始处理第二个 PBO。如果在第一次传输完成之前到达 glTexSubImage()(现在应该传输第二个 PBO 的像素数据)怎么办?它会导致 CPU 停顿周期吗?