+ qglDepthMask(mesh_depthmask = mesh->depthmask);CHECKGLERROR
+ }
+}
+
+void GL_DrawRangeElements(int firstvert, int endvert, int indexcount, GLuint *index)
+{
+ unsigned int i, j, in;
+ if (gl_mesh_drawmode.integer == 3 && qglDrawRangeElements == NULL)
+ Cvar_SetValueQuick(&gl_mesh_drawmode, 2);
+
+ if (gl_mesh_drawmode.integer == 3)
+ {
+ // GL 1.2 or GL 1.1 with extension
+ qglDrawRangeElements(GL_TRIANGLES, firstvert, endvert, indexcount, GL_UNSIGNED_INT, index);
+ }
+ else if (gl_mesh_drawmode.integer == 2)
+ {
+ // GL 1.1
+ qglDrawElements(GL_TRIANGLES, indexcount, GL_UNSIGNED_INT, index);
+ }
+ else if (gl_mesh_drawmode.integer == 1)
+ {
+ // GL 1.1
+ // feed it manually using glArrayElement
+ qglBegin(GL_TRIANGLES);
+ for (i = 0;i < indexcount;i++)
+ qglArrayElement(index[i]);
+ qglEnd();
+ }
+ else
+ {
+ // GL 1.1 but not using vertex arrays - 3dfx glquake minigl driver
+ // feed it manually
+ if (gl_mesh_drawmode.integer != 0)
+ Cvar_SetValueQuick(&gl_mesh_drawmode, 0);
+ qglBegin(GL_TRIANGLES);
+ if (r_multitexture.integer)
+ {
+ // the minigl doesn't have this (because it does not have ARB_multitexture)
+ for (i = 0;i < indexcount;i++)
+ {
+ in = index[i];
+ qglColor4ub(buf_bcolor[in].c[0], buf_bcolor[in].c[1], buf_bcolor[in].c[2], buf_bcolor[in].c[3]);
+ for (j = 0;j < backendunits;j++)
+ if (mesh_texture[j])
+ qglMultiTexCoord2f(GL_TEXTURE0_ARB + j, buf_texcoord[j][in].t[0], buf_texcoord[j][in].t[1]);
+ qglVertex3f(buf_vertex[in].v[0], buf_vertex[in].v[1], buf_vertex[in].v[2]);
+ }
+ }
+ else
+ {
+ for (i = 0;i < indexcount;i++)
+ {
+ in = index[i];
+ qglColor4ub(buf_bcolor[in].c[0], buf_bcolor[in].c[1], buf_bcolor[in].c[2], buf_bcolor[in].c[3]);
+ if (mesh_texture[0])
+ qglTexCoord2f(buf_texcoord[0][in].t[0], buf_texcoord[0][in].t[1]);
+ qglVertex3f(buf_vertex[in].v[0], buf_vertex[in].v[1], buf_vertex[in].v[2]);
+ }
+ }
+ qglEnd();