我有一个多线程应用程序,我试图在其中使用不同的线程进行渲染。首先,我尝试在所有线程之间使用相同的渲染上下文,但我为其他线程获取了 NULL 当前上下文。我在互联网上读到,一个上下文一次只能在一个线程中存在。
所以我决定做一些不同的事情。我创建一个窗口,从中获取 HDC 并创建第一个 RC。之后,我在线程之间共享此 HDC,并且在我创建的每个新线程中,我从同一个 HDC 获取一个新的 RC,并将其设为该线程的当前值。每次我这样做,返回的RC总是不同的(通常是之前的值+1)。我做出断言来检查是否wglGetCurrentContext()
返回一个 RC,看起来它返回的是刚刚创建的 RC。但是在进行渲染后,我没有得到任何渲染,如果我打电话GetLastError()
我收到错误 6(无效句柄??)
那么,这是否意味着,尽管每一次新的呼吁wglCreateContext()
给了我一个新值,这意味着所有这些不同的值对于 OpenGL 调用来说都是相同的“连接通道”?
这是否意味着我始终必须使线程上的前一个渲染上下文无效,并在新线程上激活它?我真的必须一直进行同步,还是有其他方法可以解决这个问题?
我有一个多线程应用程序,我试图在其中使用不同的线程进行渲染。
DON'T!!!
你将会收获nothing尝试对渲染器进行多线程处理。基本上,您遇到了一个大型竞争条件,驱动程序将忙于同步线程以某种方式理解它。
为了获得最佳渲染性能,请将所有 OpenGL 操作保留在一个线程中。所有并行化都在 GPU 上免费进行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)