Browse Source

wgldisplay: Support floating-point window framebuffers on Windows

These are linearized scRGB, and necessary to make Panda work on HDR monitors.
rdb 5 years ago
parent
commit
3f0ff827f3
1 changed files with 9 additions and 2 deletions
  1. 9 2
      panda/src/wgldisplay/wglGraphicsStateGuardian.cxx

+ 9 - 2
panda/src/wgldisplay/wglGraphicsStateGuardian.cxx

@@ -208,6 +208,10 @@ get_properties_advanced(FrameBufferProperties &properties,
                              ivalue_list[green_bits_i],
                              ivalue_list[green_bits_i],
                              ivalue_list[blue_bits_i],
                              ivalue_list[blue_bits_i],
                              ivalue_list[alpha_bits_i]);
                              ivalue_list[alpha_bits_i]);
+
+    if (ivalue_list[pixel_type_i] == WGL_TYPE_RGBA_FLOAT_ARB) {
+      properties.set_float_color(true);
+    }
   }
   }
 
 
   if (ivalue_list[double_buffer_i]) {
   if (ivalue_list[double_buffer_i]) {
@@ -372,8 +376,11 @@ choose_pixel_format(const FrameBufferProperties &properties,
 
 
   iattrib_list[ni++] = WGL_SUPPORT_OPENGL_ARB;
   iattrib_list[ni++] = WGL_SUPPORT_OPENGL_ARB;
   iattrib_list[ni++] = true;
   iattrib_list[ni++] = true;
-  iattrib_list[ni++] = WGL_PIXEL_TYPE_ARB;
-  iattrib_list[ni++] = WGL_TYPE_RGBA_ARB;
+
+  if (!properties.get_float_color()) {
+    iattrib_list[ni++] = WGL_PIXEL_TYPE_ARB;
+    iattrib_list[ni++] = WGL_TYPE_RGBA_ARB;
+  }
 
 
   if (need_pbuffer) {
   if (need_pbuffer) {
     iattrib_list[ni++] = WGL_DRAW_TO_PBUFFER_ARB;
     iattrib_list[ni++] = WGL_DRAW_TO_PBUFFER_ARB;