}
#endif
-#define BACKENDACTIVECHECK if (!backendactive) Sys_Error(__func__ " called when backend is not active\n");
+#define BACKENDACTIVECHECK if (!backendactive) Sys_Error("GL backend function called when backend is not active\n");
float r_mesh_farclip;
int mesh_maxtris;
int mesh_maxverts; // always mesh_maxtris * 3
-static matrix4x4_t backendmatrix;
+static matrix4x4_t backend_viewmatrix;
+static matrix4x4_t backend_modelmatrix;
+static matrix4x4_t backend_modelviewmatrix;
+static matrix4x4_t backend_glmodelviewmatrix;
static int backendunits, backendactive;
static qbyte *varray_bcolor;
qglFrustum(-xmax, xmax, -ymax, ymax, zNear, zFar);CHECKGLERROR
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
- qglLoadIdentity ();CHECKGLERROR
+ Matrix4x4_CreateRotate(&backend_viewmatrix, -90, 1, 0, 0);
+ Matrix4x4_ConcatRotate(&backend_viewmatrix, 90, 0, 0, 1);
+ Matrix4x4_ConcatRotate(&backend_viewmatrix, -r_refdef.viewangles[2], 1, 0, 0);
+ Matrix4x4_ConcatRotate(&backend_viewmatrix, -r_refdef.viewangles[0], 0, 1, 0);
+ Matrix4x4_ConcatRotate(&backend_viewmatrix, -r_refdef.viewangles[1], 0, 0, 1);
+ Matrix4x4_ConcatTranslate(&backend_viewmatrix, -r_refdef.vieworg[0], -r_refdef.vieworg[1], -r_refdef.vieworg[2]);
+ //Con_Printf("Our Matrix:\n");
+ //Matrix4x4_Print(&backend_viewmatrix);
+
+ //Matrix4x4_Transpose(&backend_glmodelviewmatrix, &backend_viewmatrix);
+ //qglLoadMatrixf(&backend_glmodelviewmatrix.m[0][0]);CHECKGLERROR
+ memset(&backend_modelmatrix, 0, sizeof(backend_modelmatrix));
+
+ /*
// put Z going up
+ qglLoadIdentity ();CHECKGLERROR
qglRotatef (-90, 1, 0, 0);CHECKGLERROR
qglRotatef (90, 0, 0, 1);CHECKGLERROR
// camera rotation
qglRotatef (-r_refdef.viewangles[1], 0, 0, 1);CHECKGLERROR
// camera location
qglTranslatef (-r_refdef.vieworg[0], -r_refdef.vieworg[1], -r_refdef.vieworg[2]);CHECKGLERROR
+ qglGetFloatv (GL_MODELVIEW_MATRIX, &gl_viewmatrix.m[0][0]);
+ Matrix4x4_Transpose(&backend_viewmatrix, &gl_viewmatrix);
+ Con_Printf("GL Matrix:\n");
+ Matrix4x4_Print(&backend_viewmatrix);
+ */
}
static struct
}
}
+/*
void GL_TransformVertices(int numverts)
{
int i;
v[2] = tempv[0] * m[8] + tempv[1] * m[9] + tempv[2] * m[10] + m[11];
}
}
+*/
void GL_DrawRangeElements(int firstvert, int endvert, int indexcount, GLuint *index)
{
// drawmode 0 always uses byte colors
if (!gl_mesh_floatcolors.integer || gl_mesh_drawmode.integer <= 0)
GL_ConvertColorsFloatToByte(numverts);
- GL_TransformVertices(numverts);
+ //GL_TransformVertices(numverts);
if (!r_render.integer)
return;
GL_DrawRangeElements(0, numverts, numtriangles * 3, varray_element);
GL_SetupTextureState();
}
- backendmatrix = m->matrix; // this copies the struct
+ //backendmatrix = m->matrix; // this copies the struct
+ if (memcmp(&m->matrix, &backend_modelmatrix, sizeof(matrix4x4_t)))
+ {
+ backend_modelmatrix = m->matrix;
+ Matrix4x4_Concat(&backend_modelviewmatrix, &backend_viewmatrix, &m->matrix);
+ Matrix4x4_Transpose(&backend_glmodelviewmatrix, &backend_modelviewmatrix);
+ qglLoadMatrixf(&backend_glmodelviewmatrix.m[0][0]);
+ }
overbright = false;
scaler = 1;