From 22f60d50ac323f29d2c56deef50a8a62e8677438 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 21 Aug 2023 10:01:59 +0300 Subject: [PATCH] ref: gl: only enable/disable texture units in fixed-function pipeline rendering, in our case, low TMUs --- ref/gl/gl_backend.c | 26 +++++++++++++++++++++++--- ref/gl/gl_image.c | 5 ++--- ref/gl/gl_local.h | 1 + 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/ref/gl/gl_backend.c b/ref/gl/gl_backend.c index 9d595d20..1ca0b440 100644 --- a/ref/gl/gl_backend.c +++ b/ref/gl/gl_backend.c @@ -259,6 +259,27 @@ void GL_MultiTexCoord2f( GLenum texture, GLfloat s, GLfloat t ) pglMultiTexCoord2f( texture + GL_TEXTURE0_ARB, s, t ); } +/* +==================== +GL_EnableTextureUnit +==================== +*/ +void GL_EnableTextureUnit( int tmu, qboolean enable ) +{ + // only enable fixed-function pipeline units + if( tmu < glConfig.max_texture_units ) + { + if( enable ) + { + pglEnable( glState.currentTextureTargets[tmu] ); + } + else if( glState.currentTextureTargets[tmu] != GL_NONE ) + { + pglDisable( glState.currentTextureTargets[tmu] ); + } + } +} + /* ================= GL_TextureTarget @@ -274,11 +295,10 @@ void GL_TextureTarget( uint target ) if( glState.currentTextureTargets[glState.activeTMU] != target ) { - if( glState.currentTextureTargets[glState.activeTMU] != GL_NONE ) - pglDisable( glState.currentTextureTargets[glState.activeTMU] ); + GL_EnableTextureUnit( glState.activeTMU, false ); glState.currentTextureTargets[glState.activeTMU] = target; if( target != GL_NONE ) - pglEnable( glState.currentTextureTargets[glState.activeTMU] ); + GL_EnableTextureUnit( glState.activeTMU, true ); } } diff --git a/ref/gl/gl_image.c b/ref/gl/gl_image.c index 606ec891..737ba49f 100644 --- a/ref/gl/gl_image.c +++ b/ref/gl/gl_image.c @@ -105,10 +105,9 @@ void GL_Bind( GLint tmu, GLenum texnum ) if( glState.currentTextureTargets[tmu] != glTarget ) { - if( glState.currentTextureTargets[tmu] != GL_NONE ) - pglDisable( glState.currentTextureTargets[tmu] ); + GL_EnableTextureUnit( tmu, false ); glState.currentTextureTargets[tmu] = glTarget; - pglEnable( glState.currentTextureTargets[tmu] ); + GL_EnableTextureUnit( tmu, true ); } if( glState.currentTextures[tmu] == texture->texnum ) diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index 5d940c87..f53f4561 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -301,6 +301,7 @@ void GL_CleanupAllTextureUnits( void ); void GL_LoadIdentityTexMatrix( void ); void GL_DisableAllTexGens( void ); void GL_SetRenderMode( int mode ); +void GL_EnableTextureUnit( int tmu, qboolean enable ); void GL_TextureTarget( uint target ); void GL_Cull( GLenum cull ); void R_ShowTextures( void );