zez*_*000 6 opengl cpu multithreading buffer swap
好的,所以我在Windows上遇到了一些OpenGL的线程问题.我正在使用C#.NET来封装GL.我在Windows7 x64上.
所以我尝试了两种不同的测试.在每个测试中,我渲染一个无纹理的四边形(又称两个三角形).从我能说的话来看,CPU命中似乎与SwapBuffers有关.
单线程测试(这很好)::
{
Draw stuff;
SwapBuffers;
Sleep(15);
}
Run Code Online (Sandbox Code Playgroud)
RenderingThread测试(这吃了我所有的CPU)::
{
Draw stuff;
SwapBuffers;
//glFinish(); //<< If used this seems to make the CPU usage normal
Sleep(15);
}
Run Code Online (Sandbox Code Playgroud)
我知道这个例子很简单,但真正的问题是为什么OpenGL会在一个不同的线程上调用SwapBuffers时吸取我所有的CPU,而不是Windows GUI线程运行的线程?为什么glFinish()似乎解决了这个问题?每个人都说不要使用glFinish,所以我不确定我做错了什么,或者OpenGL只是在Windows上糟透了......?
我在OSX上运行相同的测试,CPU似乎正常.我在Windows上使用D3D9和D3D10运行相同的测试,CPU似乎正常.我没有在Linux上进行测试,因为我的L-box已关闭.
这个问题可以简单地通过执行以下操作来解决:
glFlush();
glFinish();
Run Code Online (Sandbox Code Playgroud)
致电之前::
wglSwapBuffers(dc); // Windows
glxSwapBuffers(dc, handle); // Linux
cglFlushDrawable(ctx); // OS X
Run Code Online (Sandbox Code Playgroud)
尽管驱动程序在 Windows 上对 OpenGL 有很大影响,但 Windows 在使用 Direct3D 时仍然表现得更好。
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |