From: lordhavoc Date: Fri, 2 Nov 2001 11:02:38 +0000 (+0000) Subject: removed support for GL_SGIS_multitexture (ancient) X-Git-Tag: RELEASE_0_2_0_RC1~742 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=commitdiff_plain;h=4a3c7b42fbd66d9df4f7afbf72f580a6ecbb047d removed support for GL_SGIS_multitexture (ancient) redesigned entire extension setup system (now resides only in vid_shared.c) all extension functions are checked against NULL before the extension is enabled (if one is NULL it complains appropriately) now also looks for glClientActiveTextureARB (needed for multitexture in vertex arrays) git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@1000 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/gl_rmain.c b/gl_rmain.c index 57f7dd9c..ffa9226b 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -329,7 +329,6 @@ GL_Init =============== */ extern char *ENGINE_EXTENSIONS; -extern void VID_CheckCombine(void); void GL_Init (void) { gl_vendor = glGetString (GL_VENDOR); @@ -344,9 +343,10 @@ void GL_Init (void) // Con_Printf ("%s %s\n", gl_renderer, gl_version); - VID_CheckMultitexture(); - VID_CheckCVA(); - VID_CheckCombine(); +// VID_CheckMultitexture(); +// VID_CheckCVA(); +// VID_CheckCombine(); + VID_CheckExtensions(); // LordHavoc: report supported extensions Con_Printf ("\nengine extensions: %s\n", ENGINE_EXTENSIONS); diff --git a/gl_rsurf.c b/gl_rsurf.c index 8797b9d0..30851689 100644 --- a/gl_rsurf.c +++ b/gl_rsurf.c @@ -2287,9 +2287,12 @@ void GL_BuildLightmaps (void) if (nosubimage || nosubimagefragments) { + // LordHavoc: switch to second TMU as an upload hint for voodoo2 + // (don't know if it really pays attention or not, but original + // glquake did this...) if(r_upload.value) if (gl_mtexable) - qglSelectTexture(gl_mtex_enum+1); + qglActiveTexture(GL_TEXTURE1_ARB); for (i = 0;i < MAX_LIGHTMAPS;i++) { if (!allocated[i][0]) @@ -2309,7 +2312,7 @@ void GL_BuildLightmaps (void) } if(r_upload.value) if (gl_mtexable) - qglSelectTexture(gl_mtex_enum+0); + qglActiveTexture(GL_TEXTURE0_ARB); } } diff --git a/glquake.h b/glquake.h index 1aae6b0e..d1f65a1e 100644 --- a/glquake.h +++ b/glquake.h @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -39,8 +39,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern qboolean isG200; extern qboolean isRagePro; -extern qboolean gl_mtexable; -extern qboolean gl_supportslockarrays; extern void GL_BeginRendering (int *x, int *y, int *width, int *height); extern void GL_EndRendering (void); @@ -113,31 +111,21 @@ extern const char *gl_renderer; extern const char *gl_version; extern const char *gl_extensions; -// Multitexture -#define TEXTURE0_SGIS 0x835E -#define TEXTURE1_SGIS 0x835F - #ifndef _WIN32 #define APIENTRY /* */ #endif -// LordHavoc: ARB multitexure support -extern int gl_mtex_enum; - // for platforms (wgl) that do not use GLAPIENTRY #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif -// multitexture -extern void (GLAPIENTRY *qglMTexCoord2f) (GLenum, GLfloat, GLfloat); -extern void (GLAPIENTRY *qglSelectTexture) (GLenum); -extern void (GLAPIENTRY *qglLockArraysEXT) (GLint first, GLint count); -extern void (GLAPIENTRY *qglUnlockArraysEXT) (void); - - -#ifndef GL_ACTIVE_TEXTURE_ARB // GL_ARB_multitexture +extern int gl_mtexable; +extern void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat); +extern void (GLAPIENTRY *qglActiveTexture) (GLenum); +extern void (GLAPIENTRY *qglClientActiveTexture) (GLenum); +#ifndef GL_ACTIVE_TEXTURE_ARB #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURES_UNITS_ARB 0x84E2 @@ -175,8 +163,14 @@ extern void (GLAPIENTRY *qglUnlockArraysEXT) (void); #define GL_TEXTURE31_ARB 0x84DF #endif -#ifndef GL_COMBINE_ARB +// GL_EXT_compiled_vertex_array +extern int gl_supportslockarrays; +extern void (GLAPIENTRY *qglLockArraysEXT) (GLint first, GLint count); +extern void (GLAPIENTRY *qglUnlockArraysEXT) (void); + // GL_ARB_texture_env_combine +extern int gl_combine_extension; +#ifndef GL_COMBINE_ARB #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 @@ -201,7 +195,6 @@ extern void (GLAPIENTRY *qglUnlockArraysEXT) (void); #define GL_PREVIOUS_ARB 0x8578 #endif -extern qboolean gl_combine_extension; extern cvar_t gl_combine; #ifdef WIN32 diff --git a/vid.h b/vid.h index f2757bbd..d8a4cfdf 100644 --- a/vid.h +++ b/vid.h @@ -46,8 +46,7 @@ void VID_InitCvars(void); void GL_Init (void); -void VID_CheckMultitexture(void); -void VID_CheckCVA(void); +void VID_CheckExtensions(void); void VID_Init (void); // Called at startup diff --git a/vid_3dfxsvga.c b/vid_3dfxsvga.c index 6583d37d..3f4e4266 100644 --- a/vid_3dfxsvga.c +++ b/vid_3dfxsvga.c @@ -104,75 +104,6 @@ void InitSig(void) signal(SIGTERM, signal_handler); } -/* - VID_CheckMultitexture - - Check for ARB, SGIS, or EXT multitexture support -*/ -void VID_CheckMultitexture(void) -{ - Con_Printf ("Checking for multitexture... "); - if (COM_CheckParm ("-nomtex")) - { - Con_Printf ("disabled\n"); - return; - } - dlhand = dlopen (NULL, RTLD_LAZY); - if (dlhand == NULL) - { - Con_Printf ("unable to check\n"); - return; - } - if (strstr(gl_extensions, "GL_ARB_multitexture ")) - { - Con_Printf ("GL_ARB_multitexture\n"); - qglMTexCoord2f = (void *)dlsym(dlhand, "glMultiTexCoord2fARB"); - qglSelectTexture = (void *)dlsym(dlhand, "glActiveTextureARB"); - gl_mtex_enum = GL_TEXTURE0_ARB; - gl_mtexable = true; - } - else if (strstr(gl_extensions, "GL_SGIS_multitexture ")) - { - Con_Printf ("GL_SGIS_multitexture\n"); - qglMTexCoord2f = (void *)dlsym(dlhand, "glMTexCoord2fSGIS"); - qglSelectTexture = (void *)dlsym(dlhand, "glSelectTextureSGIS"); - gl_mtex_enum = TEXTURE0_SGIS; - gl_mtexable = true; - } - else - Con_Printf ("none found\n"); - dlclose(dlhand); - dlhand = NULL; -} - -void VID_CheckCVA(void) -{ - qglLockArraysEXT = NULL; - qglUnlockArraysEXT = NULL; - gl_supportslockarrays = false; - if (COM_CheckParm("-nocva")) - { - Con_Printf("...compiled vertex arrays disabled\n"); - return; - } - dlhand = dlopen (NULL, RTLD_LAZY); - if (dlhand == NULL) - { - Con_Printf("Unable to open symbol list for main program.\n"); - return; - } - if (strstr(gl_extensions, "GL_EXT_compiled_vertex_array")) - { - Con_Printf("...using compiled vertex arrays\n"); - qglLockArraysEXT = (void *) dlsym(dlhand, "glLockArraysEXT"); - qglUnlockArraysEXT = (void *) dlsym(dlhand, "glUnlockArraysEXT"); - gl_supportslockarrays = true; - } - dlclose(dlhand); - dlhand = NULL; -} - - typedef void (GLAPIENTRY *gl3DfxSetDitherModeEXT_FUNC) (GrDitherMode_t mode); void VID_SetupDithering(void) diff --git a/vid_glx.c b/vid_glx.c index 995cd641..69c34705 100644 --- a/vid_glx.c +++ b/vid_glx.c @@ -473,99 +473,6 @@ void InitSig(void) signal(SIGTERM, signal_handler); } -void VID_CheckMultitexture(void) -{ - void *prjobj; - qglMTexCoord2f = NULL; - qglSelectTexture = NULL; - // Check to see if multitexture is disabled - if (COM_CheckParm("-nomtex")) - { - Con_Printf("...multitexture disabled\n"); - return; - } - if ((prjobj = dlopen(NULL, RTLD_LAZY)) == NULL) - { - Con_Printf("Unable to open symbol list for main program.\n"); - return; - } - // Test for ARB_multitexture - if (!COM_CheckParm("-SGISmtex") && strstr(gl_extensions, "GL_ARB_multitexture ")) - { - Con_Printf("...using GL_ARB_multitexture\n"); - qglMTexCoord2f = (void *) dlsym(prjobj, "glMultiTexCoord2fARB"); - qglSelectTexture = (void *) dlsym(prjobj, "glActiveTextureARB"); - if (qglMTexCoord2f != NULL && qglSelectTexture != NULL) - { - gl_mtexable = true; - gl_mtex_enum = GL_TEXTURE0_ARB; - } - else - { - if (qglMTexCoord2f == NULL) - Con_Printf("dlsym(prjobj, \"glMultiTexCoord2fARB\") == NULL!\n"); - if (qglSelectTexture == NULL) - Con_Printf("dlsym(prjobj, \"glActiveTextureARB\") == NULL!\n"); - } - } - if (!gl_mtexable && strstr(gl_extensions, "GL_SGIS_multitexture ")) // Test for SGIS_multitexture (if ARB_multitexture not found) - { - Con_Printf("...using GL_SGIS_multitexture\n"); - qglMTexCoord2f = (void *) dlsym(prjobj, "glMTexCoord2fSGIS"); - qglSelectTexture = (void *) dlsym(prjobj, "glSelectTextureSGIS"); - if (qglMTexCoord2f != NULL && qglSelectTexture != NULL) - { - gl_mtexable = true; - gl_mtex_enum = TEXTURE0_SGIS; - } - else - { - if (qglMTexCoord2f == NULL) - Con_Printf("dlsym(prjobj, \"glMTexCoord2fSGIS\") == NULL!\n"); - if (qglSelectTexture == NULL) - Con_Printf("dlsym(prjobj, \"glSelectTextureSGIS\") == NULL!\n"); - } - } - if (!gl_mtexable) - Con_Printf("...multitexture disabled (not detected)\n"); - dlclose(prjobj); -} - -void VID_CheckCVA(void) -{ - void *prjobj; - qglLockArraysEXT = NULL; - qglUnlockArraysEXT = NULL; - gl_supportslockarrays = false; - if (COM_CheckParm("-nocva")) - { - Con_Printf("...compiled vertex arrays disabled\n"); - return; - } - if ((prjobj = dlopen(NULL, RTLD_LAZY)) == NULL) - { - Con_Printf("Unable to open symbol list for main program.\n"); - return; - } - if (strstr(gl_extensions, "GL_EXT_compiled_vertex_array")) - { - Con_Printf("...using compiled vertex arrays\n"); - qglLockArraysEXT = (void *) dlsym(prjobj, "glLockArraysEXT"); - qglUnlockArraysEXT = (void *) dlsym(prjobj, "glUnlockArraysEXT"); - if (qglLockArraysEXT != NULL && qglUnlockArraysEXT != NULL) - gl_supportslockarrays = true; - else - { - if (qglLockArraysEXT == NULL) - Con_Printf("dlsym(prjobj, \"glLockArraysEXT\") == NULL!\n"); - if (qglUnlockArraysEXT == NULL) - Con_Printf("dlsym(prjobj, \"glUnlockArraysEXT\") == NULL!\n"); - Con_Printf("...compiled vertex arrays disabled\n"); - } - } - dlclose(prjobj); -} - /* ================= GL_BeginRendering diff --git a/vid_shared.c b/vid_shared.c index f799f7db..f582b6fc 100644 --- a/vid_shared.c +++ b/vid_shared.c @@ -5,29 +5,124 @@ qboolean isG200 = false; // LordHavoc: the Matrox G200 can't do per pixel alpha, and it uses a D3D driver for GL... ugh... qboolean isRagePro = false; // LordHavoc: the ATI Rage Pro has limitations with per pixel alpha (the color scaler does not apply to per pixel alpha images...), although not as bad as a G200. -// LordHavoc: compiled vertex array support -qboolean gl_supportslockarrays = false; -// LordHavoc: ARB multitexture support -qboolean gl_mtexable = false; -int gl_mtex_enum = 0; -// LordHavoc: ARB texture_env_combine support -qboolean gl_combine_extension = false; +// LordHavoc: GL_ARB_multitexture support +int gl_mtexable = false; +// LordHavoc: GL_ARB_texture_env_combine support +int gl_combine_extension = false; +// LordHavoc: GL_EXT_compiled_vertex_array support +int gl_supportslockarrays = false; cvar_t vid_mode = {0, "vid_mode", "0"}; cvar_t vid_mouse = {CVAR_SAVE, "vid_mouse", "1"}; cvar_t vid_fullscreen = {0, "vid_fullscreen", "1"}; cvar_t gl_combine = {0, "gl_combine", "0"}; -void (GLAPIENTRY *qglMTexCoord2f) (GLenum, GLfloat, GLfloat); -void (GLAPIENTRY *qglSelectTexture) (GLenum); +// GL_ARB_multitexture +void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat); +void (GLAPIENTRY *qglActiveTexture) (GLenum); +void (GLAPIENTRY *qglClientActiveTexture) (GLenum); + +// GL_EXT_compiled_vertex_array void (GLAPIENTRY *qglLockArraysEXT) (GLint first, GLint count); void (GLAPIENTRY *qglUnlockArraysEXT) (void); -void Force_CenterView_f (void) +typedef struct { - cl.viewangles[PITCH] = 0; + char *name; + void **funcvariable; } +gl_extensionfunctionlist_t; + +typedef struct +{ + char *name; + gl_extensionfunctionlist_t *funcs; + int *enablevariable; + char *disableparm; +} +gl_extensioninfo_t; + +static gl_extensionfunctionlist_t multitexturefuncs[] = +{ + {"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f}, + {"glActiveTextureARB", (void **) &qglActiveTexture}, + {"glClientActiveTextureARB", (void **) &qglClientActiveTexture}, + {NULL, NULL} +}; + +static gl_extensionfunctionlist_t compiledvertexarrayfuncs[] = +{ + {"glLockArraysEXT", (void **) &qglLockArraysEXT}, + {"glUnlockArraysEXT", (void **) &qglUnlockArraysEXT}, + {NULL, NULL} +}; + +static gl_extensioninfo_t gl_extensioninfo[] = +{ + {"GL_ARB_multitexture", multitexturefuncs, &gl_mtexable, "-nomtex"}, + {"GL_ARB_texture_env_combine", NULL, &gl_combine_extension, "-nocombine"}, + {"GL_EXT_compiled_vertex_array", compiledvertexarrayfuncs, &gl_supportslockarrays, "-nocva"}, + {NULL, NULL, NULL, NULL} +}; + +#ifndef WIN32 +#include +#endif +void VID_CheckExtensions(void) +{ +#ifndef WIN32 + void *prjobj; +#endif + gl_extensioninfo_t *info; + gl_extensionfunctionlist_t *func; +// multitexturefuncs[0].funcvariable = (void **)&qglMultiTexCoord2f; + Con_Printf("Checking OpenGL extensions...\n"); +#ifndef WIN32 + if ((prjobj = dlopen(NULL, RTLD_LAZY)) == NULL) + { + Con_Printf("Unable to open symbol list for main program.\n"); + return; + } +#endif + for (info = gl_extensioninfo;info && info->name;info++) + { + *info->enablevariable = false; + for (func = info->funcs;func && func->name;func++) + *func->funcvariable = NULL; + Con_Printf("checking for %s... ", info->name); + if (info->disableparm && COM_CheckParm(info->disableparm)) + { + Con_Printf("disabled by commandline\n"); + continue; + } + if (strstr(gl_extensions, info->name)) + { + for (func = info->funcs;func && func->name != NULL;func++) + { +#ifdef WIN32 + if (!(*func->funcvariable = (void *) wglGetProcAddress(func->name))) +#else + if (!(*func->funcvariable = (void *) dlsym(prjobj, func->name))) +#endif + { + Con_Printf("missing function \"%s\"!\n", func->name); + goto missingfunc; + } + } + Con_Printf("enabled\n"); + *info->enablevariable = true; + missingfunc:; + } + else + Con_Printf("not detected\n"); + } +#ifndef WIN32 + dlclose(prjobj); +#endif +} + +/* void VID_CheckCombine(void) { // LordHavoc: although texture_env_combine doesn't require multiple TMUs @@ -46,6 +141,12 @@ void VID_CheckCombine(void) Con_Printf("GL_ARB_texture_env_combine not detected\n"); } } +*/ + +void Force_CenterView_f (void) +{ + cl.viewangles[PITCH] = 0; +} void VID_InitCvars(void) { diff --git a/vid_wgl.c b/vid_wgl.c index 4558d890..cb4621c2 100644 --- a/vid_wgl.c +++ b/vid_wgl.c @@ -369,57 +369,6 @@ void VID_UpdateWindowStatus (void) //==================================== -void VID_CheckMultitexture(void) -{ - qglMTexCoord2f = NULL; - qglSelectTexture = NULL; - gl_mtexable = false; - // Check to see if multitexture is disabled - if (COM_CheckParm("-nomtex")) - { - Con_Printf("...multitexture disabled\n"); - return; - } - // Test for ARB_multitexture - if (!COM_CheckParm("-SGISmtex") && strstr(gl_extensions, "GL_ARB_multitexture ")) - { - Con_Printf("...using GL_ARB_multitexture\n"); - qglMTexCoord2f = (void *) wglGetProcAddress("glMultiTexCoord2fARB"); - qglSelectTexture = (void *) wglGetProcAddress("glActiveTextureARB"); - gl_mtexable = true; - gl_mtex_enum = GL_TEXTURE0_ARB; - } - else if (strstr(gl_extensions, "GL_SGIS_multitexture ")) // Test for SGIS_multitexture (if ARB_multitexture not found) - { - Con_Printf("...using GL_SGIS_multitexture\n"); - qglMTexCoord2f = (void *) wglGetProcAddress("glMTexCoord2fSGIS"); - qglSelectTexture = (void *) wglGetProcAddress("glSelectTextureSGIS"); - gl_mtexable = true; - gl_mtex_enum = TEXTURE0_SGIS; - } - else - Con_Printf("...multitexture disabled (not detected)\n"); -} - -void VID_CheckCVA(void) -{ - qglLockArraysEXT = NULL; - qglUnlockArraysEXT = NULL; - gl_supportslockarrays = false; - if (COM_CheckParm("-nocva")) - { - Con_Printf("...compiled vertex arrays disabled\n"); - return; - } - if (strstr(gl_extensions, "GL_EXT_compiled_vertex_array")) - { - Con_Printf("...using compiled vertex arrays\n"); - qglLockArraysEXT = (void *) wglGetProcAddress("glLockArraysEXT"); - qglUnlockArraysEXT = (void *) wglGetProcAddress("glUnlockArraysEXT"); - gl_supportslockarrays = true; - } -} - /* ================= GL_BeginRendering