From 9ca7c002bed528ab50149cadd5e7fb0cccb2ff85 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 22 Feb 2025 08:17:56 +1100 Subject: [PATCH] Slightly optimise matrix code to a single pointer lookup --- GL/matrix.c | 20 +++++++++++--------- GL/private.h | 6 ------ GL/state.c | 1 + 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/GL/matrix.c b/GL/matrix.c index f71a624..fdb9df2 100644 --- a/GL/matrix.c +++ b/GL/matrix.c @@ -19,7 +19,7 @@ static Matrix4x4 __attribute__((aligned(32))) VIEWPORT_MATRIX; static Matrix4x4 __attribute__((aligned(32))) PROJECTION_MATRIX; static GLenum MATRIX_MODE = GL_MODELVIEW; -static GLubyte MATRIX_IDX = 0; +static Stack* MATRIX_CUR; static GLboolean NORMAL_DIRTY, PROJECTION_DIRTY; static const Matrix4x4 __attribute__((aligned(32))) IDENTITY = { @@ -54,6 +54,8 @@ void _glInitMatrices() { MEMCPY4(NORMAL_MATRIX, IDENTITY, sizeof(Matrix4x4)); + MATRIX_CUR = MATRIX_STACKS + (GL_MODELVIEW & 0xF); + const VideoMode* vid_mode = GetVideoMode(); glDepthRange(0.0f, 1.0f); @@ -121,30 +123,30 @@ static void OnMatrixChanged() { void APIENTRY glMatrixMode(GLenum mode) { MATRIX_MODE = mode; - MATRIX_IDX = mode & 0xF; + MATRIX_CUR = MATRIX_STACKS + (mode & 0xF); } void APIENTRY glPushMatrix() { - void* top = stack_top(MATRIX_STACKS + MATRIX_IDX); + void* top = stack_top(MATRIX_CUR); assert(top); - void* ret = stack_push(MATRIX_STACKS + MATRIX_IDX, top); + void* ret = stack_push(MATRIX_CUR, top); (void) ret; assert(ret); OnMatrixChanged(); } void APIENTRY glPopMatrix() { - stack_pop(MATRIX_STACKS + MATRIX_IDX); + stack_pop(MATRIX_CUR); OnMatrixChanged(); } void APIENTRY glLoadIdentity() { - stack_replace(MATRIX_STACKS + MATRIX_IDX, IDENTITY); + stack_replace(MATRIX_CUR, IDENTITY); OnMatrixChanged(); } void GL_FORCE_INLINE _glMultMatrix(const Matrix4x4* mat) { - void* top = stack_top(MATRIX_STACKS + MATRIX_IDX); + void* top = stack_top(MATRIX_CUR); UploadMatrix4x4(top); MultiplyMatrix4x4(mat); @@ -220,7 +222,7 @@ void APIENTRY glLoadMatrixf(const GLfloat *m) { static Matrix4x4 __attribute__((aligned(32))) TEMP; memcpy(TEMP, m, sizeof(float) * 16); - stack_replace(MATRIX_STACKS + MATRIX_IDX, TEMP); + stack_replace(MATRIX_CUR, TEMP); OnMatrixChanged(); } @@ -309,7 +311,7 @@ void glLoadTransposeMatrixf(const GLfloat *m) { TEMP[M14] = m[11]; TEMP[M15] = m[15]; - stack_replace(MATRIX_STACKS + MATRIX_IDX, TEMP); + stack_replace(MATRIX_CUR, TEMP); OnMatrixChanged(); } diff --git a/GL/private.h b/GL/private.h index 032e337..8c32fc2 100644 --- a/GL/private.h +++ b/GL/private.h @@ -485,12 +485,6 @@ void _glGPUStateMarkDirty(); #define SCENE_AMBIENT_MASK 16 -#define TNL_EFFECT_NONE 0x00 -#define TNL_EFFECT_VIEW_SPACE 0x01 -typedef void (*TnlEffect)(SubmissionTarget* target); - -void _glTnlAddEffect(GLint flags, TnlEffect func); -void _glTnlRemoveEffect(TnlEffect func); void _glTnlLoadMatrix(void); void _glTnlApplyEffects(SubmissionTarget* target); diff --git a/GL/state.c b/GL/state.c index e247624..6468a3b 100644 --- a/GL/state.c +++ b/GL/state.c @@ -978,6 +978,7 @@ void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) { case GL_MODELVIEW_MATRIX: MEMCPY4(params, _glGetModelViewMatrix(), sizeof(float) * 16); break; + case GL_POLYGON_OFFSET_FACTOR: *params = GPUState.offset_factor; break;