瀏覽代碼

we need make_current() in the flip after all

David Rose 22 年之前
父節點
當前提交
f709ae9232
共有 1 個文件被更改,包括 15 次插入6 次删除
  1. 15 6
      panda/src/wgldisplay/wglGraphicsWindow.cxx

+ 15 - 6
panda/src/wgldisplay/wglGraphicsWindow.cxx

@@ -160,13 +160,16 @@ make_current() {
 
   wglGraphicsStateGuardian *wglgsg;
   DCAST_INTO_V(wglgsg, _gsg);
-  wglMakeCurrent(_hdc, wglgsg->get_context(_hdc));
+  HGLRC context = wglgsg->get_context(_hdc);
+  if (context) {
+    wglMakeCurrent(_hdc, context);
 
-  // Now that we have made the context current to a window, we can
-  // reset the GSG state if this is the first time it has been used.
-  // (We can't just call reset() when we construct the GSG, because
-  // reset() requires having a current context.)
-  wglgsg->reset_if_new();
+    // Now that we have made the context current to a window, we can
+    // reset the GSG state if this is the first time it has been used.
+    // (We can't just call reset() when we construct the GSG, because
+    // reset() requires having a current context.)
+    wglgsg->reset_if_new();
+  }
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -201,6 +204,12 @@ release_gsg() {
 void wglGraphicsWindow::
 begin_flip() {
   if (_hdc) {
+    // It turns out that if we don't call make_current() before
+    // calling SwapBuffers() on a Matrix card, we crash a horrible
+    // death.  This is a pity since make_current() seems unnecessary
+    // on other cards, and does incur some performance overhead.
+    make_current();
+
     SwapBuffers(_hdc);
   }
 }