Roderick Colenbrander : wgl: Add WGL_NV_float_buffer and WGL_NV_texture_rectangle support.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 30 08:55:37 CDT 2007


Module: wine
Branch: master
Commit: 8873478e052fb186c252de1b6e9cb84d8c72fadd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8873478e052fb186c252de1b6e9cb84d8c72fadd

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Fri Jul 27 15:01:52 2007 +0200

wgl: Add WGL_NV_float_buffer and WGL_NV_texture_rectangle support.

---

 dlls/winex11.drv/opengl.c |   76 ++++++++++++++++++++++++++++++++++++++++++---
 include/wine/wgl.h        |   40 +++++++++++++++++++++++
 2 files changed, 111 insertions(+), 5 deletions(-)

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index db9eb44..89238ef 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -759,9 +759,17 @@ static int ConvertAttribWGLtoGLX(const int* iWGLAttr, int* oGLXAttr, Wine_GLPBuf
         }
       }
       break ;
-
+    case WGL_FLOAT_COMPONENTS_NV:
+      pop = iWGLAttr[++cur];
+      PUSH2(oGLXAttr, GLX_FLOAT_COMPONENTS_NV, pop);
+      TRACE("pAttr[%d] = GLX_FLOAT_COMPONENTS_NV: %x\n", cur, pop);
+      break ;
     case WGL_BIND_TO_TEXTURE_RGB_ARB:
     case WGL_BIND_TO_TEXTURE_RGBA_ARB:
+    case WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV:
+    case WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV:
+    case WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV:
+    case WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV:
       pop = iWGLAttr[++cur];
       /** cannot be converted, see direct handling on 
        *   - wglGetPixelFormatAttribivARB
@@ -2023,7 +2031,22 @@ static HPBUFFERARB WINAPI X11DRV_wglCreatePbufferARB(HDC hdc, int iPixelFormat,
                             case WGL_TEXTURE_RGBA_ARB:
                                 object->use_render_texture = GL_RGBA;
                                 break;
+
+                            /* WGL_FLOAT_COMPONENTS_NV */
+                            case WGL_TEXTURE_FLOAT_R_NV:
+                                object->use_render_texture = GL_FLOAT_R_NV;
+                                break;
+                            case WGL_TEXTURE_FLOAT_RG_NV:
+                                object->use_render_texture = GL_FLOAT_RG_NV;
+                                break;
+                            case WGL_TEXTURE_FLOAT_RGB_NV:
+                                object->use_render_texture = GL_FLOAT_RGB_NV;
+                                break;
+                            case WGL_TEXTURE_FLOAT_RGBA_NV:
+                                object->use_render_texture = GL_FLOAT_RGBA_NV;
+                                break;
                             default:
+                                ERR("Unknown texture format: %x\n", attr_v);
                                 SetLastError(ERROR_INVALID_DATA);
                                 goto create_failed;
                         }
@@ -2080,7 +2103,13 @@ static HPBUFFERARB WINAPI X11DRV_wglCreatePbufferARB(HDC hdc, int iPixelFormat,
                                 object->texture_bind_target = GL_TEXTURE_2D;
                                 break;
                             }
+                            case WGL_TEXTURE_RECTANGLE_NV: {
+                                object->texture_target = GL_TEXTURE_RECTANGLE_NV;
+                                object->texture_bind_target = GL_TEXTURE_BINDING_RECTANGLE_NV;
+                                break;
+                            }
                             default:
+                                ERR("Unknown texture target: %x\n", attr_v);
                                 SetLastError(ERROR_INVALID_DATA);
                                 goto create_failed;
                         }
@@ -2212,10 +2241,28 @@ static GLboolean WINAPI X11DRV_wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAtt
                         SetLastError(ERROR_INVALID_HANDLE);
                         return GL_FALSE;
                     }
-                    if (GL_RGBA == object->use_render_texture) {
-                        *piValue = WGL_TEXTURE_RGBA_ARB;
-                    } else {
-                        *piValue = WGL_TEXTURE_RGB_ARB;
+                    switch(object->use_render_texture) {
+                        case GL_RGB:
+                            *piValue = WGL_TEXTURE_RGB_ARB;
+                            break;
+                        case GL_RGBA:
+                            *piValue = WGL_TEXTURE_RGBA_ARB;
+                            break;
+                        /* WGL_FLOAT_COMPONENTS_NV */
+                        case GL_FLOAT_R_NV:
+                            *piValue = WGL_TEXTURE_FLOAT_R_NV;
+                            break;
+                        case GL_FLOAT_RG_NV:
+                            *piValue = WGL_TEXTURE_FLOAT_RG_NV;
+                            break;
+                        case GL_FLOAT_RGB_NV:
+                            *piValue = WGL_TEXTURE_FLOAT_RGB_NV;
+                            break;
+                        case GL_FLOAT_RGBA_NV:
+                            *piValue = WGL_TEXTURE_FLOAT_RGBA_NV;
+                            break;
+                        default:
+                            ERR("Unknown texture format: %x\n", object->use_render_texture);
                     }
                 }
             }
