OpenGL context is not made current on Win32 until fgSetWindow is called.
[freeglut] / src / freeglut_window.c
index 07422f7..c92fbcb 100644 (file)
@@ -162,7 +162,9 @@ GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,
     if( fgState.DisplayMode & GLUT_DOUBLE )
         flags |= PFD_DOUBLEBUFFER;
 
+#if defined(_MSC_VER)
 #pragma message( "fgSetupPixelFormat(): there is still some work to do here!" )
+#endif
 
     /*
      * Specify which pixel format do we opt for...
@@ -528,6 +530,8 @@ void fgOpenWindow( SFG_Window* window, const char* title,
 
 #endif
 
+    fgSetWindow( window );
+
     window->Window.DoubleBuffered =
         ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0;
 
@@ -536,7 +540,6 @@ void fgOpenWindow( SFG_Window* window, const char* title,
         glDrawBuffer ( GL_FRONT );
         glReadBuffer ( GL_FRONT );
     }
-    fgSetWindow( window );
 }
 
 /*
@@ -943,13 +946,39 @@ void FGAPIENTRY glutFullScreen( void )
         }
     }
 #elif TARGET_HOST_WIN32
-    MoveWindow(
-        fgStructure.Window->Window.Handle,
-        0, 0,
-        fgDisplay.ScreenWidth,
-        fgDisplay.ScreenHeight,
-        TRUE
-    );
+    {
+        RECT rect;
+
+        /* For fullscreen mode, force the top-left corner to 0,0
+         * and adjust the window rectangle so that the client area
+         * covers the whole screen.
+         */
+
+        rect.left   = 0;
+        rect.top    = 0;
+        rect.right  = fgDisplay.ScreenWidth;
+        rect.bottom = fgDisplay.ScreenHeight;
+
+        AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS |
+                                  WS_CLIPCHILDREN, FALSE );
+
+        /*
+         * SWP_NOACTIVATE     Do not activate the window
+         * SWP_NOOWNERZORDER  Do not change position in z-order
+         * SWP_NOSENDCHANGING Supress WM_WINDOWPOSCHANGING message
+         * SWP_NOZORDER       Retains the current Z order (ignore 2nd param)
+         */
+
+        SetWindowPos( fgStructure.Window->Window.Handle,
+                      HWND_TOP,
+                      rect.left,
+                      rect.top,
+                      rect.right  - rect.left,
+                      rect.bottom - rect.top,
+                      SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
+                      SWP_NOZORDER
+                    );
+    }
 #endif
 }