wglMakeCurrent 是否应该只调用一次
每个 GL 上下文最多可以在一个线程中使用,并且在每个时间点都可以绘制。如果只使用一个 Window 和一个 GL Context,那么wglMakeCurrent
在创建了上下文和窗口之后,只调用一次就足够了。
如果您对多个窗口使用一个上下文,则必须在每个框架和窗口中至少重新绑定一次。请注意,切换当前上下文或窗口传统上意味着刷新 GL 管道,但现在可以通过KHR_context_flush_control
扩展来防止这种情况,从而使这种方案更加高效。
如果您使用多个线程但使用单个 GL 上下文,则必须在线程之间推动上下文,方法是使其在某个线程中成为非当前线程,并使其在新线程中再次成为当前线程,依此类推。但该计划几乎永远不需要。Fur 多线程 GL,您应该创建多个共享上下文,然后,您通常需要wglMakeCurrent
每个线程一个。
还是需要在每次缓冲区交换之前调用它?
请注意,该SwapBuffers
函数不是GL 函数(因此gl
名称中也没有前缀),因此,它确实独立于当前活动的 GL 上下文工作 - 该函数采用HDC
您希望发生缓冲区交换的窗口的 。
当前的opengl上下文是否可以通过一些外部事物重置,然后通过设置它wglMakeCurrent
?
不,不是。有可以通过ARB_robustness处理的图形重置情况:
* Provide a mechanism for an OpenGL application to learn about
graphics resets that affect the context. When a graphics reset
occurs, the OpenGL context becomes unusable and the application
must create a new context to continue operation. Detecting a
graphics reset happens through an inexpensive query.
但是这样的 _graphics 重置不会解除当前 GL 上下文的绑定 - 受影响的上下文不再可用。