diff --git a/code/renderercommon/tr_common.h b/code/renderercommon/tr_common.h index 9c7e176b..c183ca8b 100644 --- a/code/renderercommon/tr_common.h +++ b/code/renderercommon/tr_common.h @@ -80,6 +80,7 @@ extern glconfig_t glConfig; // outside of TR since it shouldn't be cleared duri extern qboolean textureFilterAnisotropic; extern int maxAnisotropy; extern float displayAspect; +extern qboolean haveClampToEdge; // // cvars diff --git a/code/renderergl1/tr_backend.c b/code/renderergl1/tr_backend.c index abf15f2e..56cf37d1 100644 --- a/code/renderergl1/tr_backend.c +++ b/code/renderergl1/tr_backend.c @@ -794,8 +794,8 @@ void RE_UploadCinematic (int w, int h, int cols, int rows, const byte *data, int qglTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, haveClampToEdge ? GL_CLAMP_TO_EDGE : GL_CLAMP ); + qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, haveClampToEdge ? GL_CLAMP_TO_EDGE : GL_CLAMP ); } else { if (dirty) { // otherwise, just subimage upload it so that drivers can tell we are going to be changing diff --git a/code/renderergl1/tr_image.c b/code/renderergl1/tr_image.c index 9603ff71..a63de580 100644 --- a/code/renderergl1/tr_image.c +++ b/code/renderergl1/tr_image.c @@ -866,7 +866,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, image->width = width; image->height = height; if (flags & IMGFLAG_CLAMPTOEDGE) - glWrapClampMode = GL_CLAMP_TO_EDGE; + glWrapClampMode = haveClampToEdge ? GL_CLAMP_TO_EDGE : GL_CLAMP; else glWrapClampMode = GL_REPEAT; diff --git a/code/renderergl1/tr_init.c b/code/renderergl1/tr_init.c index 2c7d91de..2539ffa7 100644 --- a/code/renderergl1/tr_init.c +++ b/code/renderergl1/tr_init.c @@ -27,6 +27,7 @@ glconfig_t glConfig; qboolean textureFilterAnisotropic = qfalse; int maxAnisotropy = 0; float displayAspect = 0.0f; +qboolean haveClampToEdge = qfalse; glstate_t glState; @@ -1294,6 +1295,7 @@ void RE_Shutdown( qboolean destroyWindow ) { textureFilterAnisotropic = qfalse; maxAnisotropy = 0; displayAspect = 0.0f; + haveClampToEdge = qfalse; Com_Memset( &glState, 0, sizeof( glState ) ); } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index bd34cc61..275d621e 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -30,6 +30,7 @@ glRefConfig_t glRefConfig; qboolean textureFilterAnisotropic = qfalse; int maxAnisotropy = 0; float displayAspect = 0.0f; +qboolean haveClampToEdge = qfalse; glstate_t glState; @@ -1552,6 +1553,7 @@ void RE_Shutdown( qboolean destroyWindow ) { textureFilterAnisotropic = qfalse; maxAnisotropy = 0; displayAspect = 0.0f; + haveClampToEdge = qfalse; Com_Memset( &glState, 0, sizeof( glState ) ); } diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 28524ce4..4b284fdb 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -277,7 +277,7 @@ static qboolean GLimp_GetProcAddresses( qboolean fixedFunction ) { } if ( fixedFunction ) { - if ( QGL_VERSION_ATLEAST( 1, 2 ) ) { + if ( QGL_VERSION_ATLEAST( 1, 1 ) ) { QGL_1_1_PROCS; QGL_1_1_FIXED_FUNCTION_PROCS; QGL_DESKTOP_1_1_PROCS; @@ -291,7 +291,7 @@ static qboolean GLimp_GetProcAddresses( qboolean fixedFunction ) { // error so this doesn't segfault due to NULL desktop GL functions being used Com_Error( ERR_FATAL, "Unsupported OpenGL Version: %s", version ); } else { - Com_Error( ERR_FATAL, "Unsupported OpenGL Version (%s), OpenGL 1.2 is required", version ); + Com_Error( ERR_FATAL, "Unsupported OpenGL Version (%s), OpenGL 1.1 is required", version ); } } else { if ( QGL_VERSION_ATLEAST( 2, 0 ) ) { @@ -965,6 +965,17 @@ static void GLimp_InitExtensions( qboolean fixedFunction ) { ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not found\n" ); } + + haveClampToEdge = qfalse; + if ( QGL_VERSION_ATLEAST( 1, 2 ) || QGLES_VERSION_ATLEAST( 1, 0 ) || SDL_GL_ExtensionSupported( "GL_SGIS_texture_edge_clamp" ) ) + { + ri.Printf( PRINT_ALL, "...using GL_SGIS_texture_edge_clamp\n" ); + haveClampToEdge = qtrue; + } + else + { + ri.Printf( PRINT_ALL, "...GL_SGIS_texture_edge_clamp not found\n" ); + } } #define R_MODE_FALLBACK 3 // 640 * 480