OpenGL:单独线程上的glClientWaitSync

matthias_buehlmann

我将GL_MAP_UNSYNCHRONIZED_BIT与glMapBufferRange一起使用以映射缓冲区对象。然后,我将返回的指针传递给工作线程以异步计算新顶点。该对象被加倍缓冲,因此我可以在写入另一个对象时渲染一个对象。使用GL_MAP_UNSYNCHRONIZED_BIT可为我带来显着更好的性能(主要是因为glUnmapBuffer更快返回),但我得到了一些视觉效果(尽管有双重缓冲)-因此,我假设GPU在DMA上传仍在进行时开始渲染,或者工作线程太早开始写入顶点。如果我正确理解glFenceSync,glWaitSync和glClientWaitSync,则应该以以下方式解决这些问题:

答:避免在DMA处理完成之前让GPU渲染缓冲区对象:在glUnmapBufferRange之后,直接在主线程上调用

GLsync uploadSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
glFlush();
glWaitSync(uploadSync, 0, GL_TIMEOUT_IGNORED);

B:避免在GPU完成渲染之前从工作线程中写入缓冲区:在glDrawElements之后出现混淆,请在主线程上调用

GLsync renderSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);

在工作线程上,就在开始将数据写入到以前从glMapBufferRange返回的指针之前

glClientWaitSync(renderSync,0,100000000);
...start writing to the mapped pointer

1:我的显式同步方法正确吗?

2:如何处理第二种情况?我想在工作线程中等待(我不想使我的主线程停滞),但是我无法从工作线程发出glCommands。除了gl调用以外,还有另一种方法来检查是否已发出GLsync信号吗?

扬·吕格

您可以做的是在辅助线程中创建一个OpenGL上下文,然后与主线程共享它。下一个:

在主线程上运行:

GLsync renderSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
glFlush();

然后

在工作线程上运行:

glClientWaitSync(renderSync,0,100000000);

glFlush主线程上是很重要的,否则你可以有无限的等待。另请参阅OpenGL文档

4.1.2信令

脚注3:由SYNC_FLUSH_COMMANDS_BIT定义的简单刷新行为在等待另一个上下文的命令流中发出的fence命令完成时无济于事。在围篱同步对象上阻塞的应用程序必须采取其他步骤,以确保发出相应围篱命令的上下文已将该命令刷新到图形管道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单独输入线程上的 OpenGL 无效操作错误

来自分类Dev

单独线程上的javascript回调函数

来自分类Dev

如何在单独的线程上设置QSerialPort?

来自分类Dev

网络操作和单独线程上的解析

来自分类Dev

WPF在单独线程上运行的功能

来自分类Dev

在Action内的单独线程上运行方法

来自分类Dev

使用Qt 4.8在单独的线程中进行OpenGL屏幕外

来自分类Dev

使用Qt 4.8在单独的线程中进行OpenGL屏幕外

来自分类Dev

是从单独的线程调用方法,还是在调用线程上运行?

来自分类Dev

在Android,主线程或单独线程上使用Accelerometer的最佳实践?

来自分类Dev

iOS 上的 OpenGL ES 渲染线程

来自分类Dev

OpenGL - 在 ubuntu 的线程上创建 vbo?

来自分类Dev

Unity-在单独的线程上运行寻路算法

来自分类Dev

在目标C中的单独线程上延迟方法

来自分类Dev

Windows在单独的线程上重叠了IO与IO

来自分类Dev

在单独的线程上使用rows.insert的奇怪行为

来自分类Dev

如何检索在单独线程上运行的函数的移动指针?

来自分类Dev

当服务在单独的线程上运行时,如何显示吐司?

来自分类Dev

每个线程在单独的处理器上-有可能吗?

来自分类Dev

ContentResolver.applyBatch是否在单独的线程上运行

来自分类Dev

在 android 中是否可以在单独的线程上保持 BLE 扫描,以便 UI 线程不受影响?

来自分类Dev

运行从主线程使用方法的单独线程是否仍会在主线程上运行它?(C#)

来自分类Dev

运行从主线程使用方法的单独线程是否仍会在主线程上运行它?(C#)

来自分类Dev

从单独的线程开始活动?

来自分类Dev

从单独的线程调用requestLayout

来自分类Dev

当我运行多个与CPU内核/线程数量匹配的线程时,每个线程都将在单独的内核/线程上运行吗?

来自分类Dev

当我运行多个与CPU内核/线程数量匹配的线程时,每个线程都将在单独的内核/线程上运行吗?

来自分类Dev

.NET中在单独(单个)线程上管理任务队列的最佳方法

来自分类Dev

如何在Node.js中的单独线程上执行DOS命令?

Related 相关文章

  1. 1

    单独输入线程上的 OpenGL 无效操作错误

  2. 2

    单独线程上的javascript回调函数

  3. 3

    如何在单独的线程上设置QSerialPort?

  4. 4

    网络操作和单独线程上的解析

  5. 5

    WPF在单独线程上运行的功能

  6. 6

    在Action内的单独线程上运行方法

  7. 7

    使用Qt 4.8在单独的线程中进行OpenGL屏幕外

  8. 8

    使用Qt 4.8在单独的线程中进行OpenGL屏幕外

  9. 9

    是从单独的线程调用方法,还是在调用线程上运行?

  10. 10

    在Android,主线程或单独线程上使用Accelerometer的最佳实践?

  11. 11

    iOS 上的 OpenGL ES 渲染线程

  12. 12

    OpenGL - 在 ubuntu 的线程上创建 vbo?

  13. 13

    Unity-在单独的线程上运行寻路算法

  14. 14

    在目标C中的单独线程上延迟方法

  15. 15

    Windows在单独的线程上重叠了IO与IO

  16. 16

    在单独的线程上使用rows.insert的奇怪行为

  17. 17

    如何检索在单独线程上运行的函数的移动指针?

  18. 18

    当服务在单独的线程上运行时,如何显示吐司?

  19. 19

    每个线程在单独的处理器上-有可能吗?

  20. 20

    ContentResolver.applyBatch是否在单独的线程上运行

  21. 21

    在 android 中是否可以在单独的线程上保持 BLE 扫描,以便 UI 线程不受影响?

  22. 22

    运行从主线程使用方法的单独线程是否仍会在主线程上运行它?(C#)

  23. 23

    运行从主线程使用方法的单独线程是否仍会在主线程上运行它?(C#)

  24. 24

    从单独的线程开始活动?

  25. 25

    从单独的线程调用requestLayout

  26. 26

    当我运行多个与CPU内核/线程数量匹配的线程时,每个线程都将在单独的内核/线程上运行吗?

  27. 27

    当我运行多个与CPU内核/线程数量匹配的线程时,每个线程都将在单独的内核/线程上运行吗?

  28. 28

    .NET中在单独(单个)线程上管理任务队列的最佳方法

  29. 29

    如何在Node.js中的单独线程上执行DOS命令?

热门标签

归档