]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_backend.c
Reworked v_isometric code significantly, it now defaults to a proper isometric view...
[xonotic/darkplaces.git] / gl_backend.c
index 3c497f4887bbcdcc31e3f4bb96c8d1c480cbcc92..d1455af6cd1d74a9bd84015d8cb0b9869604b459 100644 (file)
@@ -130,7 +130,7 @@ int gl_maxdrawrangeelementsvertices;
 int gl_maxdrawrangeelementsindices;
 
 #ifdef DEBUGGL
-int errornumber = 0;
+int gl_errornumber = 0;
 
 void GL_PrintError(int errornumber, const char *filename, int linenumber)
 {
@@ -914,6 +914,48 @@ void R_Viewport_InitOrtho(r_viewport_t *v, const matrix4x4_t *cameramatrix, int
 #endif
 }
 
+void R_Viewport_InitOrtho3D(r_viewport_t *v, const matrix4x4_t *cameramatrix, int x, int y, int width, int height, float frustumx, float frustumy, float nearclip, float farclip, const float *nearplane)
+{
+       matrix4x4_t tempmatrix, basematrix;
+       float m[16];
+       memset(v, 0, sizeof(*v));
+
+       v->type = R_VIEWPORTTYPE_PERSPECTIVE;
+       v->cameramatrix = *cameramatrix;
+       v->x = x;
+       v->y = y;
+       v->z = 0;
+       v->width = width;
+       v->height = height;
+       v->depth = 1;
+       memset(m, 0, sizeof(m));
+       m[0]  = 1.0 / frustumx;
+       m[5]  = 1.0 / frustumy;
+       m[10] = -2 / (farclip - nearclip);
+       m[14] = -(farclip + nearclip) / (farclip - nearclip);
+       m[15] = 1;
+       v->screentodepth[0] = -farclip / (farclip - nearclip);
+       v->screentodepth[1] = farclip * nearclip / (farclip - nearclip);
+
+       Matrix4x4_Invert_Full(&tempmatrix, &v->cameramatrix);
+       Matrix4x4_CreateRotate(&basematrix, -90, 1, 0, 0);
+       Matrix4x4_ConcatRotate(&basematrix, 90, 0, 0, 1);
+       Matrix4x4_Concat(&v->viewmatrix, &basematrix, &tempmatrix);
+
+       if (nearplane)
+               R_Viewport_ApplyNearClipPlaneFloatGL(v, m, nearplane[0], nearplane[1], nearplane[2], nearplane[3]);
+
+       if(v_flipped.integer)
+       {
+               m[0] = -m[0];
+               m[4] = -m[4];
+               m[8] = -m[8];
+               m[12] = -m[12];
+       }
+
+       Matrix4x4_FromArrayFloatGL(&v->projectmatrix, m);
+}
+
 void R_Viewport_InitPerspective(r_viewport_t *v, const matrix4x4_t *cameramatrix, int x, int y, int width, int height, float frustumx, float frustumy, float nearclip, float farclip, const float *nearplane)
 {
        matrix4x4_t tempmatrix, basematrix;
@@ -1106,15 +1148,15 @@ void R_Viewport_InitCubeSideView(r_viewport_t *v, const matrix4x4_t *cameramatri
        Matrix4x4_FromArrayFloatGL(&v->projectmatrix, m);
 }
 
-void R_Viewport_InitRectSideView(r_viewport_t *v, const matrix4x4_t *cameramatrix, int side, int size, int border, float nearclip, float farclip, const float *nearplane)
+void R_Viewport_InitRectSideView(r_viewport_t *v, const matrix4x4_t *cameramatrix, int side, int size, int border, float nearclip, float farclip, const float *nearplane, int offsetx, int offsety)
 {
        matrix4x4_t tempmatrix, basematrix;
        float m[16];
        memset(v, 0, sizeof(*v));
        v->type = R_VIEWPORTTYPE_PERSPECTIVECUBESIDE;
        v->cameramatrix = *cameramatrix;
-       v->x = (side & 1) * size;
-       v->y = (side >> 1) * size;
+       v->x = offsetx + (side & 1) * size;
+       v->y = offsety + (side >> 1) * size;
        v->width = size;
        v->height = size;
        v->depth = 1;
@@ -3873,8 +3915,8 @@ void R_Mesh_TexBind(unsigned int unitnum, rtexture_t *tex)
        int tex2d, tex3d, texcubemap, texnum;
        if (unitnum >= vid.teximageunits)
                return;
-//     if (unit->texture == tex)
-//             return;
+       if (unit->texture == tex)
+               return;
        switch(vid.renderpath)
        {
        case RENDERPATH_GL20: