Alexandre Julliard : winex11.drv:
Fixed and simplified the opengl extension registration.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Sep 12 09:35:07 CDT 2006
Module: wine
Branch: master
Commit: 9d5def307effd580e3a7ed6f15fce7c271694e94
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9d5def307effd580e3a7ed6f15fce7c271694e94
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Sep 12 11:50:36 2006 +0200
winex11.drv: Fixed and simplified the opengl extension registration.
---
dlls/winex11.drv/opengl.c | 130 +++++++++++++--------------------------------
1 files changed, 37 insertions(+), 93 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 8d672e4..8c10395 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -25,6 +25,7 @@
#include "config.h"
#include "wine/port.h"
+#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -103,7 +104,6 @@ typedef struct wine_glextension {
const char *funcName;
void *funcAddress;
} extEntryPoints[8];
- int extNumEntryPoints;
} WineGLExtension;
struct WineGLInfo {
@@ -130,9 +130,11 @@ static int use_render_texture_emulation
static int use_render_texture_ati = 0;
static int swap_interval = 1;
-static WineGLExtension *WineGLExtensionList = NULL;
-long WineGLExtensionListSize = 0;
-void X11DRV_WineGL_LoadExtensions();
+#define MAX_EXTENSIONS 16
+static const WineGLExtension *WineGLExtensionList[MAX_EXTENSIONS];
+static int WineGLExtensionListSize;
+
+static void X11DRV_WineGL_LoadExtensions(void);
static void dump_PIXELFORMATDESCRIPTOR(const PIXELFORMATDESCRIPTOR *ppfd) {
TRACE(" - size / version : %d / %d\n", ppfd->nSize, ppfd->nVersion);
@@ -1314,7 +1316,7 @@ HDC WINAPI X11DRV_wglGetCurrentReadDCARB
PROC X11DRV_wglGetProcAddress(LPCSTR lpszProc)
{
int i, j;
- WineGLExtension *ext;
+ const WineGLExtension *ext;
int padding = 32 - strlen(lpszProc);
if (padding < 0)
@@ -1322,8 +1324,8 @@ PROC X11DRV_wglGetProcAddress(LPCSTR lps
TRACE("('%s'):%*s", lpszProc, padding, " ");
for (i = 0; i < WineGLExtensionListSize; ++i) {
- ext = &WineGLExtensionList[i];
- for (j = 0; j < ext->extNumEntryPoints; ++j) {
+ ext = WineGLExtensionList[i];
+ for (j = 0; ext->extEntryPoints[j].funcName; ++j) {
if (strcmp(ext->extEntryPoints[j].funcName, lpszProc) == 0) {
TRACE("(%p) - WineGL\n", ext->extEntryPoints[j].funcAddress);
return ext->extEntryPoints[j].funcAddress;
@@ -2309,28 +2311,19 @@ static BOOL glxRequireExtension(const ch
return TRUE;
}
-BOOL X11DRV_WineGL_RegisterExtension(const WineGLExtension * ext)
+static BOOL register_extension(const WineGLExtension * ext)
{
int i;
- if (WineGLExtensionListSize == 0)
- {
- WineGLExtensionList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WineGLExtension));
- }
- else
- {
- WineGLExtensionList = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, WineGLExtensionList, (WineGLExtensionListSize + 1) * sizeof(WineGLExtension));
- }
-
- WineGLExtensionList[WineGLExtensionListSize] = *ext;
- ++WineGLExtensionListSize;
+ assert( WineGLExtensionListSize < MAX_EXTENSIONS );
+ WineGLExtensionList[WineGLExtensionListSize++] = ext;
strcat(WineGLInfo.wglExtensions, " ");
strcat(WineGLInfo.wglExtensions, ext->extName);
TRACE("'%s'\n", ext->extName);
- for (i = 0; i < ext->extNumEntryPoints; ++i)
+ for (i = 0; ext->extEntryPoints[i].funcName; ++i)
TRACE(" - '%s'\n", ext->extEntryPoints[i].funcName);
return TRUE;
@@ -2344,12 +2337,6 @@ static const WineGLExtension WGL_ARB_ext
}
};
-/* WGL_ARB_extensions_string */
-static void WineGLExtension__WGL_ARB_extensions_string()
-{
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_extensions_string);
-}
-
static const WineGLExtension WGL_ARB_make_current_read =
{
"WGL_ARB_make_current_read",
@@ -2359,29 +2346,11 @@ static const WineGLExtension WGL_ARB_mak
}
};
-/* WGL_ARB_make_current_read */
-static void WineGLExtension__WGL_ARB_make_current_read()
-{
- if (glxRequireVersion(3) == FALSE)
- return;
-
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_make_current_read);
-}
-
static const WineGLExtension WGL_ARB_multisample =
{
"WGL_ARB_multisample",
};
-/* WGL_ARB_multisample */
-static void WineGLExtension__WGL_ARB_multisample()
-{
- if (glxRequireExtension("GLX_ARB_multisample") == FALSE)
- return;
-
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_multisample);
-}
-
static const WineGLExtension WGL_ARB_pbuffer =
{
"WGL_ARB_pbuffer",
@@ -2395,15 +2364,6 @@ static const WineGLExtension WGL_ARB_pbu
}
};
-/* WGL_ARB_pbuffer */
-static void WineGLExtension__WGL_ARB_pbuffer()
-{
- if ((glxRequireVersion(3) == FALSE) || (glxRequireExtension("GLX_SGIX_pbuffer") == FALSE))
- return;
-
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_pbuffer);
-}
-
static const WineGLExtension WGL_ARB_pixel_format =
{
"WGL_ARB_pixel_format",
@@ -2414,12 +2374,6 @@ static const WineGLExtension WGL_ARB_pix
}
};
-/* WGL_ARB_pixel_format */
-static void WineGLExtension__WGL_ARB_pixel_format()
-{
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_pixel_format);
-}
-
static const WineGLExtension WGL_ARB_render_texture =
{
"WGL_ARB_render_texture",
@@ -2429,16 +2383,6 @@ static const WineGLExtension WGL_ARB_ren
}
};
-/* WGL_ARB_render_texture */
-static void WineGLExtension__WGL_ARB_render_texture()
-{
- if (glxRequireExtension("GLX_ATI_render_texture") == FALSE &&
- glxRequireExtension("GLX_ARB_render_texture") == FALSE)
- return;
-
- X11DRV_WineGL_RegisterExtension(&WGL_ARB_render_texture);
-}
-
static const WineGLExtension WGL_EXT_extensions_string =
{
"WGL_EXT_extensions_string",
@@ -2447,12 +2391,6 @@ static const WineGLExtension WGL_EXT_ext
}
};
-/* WGL_EXT_extensions_string */
-static void WineGLExtension__WGL_EXT_extensions_string()
-{
- X11DRV_WineGL_RegisterExtension(&WGL_EXT_extensions_string);
-}
-
static const WineGLExtension WGL_EXT_swap_control =
{
"WGL_EXT_swap_control",
@@ -2462,33 +2400,39 @@ static const WineGLExtension WGL_EXT_swa
}
};
-/* WGL_EXT_swap_control */
-static void WineGLExtension__WGL_EXT_swap_control()
-{
- if (glxRequireExtension("GLX_SGI_swap_control") == FALSE)
- return;
-
- X11DRV_WineGL_RegisterExtension(&WGL_EXT_swap_control);
-}
-
/**
* X11DRV_WineGL_LoadExtensions
*/
-void X11DRV_WineGL_LoadExtensions(void)
+static void X11DRV_WineGL_LoadExtensions(void)
{
WineGLInfo.wglExtensions[0] = 0;
+
/* ARB Extensions */
- WineGLExtension__WGL_ARB_extensions_string();
- WineGLExtension__WGL_ARB_make_current_read();
- WineGLExtension__WGL_ARB_multisample();
- WineGLExtension__WGL_ARB_pbuffer();
- WineGLExtension__WGL_ARB_pixel_format();
- WineGLExtension__WGL_ARB_render_texture();
+
+ register_extension(&WGL_ARB_extensions_string);
+
+ if (glxRequireVersion(3))
+ register_extension(&WGL_ARB_make_current_read);
+
+ if (glxRequireExtension("GLX_ARB_multisample"))
+ register_extension(&WGL_ARB_multisample);
+
+ if (glxRequireVersion(3) && glxRequireExtension("GLX_SGIX_pbuffer"))
+ register_extension(&WGL_ARB_pbuffer);
+
+ register_extension(&WGL_ARB_pixel_format);
+
+ if (glxRequireExtension("GLX_ATI_render_texture") ||
+ glxRequireExtension("GLX_ARB_render_texture"))
+ register_extension(&WGL_ARB_render_texture);
/* EXT Extensions */
- WineGLExtension__WGL_EXT_extensions_string();
- WineGLExtension__WGL_EXT_swap_control();
+
+ register_extension(&WGL_EXT_extensions_string);
+
+ if (glxRequireExtension("GLX_SGI_swap_control"))
+ register_extension(&WGL_EXT_swap_control);
}
More information about the wine-cvs
mailing list