st/wgl: Don't rely on GDI to bookkeep pixelformat for us.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 22 Mar 2012 12:16:17 +0000 (12:16 +0000)
committerJose Fonseca <jfonseca@vmware.com>
Mon, 9 Nov 2015 11:08:27 +0000 (11:08 +0000)
This allows to use apitrace's retracediff script on Windows to retrace and
compare two builds of a Mesa based opengl32.dll/ICD side-by-side.

See also https://github.com/apitrace/apitrace/commit/e4a4f15f5b92e0abbd24d7d053da25f8278c9f64

src/gallium/state_trackers/wgl/stw_context.c
src/gallium/state_trackers/wgl/stw_framebuffer.c

index 3e99cc44db752e4a1c2c6e05e9ad8efb910536fa..19f06203e91b13304a8ff8b93b106db1a9f87a01 100644 (file)
@@ -160,21 +160,18 @@ stw_create_context_attribs(HDC hdc, INT iLayerPlane, DHGLRC hShareContext,
    if (iLayerPlane != 0)
       return 0;
 
-   iPixelFormat = GetPixelFormat(hdc);
-   if(!iPixelFormat)
-      return 0;
-
    /*
     * GDI only knows about displayable pixel formats, so determine the pixel
     * format from the framebuffer.
     *
-    * TODO: Remove the GetPixelFormat() above, and stop relying on GDI.
+    * This also allows to use a OpenGL DLL / ICD without installing.
     */
    fb = stw_framebuffer_from_hdc( hdc );
    if (fb) {
-      assert(iPixelFormat == fb->iDisplayablePixelFormat);
       iPixelFormat = fb->iPixelFormat;
       stw_framebuffer_release(fb);
+   } else {
+      return 0;
    }
 
    pfi = stw_pixelformat_get_info( iPixelFormat );
index 7b34fcbb5ed832f6b38ea92b14ae751a4724cbe7..cd8990d54f1b87f764a1fd2b68a3caf2d350fc2b 100644 (file)
@@ -466,7 +466,9 @@ DrvSetPixelFormat(HDC hdc, LONG iPixelFormat)
     * avoid opengl32.dll's wglCreateContext to fail */
    if (GetPixelFormat(hdc) == 0) {
       BOOL bRet = SetPixelFormat(hdc, iPixelFormat, NULL);
-      assert(bRet);
+      if (!bRet) {
+         debug_printf("SetPixelFormat failed\n");
+      }
    }
 
    return TRUE;