c – 防止OpenGL缓冲帧
发布时间:2021-01-12 07:42:44 所属栏目:Linux 来源:网络整理
导读:我正在编写一个程序,需要极低延迟的纹理到屏幕流(10ms以下),我已经使用GL_ARB_buffer_storage实现了这个,它非常适合流式传输,而vsync则可以防止撕裂. 但是我发现NVidia管道在阻塞之前调用交换缓冲区时会缓冲2到8帧,我需要防止这种情况. 我所做的是以下内容:
我正在编写一个程序,需要极低延迟的纹理到屏幕流(10ms以下),我已经使用GL_ARB_buffer_storage实现了这个,它非常适合流式传输,而vsync则可以防止撕裂. 但是我发现NVidia管道在阻塞之前调用交换缓冲区时会缓冲2到8帧,我需要防止这种情况. 我所做的是以下内容:
然后在绘制线程中我执行以下操作:
该解决方案在NVidia硬件上运行良好,但据报道不能在AMD GPU上计算正确的当前时间. 有一个更好的方法吗?我知道glFinish通常不应该在应用程序中使用,除了分析,但我找不到另一种方法来确保GPU管道不缓冲帧. 编辑:对于那些感兴趣的人,这有效地模拟了Linux下的FastSync,但没有禁用vsync. Edit2:也许现在的时间函数应该有点不同:
最佳答案
我找到了答案,有一个鲜为人知的名为SGI_video_sync的OpenGL扩展,使用它可以等待下一帧.
即:
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |