【发布时间】:2012-06-21 06:26:15
【问题描述】:
我有一个多线程应用程序,我正在尝试使用不同的线程进行渲染。首先,我尝试在所有线程之间使用相同的渲染上下文,但我得到了其他线程的 NULL 当前上下文。我在互联网上读到,一个上下文一次只能在一个线程中处于当前状态。
所以我决定做一些不同的事情。我创建一个窗口,从中获取 HDC 并创建第一个 RC。之后,我在线程之间共享这个 HDC,并且在我创建的每个新线程中,我都从同一个 HDC 获得一个新的 RC,并使其成为该线程的最新版本。每次我这样做时,返回的 RC 总是不同的(通常是前一个值 + 1)。我做了一个断言来检查wglGetCurrentContext() 是否返回一个RC,看起来它返回了刚刚创建的那个。但是在进行渲染后,我没有得到任何渲染,如果我调用GetLastError(),我会得到错误 6(无效句柄??)
那么,这是否意味着,尽管wglCreateContext() 的每次新调用都会给我一个新值,但不知何故,这是否意味着所有这些不同的值对于 OpenGL 调用来说都是相同的“连接通道”?
这是否意味着我必须始终使线程上的先前渲染上下文无效,并在新线程上激活它?我真的必须一直进行这种同步,还是有其他方法可以解决这个问题?
【问题讨论】:
-
谷歌搜索了 2 个可能有帮助的页面:higherorderfun.com/blog/2011/05/26/… 和 opengl.org/discussion_boards/showthread.php/…
-
好吧,我正在做一些与此非常相似的事情,但在 wglShareLists 调用后我收到错误 6
-
我认为这个问题也应该读作“由于多线程 DirectX 11 渲染比单线程更快,驱动程序是否也可以从 OpenGL 调用中带来相同的改进?”
标签: c++ windows multithreading opengl rendering