From f2c080e736eed034edb316b483dbb69c1b31c518 Mon Sep 17 00:00:00 2001 From: mittorn Date: Mon, 30 Oct 2023 22:24:13 +0300 Subject: [PATCH] gl2shim: fix broken matrix update when fog attribute enabled (32 bit shift overflow) --- common/xash3d_types.h | 1 + ref/gl/gl2_shim/gl2_shim.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/xash3d_types.h b/common/xash3d_types.h index 33801433..4c2c05d5 100644 --- a/common/xash3d_types.h +++ b/common/xash3d_types.h @@ -57,6 +57,7 @@ typedef uint64_t longtime_t; #define MAX_USERMSG_LENGTH 2048 // don't modify it's relies on a client-side definitions #define BIT( n ) ( 1U << ( n )) +#define BIT64( n ) ( 1ULL << ( n )) #define GAMMA ( 2.2f ) // Valve Software gamma #define INVGAMMA ( 1.0f / 2.2f ) // back to 1.0 #define TEXGAMMA ( 0.9f ) // compensate dim textures diff --git a/ref/gl/gl2_shim/gl2_shim.c b/ref/gl/gl2_shim/gl2_shim.c index 904f0d8e..63b2c9e1 100644 --- a/ref/gl/gl2_shim/gl2_shim.c +++ b/ref/gl/gl2_shim/gl2_shim.c @@ -1309,9 +1309,9 @@ static void GL2_Mul4x4( const GLfloat *in0, const GLfloat *in1, GLfloat *out ) static void GL2_UpdateMVP( gl2wrap_prog_t *prog ) { // use bitset to determine if need update matrix for this prog - if( FBitSet( gl2wrap_matrix.update, BIT( prog->flags ))) + if( FBitSet( gl2wrap_matrix.update, BIT64( prog->flags ))) { - ClearBits( gl2wrap_matrix.update, BIT( prog->flags )); + ClearBits( gl2wrap_matrix.update, BIT64( prog->flags )); GL2_Mul4x4( gl2wrap_matrix.mv, gl2wrap_matrix.pr, gl2wrap_matrix.mvp ); pglUniformMatrix4fvARB( prog->uMVP, 1, false, (void *)gl2wrap_matrix.mvp ); }