好的,所以我在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);
}
我知道这个例子很简单,但真正的问题是为什么OpenGL在不同的线程上调用SwapBuffers时会占用我的所有CPU,而不是Windows GUI线程运行的线程?为什么glFinish()似乎解决了这个问题?每个人都说不要使用glFinish,所以我不确定我做错了什么,或者OpenGL只是在Windows上糟透了......?
我在OSX上运行相同的测试,CPU似乎正常。我用D3D9&amp;运行相同的测试。在Windows上D3D10,CPU似乎正常。没有在Linux上进行测试,因为我的L-box已关闭。
答案 0 :(得分:1)
这个问题可以通过以下方式解决:
glFlush();
glFinish();
在致电::
之前wglSwapBuffers(dc); // Windows
glxSwapBuffers(dc, handle); // Linux
cglFlushDrawable(ctx); // OS X
虽然驱动程序在Windows上与OpenGL有很大不同,但Windows在Direct3D上的表现仍然要好得多。