Ger*_*eri 3 multithreading textures opengl-es ios
我想在纹理上传到OpenGL后渲染,但我无法得到有关completition的通知.
我确实想避免使用动画或任何类型的重复渲染.
glTexImage2D是否异步?据我所知,几乎每个OpenGL调用都是异步的.
无论如何,如果我也可以获知glDrawArrays completition,那将会很棒.
答案是,在调用glTexImage2D返回后继续.从您的角度来看,它是一个同步调用,因为一切都在返回后正确设置.您可以通过将PBO用作中间存储来使纹理上传异步,但即使这样,所有内容都由驱动程序为您管理,您需要知道的是,glTexImage2D返回时您可以假设纹理数据正确上载并开始渲染.如果纹理数据尚未在内部上传,则无论如何都不会呈现内容并等待纹理设置.
你是正确的,大多数OpenGL调用可以看作是异步的,因为它们只安排命令发送到显卡,驱动程序决定何时最终将它们发送到硬件,硬件可以自由决定何时处理它们,更不用说没人知道他们什么时候真的完成了.但你知道吗,你通常只是不在乎.如果有什么需要阻止以等待一些先前的操作完成(如异步纹理上传),那么它将自动为您管理,一旦OpenGL函数返回,您可以确定它已完成其工作从您的角度来看视图.
免责声明:确实有些情况下您确实需要知道实际操作何时最终完成其在设备上的工作.虽然您的方案不是其中之一.当您为调试或分析原因计时时,您可能真正想要同步操作的少数几种情况之一.而且由于OpenGL ES可能缺少ARB_timer_query,因此在这种情况下发布glFinish(如BlueVoodoo的答案中的建议)可能是一个选项.
编辑:同样地,当您绘制glDrawArrays的内容最终呈现为屏幕时,您不会收到通知,但您只是不关心它.
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |