我有一个多线程应用程序,我正在尝试使用不同的线程进行渲染。首先,我尝试在所有线程之间使用相同的渲染上下文,但我得到了其他线程的 NULL 当前上下文。我在互联网上读到一个上下文一次只能在一个线程上是当前的。
所以我决定做一些不同的事情。我创建一个窗口,从中获取 HDC 并创建第一个 RC。之后,我在线程之间共享这个 HDC,并且在我创建的每个新线程中,我都从同一个 HDC 获得一个新的 RC,并使其成为该线程的最新版本。每次我这样做时,返回的 RC 总是不同的(通常是前一个值 + 1)。我做了一个断言来检查是否wglGetCurrentContext()
返回一个 RC,看起来它返回了刚刚创建的那个。但是在进行渲染之后,我没有得到任何渲染,如果我打电话GetLastError()
我会得到错误 6(无效的句柄??)
那么,这是否意味着,尽管每个新的调用wglCreateContext()
都给了我一个新的值,但不知何故,这意味着所有这些不同的值对于 OpenGL 调用来说都是相同的“连接通道”?
这是否意味着我将始终必须使线程上的先前渲染上下文无效,并在新线程上激活它?我真的必须一直进行这种同步,或者有没有其他方法可以解决这个问题?