gpt4 book ai didi

opengl - 是否不再需要双缓冲

转载 作者:行者123 更新时间:2023-12-03 21:40:49 24 4
gpt4 key购买 nike

由于今天的卡片似乎保留了渲染命令列表,并且仅在调用 glFlush 时才刷新。或 glFinish ,真的不再需要双缓冲了吗?我正在使用 SDL/OpenGL 在 Linux(ATI Mobility radeon 卡)上开发的 OpenGL 游戏实际上在 SDL_GL_swapbuffers() 时闪烁较少被 glFinish() 取代并与 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,0)在初始化代码中。这是我的卡的特殊情况还是所有卡上都可能出现这种情况?

编辑:我发现造成这种情况的原因是 KWin。似乎正如 datenwolf 所说,没有同步的合成是原因。当我关闭 KWin 合成时,游戏运行良好,没有任何源代码补丁

最佳答案

双缓冲和 glFinish是两个非常不同的东西。
glFinish阻塞程序,直到所有绘图操作完成。

双缓冲用于对用户隐藏渲染过程。如果没有双缓冲,假设显示刷新频率无限高,每个单独的绘图操作都会立即变得可见。在实践中,您会得到一些显示伪像,例如场景的一部分在一种状态下可见,其余部分不可见或在其他状态下,图片可能不完整等。双缓冲通过首先渲染到后台缓冲区来避免这种情况,并且只有在渲染完成后,才将它与前端缓冲区交换回来,它才会被发送到显示设备。

现在,合成窗口管理变得普遍:Windows 有 Aero、MacOS X Quartz Extreme,在 Linux 上至少有 Unity 和 GNOME3 shell 使用合成(如果可用)。重点是:合成技术上创建了双缓冲:Windows 绘制到屏幕外缓冲区,其中最终屏幕被合成。因此,如果您在具有合成功能的机器上运行,那么如果在您的程序中执行双缓冲是有点多余的,而它所需要的只是某种同步机制,在下一帧准备就绪时告诉合成器。 MacOS X 有这个。 X11 仍然缺乏适当的同步方案,请参阅邮件列表上的这篇文章:http://lists.freedesktop.org/archives/xorg/2004-May/000607.html

TL;DR:双缓冲和 glFinish是不同的东西,您需要双缓冲(某种形式)才能使事情看起来不错。

关于opengl - 是否不再需要双缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543924/

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