Slightly optimise matrix code to a single pointer lookup

This commit is contained in:
UnknownShadow200 2025-02-22 08:17:56 +11:00
parent 5e2ea81593
commit 9ca7c002be
3 changed files with 12 additions and 15 deletions

View File

@ -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();
}

View File

@ -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);

View File

@ -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;