Slightly optimise matrix code to a single pointer lookup
This commit is contained in:
parent
5e2ea81593
commit
9ca7c002be
20
GL/matrix.c
20
GL/matrix.c
@ -19,7 +19,7 @@ static Matrix4x4 __attribute__((aligned(32))) VIEWPORT_MATRIX;
|
|||||||
static Matrix4x4 __attribute__((aligned(32))) PROJECTION_MATRIX;
|
static Matrix4x4 __attribute__((aligned(32))) PROJECTION_MATRIX;
|
||||||
|
|
||||||
static GLenum MATRIX_MODE = GL_MODELVIEW;
|
static GLenum MATRIX_MODE = GL_MODELVIEW;
|
||||||
static GLubyte MATRIX_IDX = 0;
|
static Stack* MATRIX_CUR;
|
||||||
static GLboolean NORMAL_DIRTY, PROJECTION_DIRTY;
|
static GLboolean NORMAL_DIRTY, PROJECTION_DIRTY;
|
||||||
|
|
||||||
static const Matrix4x4 __attribute__((aligned(32))) IDENTITY = {
|
static const Matrix4x4 __attribute__((aligned(32))) IDENTITY = {
|
||||||
@ -54,6 +54,8 @@ void _glInitMatrices() {
|
|||||||
|
|
||||||
MEMCPY4(NORMAL_MATRIX, IDENTITY, sizeof(Matrix4x4));
|
MEMCPY4(NORMAL_MATRIX, IDENTITY, sizeof(Matrix4x4));
|
||||||
|
|
||||||
|
MATRIX_CUR = MATRIX_STACKS + (GL_MODELVIEW & 0xF);
|
||||||
|
|
||||||
const VideoMode* vid_mode = GetVideoMode();
|
const VideoMode* vid_mode = GetVideoMode();
|
||||||
|
|
||||||
glDepthRange(0.0f, 1.0f);
|
glDepthRange(0.0f, 1.0f);
|
||||||
@ -121,30 +123,30 @@ static void OnMatrixChanged() {
|
|||||||
|
|
||||||
void APIENTRY glMatrixMode(GLenum mode) {
|
void APIENTRY glMatrixMode(GLenum mode) {
|
||||||
MATRIX_MODE = mode;
|
MATRIX_MODE = mode;
|
||||||
MATRIX_IDX = mode & 0xF;
|
MATRIX_CUR = MATRIX_STACKS + (mode & 0xF);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY glPushMatrix() {
|
void APIENTRY glPushMatrix() {
|
||||||
void* top = stack_top(MATRIX_STACKS + MATRIX_IDX);
|
void* top = stack_top(MATRIX_CUR);
|
||||||
assert(top);
|
assert(top);
|
||||||
void* ret = stack_push(MATRIX_STACKS + MATRIX_IDX, top);
|
void* ret = stack_push(MATRIX_CUR, top);
|
||||||
(void) ret;
|
(void) ret;
|
||||||
assert(ret);
|
assert(ret);
|
||||||
OnMatrixChanged();
|
OnMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY glPopMatrix() {
|
void APIENTRY glPopMatrix() {
|
||||||
stack_pop(MATRIX_STACKS + MATRIX_IDX);
|
stack_pop(MATRIX_CUR);
|
||||||
OnMatrixChanged();
|
OnMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY glLoadIdentity() {
|
void APIENTRY glLoadIdentity() {
|
||||||
stack_replace(MATRIX_STACKS + MATRIX_IDX, IDENTITY);
|
stack_replace(MATRIX_CUR, IDENTITY);
|
||||||
OnMatrixChanged();
|
OnMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GL_FORCE_INLINE _glMultMatrix(const Matrix4x4* mat) {
|
void GL_FORCE_INLINE _glMultMatrix(const Matrix4x4* mat) {
|
||||||
void* top = stack_top(MATRIX_STACKS + MATRIX_IDX);
|
void* top = stack_top(MATRIX_CUR);
|
||||||
|
|
||||||
UploadMatrix4x4(top);
|
UploadMatrix4x4(top);
|
||||||
MultiplyMatrix4x4(mat);
|
MultiplyMatrix4x4(mat);
|
||||||
@ -220,7 +222,7 @@ void APIENTRY glLoadMatrixf(const GLfloat *m) {
|
|||||||
static Matrix4x4 __attribute__((aligned(32))) TEMP;
|
static Matrix4x4 __attribute__((aligned(32))) TEMP;
|
||||||
|
|
||||||
memcpy(TEMP, m, sizeof(float) * 16);
|
memcpy(TEMP, m, sizeof(float) * 16);
|
||||||
stack_replace(MATRIX_STACKS + MATRIX_IDX, TEMP);
|
stack_replace(MATRIX_CUR, TEMP);
|
||||||
OnMatrixChanged();
|
OnMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +311,7 @@ void glLoadTransposeMatrixf(const GLfloat *m) {
|
|||||||
TEMP[M14] = m[11];
|
TEMP[M14] = m[11];
|
||||||
TEMP[M15] = m[15];
|
TEMP[M15] = m[15];
|
||||||
|
|
||||||
stack_replace(MATRIX_STACKS + MATRIX_IDX, TEMP);
|
stack_replace(MATRIX_CUR, TEMP);
|
||||||
OnMatrixChanged();
|
OnMatrixChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -485,12 +485,6 @@ void _glGPUStateMarkDirty();
|
|||||||
#define SCENE_AMBIENT_MASK 16
|
#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 _glTnlLoadMatrix(void);
|
||||||
void _glTnlApplyEffects(SubmissionTarget* target);
|
void _glTnlApplyEffects(SubmissionTarget* target);
|
||||||
|
|
||||||
|
|||||||
@ -978,6 +978,7 @@ void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) {
|
|||||||
case GL_MODELVIEW_MATRIX:
|
case GL_MODELVIEW_MATRIX:
|
||||||
MEMCPY4(params, _glGetModelViewMatrix(), sizeof(float) * 16);
|
MEMCPY4(params, _glGetModelViewMatrix(), sizeof(float) * 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_POLYGON_OFFSET_FACTOR:
|
case GL_POLYGON_OFFSET_FACTOR:
|
||||||
*params = GPUState.offset_factor;
|
*params = GPUState.offset_factor;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user