@@ -2245,6 +2292,7 @@ static GLboolean WINAPI X11DRV_wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAtt
                     case GL_TEXTURE_1D:       *piValue = WGL_TEXTURE_1D_ARB; break;
                     case GL_TEXTURE_2D:       *piValue = WGL_TEXTURE_2D_ARB; break;
                     case GL_TEXTURE_CUBE_MAP: *piValue = WGL_TEXTURE_CUBE_MAP_ARB; break;
+                    case GL_TEXTURE_RECTANGLE_NV: *piValue = WGL_TEXTURE_RECTANGLE_NV; break;
                 }
             }
         }
@@ -2792,6 +2840,14 @@ static BOOL glxRequireExtension(const char *requiredExtension)
     return TRUE;
 }
 
+static void register_extension_string(const char *ext)
+{
+    strcat(WineGLInfo.wglExtensions, " ");
+    strcat(WineGLInfo.wglExtensions, ext);
+
+    TRACE("'%s'\n", ext);
+}
+
 static BOOL register_extension(const WineGLExtension * ext)
 {
     int i;
@@ -2944,8 +3000,18 @@ static void X11DRV_WineGL_LoadExtensions(void)
     if (glxRequireExtension("GLX_ATI_render_texture") ||
         glxRequireExtension("GLX_ARB_render_texture") ||
         (glxRequireVersion(3) && glxRequireExtension("GLX_SGIX_pbuffer") && use_render_texture_emulation))
+    {
         register_extension(&WGL_ARB_render_texture);
 
+        /* The WGL version of GLX_NV_float_buffer requires render_texture */
+        if(glxRequireExtension("GLX_NV_float_buffer"))
+            register_extension_string("WGL_NV_float_buffer");
+
+        /* Again there's no GLX equivalent for this extension, so depend on the required GL extension */
+        if(strstr(WineGLInfo.glExtensions, "GL_NV_texture_rectangle") != NULL)
+            register_extension_string("WGL_NV_texture_rectangle");
+    }
+
     /* EXT Extensions */
 
     register_extension(&WGL_EXT_extensions_string);
diff --git a/include/wine/wgl.h b/include/wine/wgl.h
index e191407..14dfa42 100644
--- a/include/wine/wgl.h
+++ b/include/wine/wgl.h
@@ -139,6 +139,44 @@
 #define WGL_AUX8_ARB                        0x208F 
 #define WGL_AUX9_ARB                        0x2090
 
+/** WGL_NV_render_texture_rectangle */
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV       0x20A2
+/** WGL_NV_render_depth_texture */
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV   0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV    0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV         0x20A7
+/** WGL_NV_float_buffer */
+#define WGL_FLOAT_COMPONENTS_NV        0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV         0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV        0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV       0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV      0x20B8
+/** GL_NV_float_buffer */
+#define GL_FLOAT_R_NV                     0x8880
+#define GL_FLOAT_RG_NV                    0x8881
+#define GL_FLOAT_RGB_NV                   0x8882
+#define GL_FLOAT_RGBA_NV                  0x8883
+#define GL_FLOAT_R16_NV                   0x8884
+#define GL_FLOAT_R32_NV                   0x8885
+#define GL_FLOAT_RG16_NV                  0x8886
+#define GL_FLOAT_RG32_NV                  0x8887
+#define GL_FLOAT_RGB16_NV                 0x8888
+#define GL_FLOAT_RGB32_NV                 0x8889
+#define GL_FLOAT_RGBA16_NV                0x888A
+#define GL_FLOAT_RGBA32_NV                0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV    0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV     0x888D
+#define GL_FLOAT_RGBA_MODE_NV             0x888E
+
+
 /** 
  * WGL_ATI_pixel_format_float / WGL_ARB_color_buffer_float
  */
@@ -189,3 +227,5 @@
 #define GLX_AUX9_ATI                        0x9820
 #define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI   0x9821
 #define GLX_BIND_TO_TEXTURE_INTENSITY_ATI   0x9822
+/** GLX_NV_float_buffer */
+#define GLX_FLOAT_COMPONENTS_NV            0x20B0




More information about the wine-cvs mailing list