首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PBO的竞争条件

PBO的竞争条件
EN

Stack Overflow用户
提问于 2013-03-04 05:35:16
回答 1查看 196关注 0票数 0

我在OpenGL上读到了一些关于PBO的东西,我有一个关于竞争条件的问题。

让我们以下面的例子为例:我有两个PBO,我想依次将它们的像素数据传输到一个纹理对象。因此,当我开始一个PBO的异步像素传输时,我可以立即用CPU做一些其他的事情,同时像素数据在后台传输。现在我在第二个PBO上做了一些像素操作,当它完成后,我想把像素从第二个PBO转移到纹理对象上。但是,如果第一个PBO的传输还没有完成呢?它类似于第一个示例:http://www.songho.ca/opengl/gl_pbo.html

代码语言:javascript
复制
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的数据传输到图形处理器。如果在第一次传输完成之前到达glTexSubImage() (现在应该传输第二个PBO的像素数据),该怎么办?它会导致CPU停滞周期吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 06:08:08

OpenGL将引入同步点,并确保进一步的异步操作不会影响以前的调用利用修改后的OpenGL对象安排的任何操作。

如果在第一次传输完成之前到达glTexSubImage() (现在应该传输第二个PBO的像素数据),该怎么办?

没什么出乎意料的。在调用glTexSubImage之后调度的所有调用都将使用修改后的数据。在此之前调度的所有呼叫都使用未修改的数据。OpenGL规范要求这样做。

是否会导致CPU停顿周期?

它可能会,也可能不会。OpenGL没有指定这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15191192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档