带有PBO的竞态条件
Race Condition with PBO
我读了一些关于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上工作,而第一个PBO的数据被传输到GPU。如果在第一次传输完成之前到达glTexSubImage()(现在应该传输第二个PBO的像素数据)怎么办?它会导致CPU停滞周期吗?
OpenGL将引入一个同步点,并确保进一步的异步操作不会影响使用修改后的OpenGL对象的前调用所安排的任何操作。
如果在第一次传输完成之前到达glTexSubImage()(现在应该传输第二个PBO的像素数据)怎么办?
什么意想不到的。在调用glTexSubImage之后安排的所有调用都将使用修改后的数据。在它之前安排的所有调用都使用未修改的数据。OpenGL规范要求这样做。
会导致CPU停滞周期吗?
可能是,也可能不是。OpenGL没有指定这个
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有太多条件句的情况下,我如何避免被零除
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 基于模板值的条件变量
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 将按位if条件转换为普通if条件
- 条件断点在不应该触发时触发
- 为什么简单的算术减法在"if"条件下不起作用?
- 如何在for循环中包含两个索引值的测试条件
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 我提出什么条件才能再加5%的折扣
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 没有超时的C++条件变量
- 正在LLVM中检测整数比较条件
- 带有PBO的竞态条件