static matrix4x4_t backend_viewmatrix;
static matrix4x4_t backend_modelmatrix;
static matrix4x4_t backend_modelviewmatrix;
-static matrix4x4_t backend_glmodelviewmatrix;
static matrix4x4_t backend_projectmatrix;
static unsigned int backendunits, backendimageunits, backendarrayunits, backendactive;
// set view pyramid
qglFrustum(-frustumx * zNear, frustumx * zNear, -frustumy * zNear, frustumy * zNear, zNear, zFar);CHECKGLERROR
qglGetDoublev(GL_PROJECTION_MATRIX, m);CHECKGLERROR
- backend_projectmatrix.m[0][0] = m[0];
- backend_projectmatrix.m[1][0] = m[1];
- backend_projectmatrix.m[2][0] = m[2];
- backend_projectmatrix.m[3][0] = m[3];
- backend_projectmatrix.m[0][1] = m[4];
- backend_projectmatrix.m[1][1] = m[5];
- backend_projectmatrix.m[2][1] = m[6];
- backend_projectmatrix.m[3][1] = m[7];
- backend_projectmatrix.m[0][2] = m[8];
- backend_projectmatrix.m[1][2] = m[9];
- backend_projectmatrix.m[2][2] = m[10];
- backend_projectmatrix.m[3][2] = m[11];
- backend_projectmatrix.m[0][3] = m[12];
- backend_projectmatrix.m[1][3] = m[13];
- backend_projectmatrix.m[2][3] = m[14];
- backend_projectmatrix.m[3][3] = m[15];
+ Matrix4x4_FromArrayDoubleGL(&backend_projectmatrix, m);
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
GL_SetupView_Orientation_Identity();
CHECKGLERROR
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
GL_SetupView_Orientation_Identity();
CHECKGLERROR
- backend_projectmatrix.m[0][0] = m[0];
- backend_projectmatrix.m[1][0] = m[1];
- backend_projectmatrix.m[2][0] = m[2];
- backend_projectmatrix.m[3][0] = m[3];
- backend_projectmatrix.m[0][1] = m[4];
- backend_projectmatrix.m[1][1] = m[5];
- backend_projectmatrix.m[2][1] = m[6];
- backend_projectmatrix.m[3][1] = m[7];
- backend_projectmatrix.m[0][2] = m[8];
- backend_projectmatrix.m[1][2] = m[9];
- backend_projectmatrix.m[2][2] = m[10];
- backend_projectmatrix.m[3][2] = m[11];
- backend_projectmatrix.m[0][3] = m[12];
- backend_projectmatrix.m[1][3] = m[13];
- backend_projectmatrix.m[2][3] = m[14];
- backend_projectmatrix.m[3][3] = m[15];
+ Matrix4x4_FromArrayDoubleGL(&backend_projectmatrix, m);
}
void GL_SetupView_Mode_Ortho (double x1, double y1, double x2, double y2, double zNear, double zFar)
qglLoadIdentity();CHECKGLERROR
qglOrtho(x1, x2, y2, y1, zNear, zFar);CHECKGLERROR
qglGetDoublev(GL_PROJECTION_MATRIX, m);CHECKGLERROR
- backend_projectmatrix.m[0][0] = m[0];
- backend_projectmatrix.m[1][0] = m[1];
- backend_projectmatrix.m[2][0] = m[2];
- backend_projectmatrix.m[3][0] = m[3];
- backend_projectmatrix.m[0][1] = m[4];
- backend_projectmatrix.m[1][1] = m[5];
- backend_projectmatrix.m[2][1] = m[6];
- backend_projectmatrix.m[3][1] = m[7];
- backend_projectmatrix.m[0][2] = m[8];
- backend_projectmatrix.m[1][2] = m[9];
- backend_projectmatrix.m[2][2] = m[10];
- backend_projectmatrix.m[3][2] = m[11];
- backend_projectmatrix.m[0][3] = m[12];
- backend_projectmatrix.m[1][3] = m[13];
- backend_projectmatrix.m[2][3] = m[14];
- backend_projectmatrix.m[3][3] = m[15];
+ Matrix4x4_FromArrayDoubleGL(&backend_projectmatrix, m);
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
GL_SetupView_Orientation_Identity();
CHECKGLERROR
static struct gl_state_s
{
+ int cullface;
+ int cullfaceenable;
int blendfunc1;
int blendfunc2;
int blend;
gl_state.lockrange_count = 0;
gl_state.pointer_vertex = NULL;
gl_state.pointer_color = NULL;
+ gl_state.cullface = GL_FRONT; // quake is backwards, this culls back faces
+ gl_state.cullfaceenable = true;
CHECKGLERROR
qglDisable(GL_ALPHA_TEST);CHECKGLERROR
qglBlendFunc(gl_state.blendfunc1, gl_state.blendfunc2);CHECKGLERROR
qglDisable(GL_BLEND);CHECKGLERROR
- qglCullFace(GL_FRONT);CHECKGLERROR
+ qglCullFace(gl_state.cullface);CHECKGLERROR
qglEnable(GL_CULL_FACE);CHECKGLERROR
qglDepthFunc(GL_LEQUAL);CHECKGLERROR
qglEnable(GL_DEPTH_TEST);CHECKGLERROR
}
}
+void GL_CullFace(int state)
+{
+ if (gl_state.cullface != state)
+ {
+ CHECKGLERROR
+ if (state != GL_NONE)
+ {
+ if (!gl_state.cullfaceenable)
+ {
+ gl_state.cullfaceenable = true;
+ qglEnable(GL_CULL_FACE);CHECKGLERROR
+ }
+ if (gl_state.cullface != state)
+ {
+ gl_state.cullface = state;
+ qglCullFace(state);CHECKGLERROR
+ }
+ }
+ else
+ {
+ if (gl_state.cullfaceenable)
+ {
+ gl_state.cullfaceenable = false;
+ qglDisable(GL_CULL_FACE);CHECKGLERROR
+ }
+ }
+ }
+}
+
void GL_AlphaTest(int state)
{
if (gl_state.alphatest != state)
{
if (memcmp(matrix, &backend_modelmatrix, sizeof(matrix4x4_t)))
{
+ double glmatrix[16];
backend_modelmatrix = *matrix;
Matrix4x4_Concat(&backend_modelviewmatrix, &backend_viewmatrix, matrix);
- Matrix4x4_Transpose(&backend_glmodelviewmatrix, &backend_modelviewmatrix);
+ Matrix4x4_ToArrayDoubleGL(&backend_modelviewmatrix, glmatrix);
CHECKGLERROR
- qglLoadMatrixf(&backend_glmodelviewmatrix.m[0][0]);CHECKGLERROR
+ qglLoadMatrixd(glmatrix);CHECKGLERROR
}
}
// texmatrix specified, check if it is different
if (!unit->texmatrixenabled || memcmp(&unit->matrix, matrix, sizeof(matrix4x4_t)))
{
- matrix4x4_t tempmatrix;
+ double glmatrix[16];
unit->texmatrixenabled = true;
unit->matrix = *matrix;
CHECKGLERROR
- Matrix4x4_Transpose(&tempmatrix, &unit->matrix);
+ Matrix4x4_ToArrayDoubleGL(&unit->matrix, glmatrix);
qglMatrixMode(GL_TEXTURE);CHECKGLERROR
GL_ActiveTexture(unitnum);
- qglLoadMatrixf(&tempmatrix.m[0][0]);CHECKGLERROR
+ qglLoadMatrixd(glmatrix);CHECKGLERROR
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
}
}