]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_backend.c
prevent creation of a cvar named "", as that breaks cvar()
[xonotic/darkplaces.git] / gl_backend.c
index e4dc975586631741c790c9fafc1c4b1fc5725ff3..955ac372631ca3b989dc8dae99e5f6e25480bd3d 100644 (file)
@@ -9,7 +9,8 @@ cvar_t gl_mesh_prefer_short_elements = {0, "gl_mesh_prefer_short_elements", "1",
 cvar_t gl_paranoid = {0, "gl_paranoid", "0", "enables OpenGL error checking and other tests"};
 cvar_t gl_printcheckerror = {0, "gl_printcheckerror", "0", "prints all OpenGL error checks, useful to identify location of driver crashes"};
 
-cvar_t r_render = {0, "r_render", "1", "enables rendering calls (you want this on!)"};
+cvar_t r_render = {0, "r_render", "1", "enables rendering 3D views (you want this on!)"};
+cvar_t r_renderview = {0, "r_renderview", "1", "enables rendering 3D views (you want this on!)"};
 cvar_t r_waterwarp = {CVAR_SAVE, "r_waterwarp", "1", "warp view while underwater"};
 cvar_t gl_polyblend = {CVAR_SAVE, "gl_polyblend", "1", "tints view while underwater, hurt, etc"};
 cvar_t gl_dither = {CVAR_SAVE, "gl_dither", "1", "enables OpenGL dithering (16bit looks bad with this off)"};
@@ -142,8 +143,10 @@ for (y = 0;y < rows - 1;y++)
 }
 */
 
-unsigned short polygonelements[(POLYGONELEMENTS_MAXPOINTS-2)*3];
-unsigned short quadelements[QUADELEMENTS_MAXQUADS*6];
+int polygonelement3i[(POLYGONELEMENTS_MAXPOINTS-2)*3];
+unsigned short polygonelement3s[(POLYGONELEMENTS_MAXPOINTS-2)*3];
+int quadelement3i[QUADELEMENTS_MAXQUADS*6];
+unsigned short quadelement3s[QUADELEMENTS_MAXQUADS*6];
 
 void GL_Backend_AllocArrays(void)
 {
@@ -235,22 +238,28 @@ void gl_backend_init(void)
 
        for (i = 0;i < POLYGONELEMENTS_MAXPOINTS - 2;i++)
        {
-               polygonelements[i * 3 + 0] = 0;
-               polygonelements[i * 3 + 1] = i + 1;
-               polygonelements[i * 3 + 2] = i + 2;
+               polygonelement3s[i * 3 + 0] = 0;
+               polygonelement3s[i * 3 + 1] = i + 1;
+               polygonelement3s[i * 3 + 2] = i + 2;
        }
        // elements for rendering a series of quads as triangles
        for (i = 0;i < QUADELEMENTS_MAXQUADS;i++)
        {
-               quadelements[i * 6 + 0] = i * 4;
-               quadelements[i * 6 + 1] = i * 4 + 1;
-               quadelements[i * 6 + 2] = i * 4 + 2;
-               quadelements[i * 6 + 3] = i * 4;
-               quadelements[i * 6 + 4] = i * 4 + 2;
-               quadelements[i * 6 + 5] = i * 4 + 3;
+               quadelement3s[i * 6 + 0] = i * 4;
+               quadelement3s[i * 6 + 1] = i * 4 + 1;
+               quadelement3s[i * 6 + 2] = i * 4 + 2;
+               quadelement3s[i * 6 + 3] = i * 4;
+               quadelement3s[i * 6 + 4] = i * 4 + 2;
+               quadelement3s[i * 6 + 5] = i * 4 + 3;
        }
 
+       for (i = 0;i < (POLYGONELEMENTS_MAXPOINTS - 2)*3;i++)
+               polygonelement3i[i] = polygonelement3s[i];
+       for (i = 0;i < QUADELEMENTS_MAXQUADS*3;i++)
+               quadelement3i[i] = quadelement3s[i];
+
        Cvar_RegisterVariable(&r_render);
+       Cvar_RegisterVariable(&r_renderview);
        Cvar_RegisterVariable(&r_waterwarp);
        Cvar_RegisterVariable(&gl_polyblend);
        Cvar_RegisterVariable(&v_flipped);
@@ -260,9 +269,6 @@ void gl_backend_init(void)
        Cvar_RegisterVariable(&gl_vbo);
        Cvar_RegisterVariable(&gl_paranoid);
        Cvar_RegisterVariable(&gl_printcheckerror);
-#ifdef NORENDER
-       Cvar_SetValue("r_render", 0);
-#endif
 
        Cvar_RegisterVariable(&gl_mesh_drawrangeelements);
        Cvar_RegisterVariable(&gl_mesh_testarrayelement);
@@ -547,8 +553,6 @@ void R_Viewport_InitCubeSideView(r_viewport_t *v, const matrix4x4_t *cameramatri
 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)
 {
        matrix4x4_t tempmatrix, basematrix;
-       if (border > size - 2)
-               border = size - 2;
        memset(v, 0, sizeof(*v));
        v->type = R_VIEWPORTTYPE_PERSPECTIVECUBESIDE;
        v->cameramatrix = *cameramatrix;
@@ -1044,7 +1048,7 @@ void GL_LockArrays(int first, int count)
                        qglUnlockArraysEXT();
                        CHECKGLERROR
                }
-               if (count && gl_supportslockarrays && gl_lockarrays.integer && r_render.integer)
+               if (count && gl_supportslockarrays && gl_lockarrays.integer)
                {
                        gl_state.lockrange_first = first;
                        gl_state.lockrange_count = count;
@@ -1291,7 +1295,7 @@ void R_Mesh_Draw(int firstvertex, int numvertices, int firsttriangle, int numtri
                }
                CHECKGLERROR
        }
-       if (r_render.integer)
+       if (r_render.integer || r_refdef.draw2dstage)
        {
                CHECKGLERROR
                if (gl_mesh_testmanualfeeding.integer)
@@ -1591,7 +1595,7 @@ void R_Mesh_Matrix(const matrix4x4_t *matrix)
 
 void R_Mesh_VertexPointer(const float *vertex3f, int bufferobject, size_t bufferoffset)
 {
-       if (!gl_vbo.integer)
+       if (!gl_vbo.integer || gl_mesh_testarrayelement.integer)
                bufferobject = 0;
        if (gl_state.pointer_vertex != vertex3f || gl_state.pointer_vertex_buffer != bufferobject || gl_state.pointer_vertex_offset != bufferoffset)
        {
@@ -1611,7 +1615,7 @@ void R_Mesh_ColorPointer(const float *color4f, int bufferobject, size_t bufferof
        // means that a valid vbo may be supplied even if there is no color array.
        if (color4f)
        {
-               if (!gl_vbo.integer)
+               if (!gl_vbo.integer || gl_mesh_testarrayelement.integer)
                        bufferobject = 0;
                // caller wants color array enabled
                if (!gl_state.pointer_color_enabled)
@@ -1653,7 +1657,7 @@ void R_Mesh_TexCoordPointer(unsigned int unitnum, unsigned int numcomponents, co
        // that involve a valid bufferobject also supply a texcoord array
        if (texcoord)
        {
-               if (!gl_vbo.integer)
+               if (!gl_vbo.integer || gl_mesh_testarrayelement.integer)
                        bufferobject = 0;
                // texture array unit is enabled, enable the array
                if (!unit->arrayenabled)