gpt4 book ai didi

java - openGL 中的帧速率和绘制流程

转载 作者:行者123 更新时间:2023-11-30 01:50:15 29 4
gpt4 key购买 nike

我似乎无法理解帧绘制如何与缓冲区交换同步。

问题如下:

1.由于大多数打开的 GL 调用都是非阻塞(或缓冲)的,您如何知道 gpu 是否已完成当前帧?

2.open GL 是否处理它以便未完成的帧不会交换到窗口缓冲区

3.如何计算帧率?我的意思是确定绘制的帧数或每帧花费的时间的依据是什么?

最佳答案

与 GL 同步的现代方法是使用 sync objects .使用 glFinish()(或其他阻塞式 GL 调用)的缺点是会同时拖延 GPU 和 CPU(线程):CPU 将等待 GPU 完成,然后 GPU 会拖延,因为有没有新工作排队。如果同步对象使用得当,两者都可以完全避免。

您只需在您感兴趣的任何时间点将 fence sync 插入到 GL 命令流中,稍后可以检查是否完成之前的所有命令,或者您可以等待完成(同时你仍然可以有更多的命令排队。

请注意,对于帧速率估计,您不需要任何明确的同步方法。只需使用 SwapBuffers() 就足够了。 gpu 可能会提前排队几帧(nvidia 驱动程序甚至为此设置),但这不会干扰 fps 计数,因为只有前 n 帧排队。只需计算每秒发出的 SwapBuffer() 调用次数,就可以了。如果用户开启了sync to vblank,帧率会限制在显示器的刷新率,不会出现撕裂现象。

如果您需要更详细的 GPU 计时统计信息(但对于帧速率计数器,您不需要),您应该查看 timer queries .

关于java - openGL 中的帧速率和绘制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647285/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com