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