gpt4 book ai didi

multithreading - 当在 RenderThread 上调用 SwapBuffers 时,Windows 上的 OpenGL 使用大量 CPU

转载 作者:行者123 更新时间:2023-12-04 06:40:54 27 4
gpt4 key购买 nike

好的,所以我在 Windows 上遇到了一些与 OpenGL 相关的线程问题。我正在使用 C# .NET 来包装 GL。我在 Windows7 x64 上。

所以我尝试了两种不同的测试。在每次测试中,我都在渲染一个无纹理的四边形(又名两个三角形)。据我所知,CPU 命中似乎与 SwapBuffers 有关。

单线程测试(这很好用)::

{
Draw stuff;
SwapBuffers;
Sleep(15);
}

RenderingThread 测试(这会吃掉我所有的 CPU)::
{
Draw stuff;
SwapBuffers;
//glFinish(); //<< If used this seems to make the CPU usage normal
Sleep(15);
}

我知道这个例子很简单,但真正的问题是,为什么在 Windows GUI 线程运行的线程之外的不同线程上调用 SwapBuffers 时,OpenGL 会占用我所有的 CPU?为什么 glFinish() 似乎可以解决这个问题?每个人都说不要使用 glFinish,所以我不确定我做错了什么,或者 OpenGL 是否在 Windows 上很糟糕......?

我在 OSX 上运行相同的测试,CPU 似乎正常。我在 Windows 上用 D3D9 和 D3D10 运行相同的测试,CPU 似乎正常。由于我的 L-box 已关闭,还没有在 Linux 上进行测试。

最佳答案

这个问题可以简单地通过执行以下操作来解决:

glFlush();
glFinish();

打电话之前::
wglSwapBuffers(dc); // Windows
glxSwapBuffers(dc, handle); // Linux
cglFlushDrawable(ctx); // OS X

尽管驱动程序与 Windows 上的 OpenGL 有很大不同,但 Windows 与 Direct3D 的性能仍然要好得多。

关于multithreading - 当在 RenderThread 上调用 SwapBuffers 时,Windows 上的 OpenGL 使用大量 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999555/

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