From: havoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Tue, 5 Jan 2010 09:33:35 +0000 (+0000)
Subject: remove support for GL_EXT_compiled_vertex_array extension
X-Git-Tag: xonotic-v0.1.0preview~826
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=961b56da4b103798079d0df9ac3d155ac7139408;p=xonotic%2Fdarkplaces.git

remove support for GL_EXT_compiled_vertex_array extension

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9782 d7cf8633-e32d-0410-b094-e92efae38249
::stable-branch::merge=bc9063582a5b12986a3f70b4eaa9ffaf1568f735
---

diff --git a/cl_particles.c b/cl_particles.c
index 7b5f6635..5229124a 100644
--- a/cl_particles.c
+++ b/cl_particles.c
@@ -2281,9 +2281,7 @@ void R_DrawDecal_TransparentCallback(const entity_render_t *ent, const rtlight_t
 	// (this assumes they all use one particle font texture!)
 	GL_BlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
 	R_SetupShader_Generic(particletexture[63].texture, NULL, GL_MODULATE, 1);
-	GL_LockArrays(0, numsurfaces*4);
 	R_Mesh_Draw(0, numsurfaces * 4, 0, numsurfaces * 2, NULL, particle_elements, 0, 0);
-	GL_LockArrays(0, 0);
 }
 
 void R_DrawDecals (void)
@@ -2547,7 +2545,6 @@ void R_DrawParticle_TransparentCallback(const entity_render_t *ent, const rtligh
 	// now render batches of particles based on blendmode and texture
 	blendmode = PBLEND_INVALID;
 	texture = NULL;
-	GL_LockArrays(0, numsurfaces*4);
 	batchstart = 0;
 	batchcount = 0;
 	for (surfacelistindex = 0;surfacelistindex < numsurfaces;)
@@ -2589,7 +2586,6 @@ void R_DrawParticle_TransparentCallback(const entity_render_t *ent, const rtligh
 		batchcount = surfacelistindex - batchstart;
 		R_Mesh_Draw(batchstart * 4, batchcount * 4, batchstart * 2, batchcount * 2, NULL, particle_elements, 0, 0);
 	}
-	GL_LockArrays(0, 0);
 }
 
 void R_DrawParticles (void)
diff --git a/gl_backend.c b/gl_backend.c
index af648a94..737df7ef 100644
--- a/gl_backend.c
+++ b/gl_backend.c
@@ -14,8 +14,6 @@ cvar_t r_renderview = {0, "r_renderview", "1", "enables rendering 3D views (you
 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)"};
-cvar_t gl_lockarrays = {0, "gl_lockarrays", "0", "enables use of glLockArraysEXT, may cause glitches with some broken drivers, and may be slower than normal"};
-cvar_t gl_lockarrays_minimumvertices = {0, "gl_lockarrays_minimumvertices", "1", "minimum number of vertices required for use of glLockArraysEXT, setting this too low may reduce performance"};
 cvar_t gl_vbo = {CVAR_SAVE, "gl_vbo", "3", "make use of GL_ARB_vertex_buffer_object extension to store static geometry in video memory for faster rendering, 0 disables VBO allocation or use, 1 enables VBOs for vertex and triangle data, 2 only for vertex data, 3 for vertex data and triangle data of simple meshes (ones with only one surface)"};
 cvar_t gl_fbo = {CVAR_SAVE, "gl_fbo", "1", "make use of GL_ARB_framebuffer_object extension to enable shadowmaps and other features using pixel formats different from the framebuffer"};
 
@@ -282,8 +280,6 @@ void gl_backend_init(void)
 	Cvar_RegisterVariable(&gl_polyblend);
 	Cvar_RegisterVariable(&v_flipped);
 	Cvar_RegisterVariable(&gl_dither);
-	Cvar_RegisterVariable(&gl_lockarrays);
-	Cvar_RegisterVariable(&gl_lockarrays_minimumvertices);
 	Cvar_RegisterVariable(&gl_vbo);
 	Cvar_RegisterVariable(&gl_paranoid);
 	Cvar_RegisterVariable(&gl_printcheckerror);
@@ -997,33 +993,6 @@ void GL_Color(float cr, float cg, float cb, float ca)
 	}
 }
 
-void GL_LockArrays(int first, int count)
-{
-	if (count < gl_lockarrays_minimumvertices.integer)
-	{
-		first = 0;
-		count = 0;
-	}
-	if (gl_state.lockrange_count != count || gl_state.lockrange_first != first)
-	{
-		if (gl_state.lockrange_count)
-		{
-			gl_state.lockrange_count = 0;
-			CHECKGLERROR
-			qglUnlockArraysEXT();
-			CHECKGLERROR
-		}
-		if (count && vid.support.ext_compiled_vertex_array && gl_lockarrays.integer)
-		{
-			gl_state.lockrange_first = first;
-			gl_state.lockrange_count = count;
-			CHECKGLERROR
-			qglLockArraysEXT(first, count);
-			CHECKGLERROR
-		}
-	}
-}
-
 void GL_Scissor (int x, int y, int width, int height)
 {
 	CHECKGLERROR
diff --git a/gl_backend.h b/gl_backend.h
index 72f2bc46..cea789ce 100644
--- a/gl_backend.h
+++ b/gl_backend.h
@@ -37,7 +37,6 @@ void GL_CullFace(int state);
 void GL_AlphaTest(int state);
 void GL_ColorMask(int r, int g, int b, int a);
 void GL_Color(float cr, float cg, float cb, float ca);
-void GL_LockArrays(int first, int count);
 void GL_ActiveTexture(unsigned int num);
 void GL_ClientActiveTexture(unsigned int num);
 void GL_Scissor(int x, int y, int width, int height);
@@ -47,8 +46,6 @@ void GL_Clear(int mask);
 unsigned int GL_Backend_CompileProgram(int vertexstrings_count, const char **vertexstrings_list, int geometrystrings_count, const char **geometrystrings_list, int fragmentstrings_count, const char **fragmentstrings_list);
 void GL_Backend_FreeProgram(unsigned int prog);
 
-extern cvar_t gl_lockarrays;
-extern cvar_t gl_mesh_copyarrays;
 extern cvar_t gl_paranoid;
 extern cvar_t gl_printcheckerror;
 
diff --git a/gl_draw.c b/gl_draw.c
index a18e59cd..da593501 100644
--- a/gl_draw.c
+++ b/gl_draw.c
@@ -1467,9 +1467,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma
 						if (batchcount)
 						{
 							// switching from freetype to non-freetype rendering
-							GL_LockArrays(0, batchcount * 4);
 							R_Mesh_Draw(0, batchcount * 4, 0, batchcount * 2, quadelement3i, quadelement3s, 0, 0);
-							GL_LockArrays(0, 0);
 							batchcount = 0;
 							ac = color4f;
 							at = texcoord2f;
@@ -1506,9 +1504,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma
 				batchcount++;
 				if (batchcount >= QUADELEMENTS_MAXQUADS)
 				{
-					GL_LockArrays(0, batchcount * 4);
 					R_Mesh_Draw(0, batchcount * 4, 0, batchcount * 2, quadelement3i, quadelement3s, 0, 0);
-					GL_LockArrays(0, 0);
 					batchcount = 0;
 					ac = color4f;
 					at = texcoord2f;
@@ -1522,9 +1518,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma
 					if (batchcount)
 					{
 						// we need a different character map, render what we currently have:
-						GL_LockArrays(0, batchcount * 4);
 						R_Mesh_Draw(0, batchcount * 4, 0, batchcount * 2, quadelement3i, quadelement3s, 0, 0);
-						GL_LockArrays(0, 0);
 						batchcount = 0;
 						ac = color4f;
 						at = texcoord2f;
@@ -1583,9 +1577,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma
 				batchcount++;
 				if (batchcount >= QUADELEMENTS_MAXQUADS)
 				{
-					GL_LockArrays(0, batchcount * 4);
 					R_Mesh_Draw(0, batchcount * 4, 0, batchcount * 2, quadelement3i, quadelement3s, 0, 0);
-					GL_LockArrays(0, 0);
 					batchcount = 0;
 					ac = color4f;
 					at = texcoord2f;
@@ -1603,11 +1595,7 @@ float DrawQ_String_Scale(float startx, float starty, const char *text, size_t ma
 		}
 	}
 	if (batchcount > 0)
-	{
-		GL_LockArrays(0, batchcount * 4);
 		R_Mesh_Draw(0, batchcount * 4, 0, batchcount * 2, quadelement3i, quadelement3s, 0, 0);
-		GL_LockArrays(0, 0);
-	}
 
 	if (outcolor)
 		*outcolor = colorindex;
@@ -1724,9 +1712,7 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
 	R_Mesh_TexCoordPointer(0, 2, mesh->data_texcoord2f, 0, 0);
 	R_SetupShader_Generic(mesh->texture, NULL, GL_MODULATE, 1);
 
-	GL_LockArrays(0, mesh->num_vertices);
 	R_Mesh_Draw(0, mesh->num_vertices, 0, mesh->num_triangles, mesh->data_element3i, mesh->data_element3s, 0, 0);
-	GL_LockArrays(0, 0);
 }
 
 void DrawQ_LineLoop (drawqueuemesh_t *mesh, int flags)
diff --git a/gl_rmain.c b/gl_rmain.c
index 20ae93b0..bfa20f0b 100644
--- a/gl_rmain.c
+++ b/gl_rmain.c
@@ -9696,10 +9696,7 @@ void RSurf_DrawBatch_Simple(int texturenumsurfaces, const msurface_t **texturesu
 	int numtriangles;
 	// TODO: lock all array ranges before render, rather than on each surface
 	if (texturenumsurfaces == 1)
-	{
-		GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 		R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
-	}
 	else if (r_batchmode.integer == 2)
 	{
 		#define MAXBATCHTRIANGLES 4096
@@ -9744,7 +9741,6 @@ void RSurf_DrawBatch_Simple(int texturenumsurfaces, const msurface_t **texturesu
 			surface2 = texturesurfacelist[j-1];
 			numvertices = surface2->num_firstvertex + surface2->num_vertices - surface->num_firstvertex;
 			numtriangles = surface2->num_firsttriangle + surface2->num_triangles - surface->num_firsttriangle;
-			GL_LockArrays(surface->num_firstvertex, numvertices);
 			R_Mesh_Draw(surface->num_firstvertex, numvertices, surface->num_firsttriangle, numtriangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 		}
 	}
@@ -9753,7 +9749,6 @@ void RSurf_DrawBatch_Simple(int texturenumsurfaces, const msurface_t **texturesu
 		for (i = 0;i < texturenumsurfaces;i++)
 		{
 			surface = texturesurfacelist[i];
-			GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 			R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 		}
 	}
@@ -9833,7 +9828,6 @@ static void RSurf_DrawBatch_WithLightmapSwitching_WithWaterTextureSwitching(int
 		surface = texturesurfacelist[i];
 		RSurf_BindLightmapForSurface(surface);
 		RSurf_BindReflectionForSurface(surface);
-		GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 		R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 	}
 }
@@ -9851,7 +9845,6 @@ static void RSurf_DrawBatch_WithLightmapSwitching(int texturenumsurfaces, const
 	if (texturenumsurfaces == 1)
 	{
 		RSurf_BindLightmapForSurface(surface);
-		GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 		R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 	}
 	else if (r_batchmode.integer == 2)
@@ -9916,7 +9909,6 @@ static void RSurf_DrawBatch_WithLightmapSwitching(int texturenumsurfaces, const
 			surface2 = texturesurfacelist[j-1];
 			numvertices = surface2->num_firstvertex + surface2->num_vertices - surface->num_firstvertex;
 			numtriangles = surface2->num_firsttriangle + surface2->num_triangles - surface->num_firsttriangle;
-			GL_LockArrays(surface->num_firstvertex, numvertices);
 			R_Mesh_Draw(surface->num_firstvertex, numvertices, surface->num_firsttriangle, numtriangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 		}
 #if 0
@@ -9929,7 +9921,6 @@ static void RSurf_DrawBatch_WithLightmapSwitching(int texturenumsurfaces, const
 		{
 			surface = texturesurfacelist[i];
 			RSurf_BindLightmapForSurface(surface);
-			GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 			R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 		}
 	}
@@ -9959,7 +9950,6 @@ static void RSurf_DrawBatch_ShowSurfaces(int texturenumsurfaces, const msurface_
 			const msurface_t *surface = texturesurfacelist[texturesurfaceindex];
 			int k = (int)(((size_t)surface) / sizeof(msurface_t));
 			GL_Color((k & 15) * (1.0f / 16.0f) * r_refdef.view.colorscale, ((k >> 4) & 15) * (1.0f / 16.0f) * r_refdef.view.colorscale, ((k >> 8) & 15) * (1.0f / 16.0f) * r_refdef.view.colorscale, 1);
-			GL_LockArrays(surface->num_firstvertex, surface->num_vertices);
 			R_Mesh_Draw(surface->num_firstvertex, surface->num_vertices, surface->num_firsttriangle, surface->num_triangles, rsurface.modelelement3i, rsurface.modelelement3s, rsurface.modelelement3i_bufferobject, rsurface.modelelement3s_bufferobject);
 		}
 	}
@@ -10334,7 +10324,6 @@ static void R_DrawTextureSurfaceList_GL20(int texturenumsurfaces, const msurface
 		GL_DepthMask(true);
 		R_SetupShader_Surface(vec3_origin, (rsurface.texture->currentmaterialflags & MATERIALFLAG_MODELLIGHT) != 0, 1, 1, rsurface.texture->specularscale, prepass ? RSURFPASS_DEFERREDGEOMETRY : RSURFPASS_BASE);
 		RSurf_DrawBatch_Simple(texturenumsurfaces, texturesurfacelist);
-		GL_LockArrays(0, 0);
 	}
 	else if ((rsurface.texture->currentmaterialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION)) && !r_waterstate.renderingscene)
 	{
@@ -10342,11 +10331,9 @@ static void R_DrawTextureSurfaceList_GL20(int texturenumsurfaces, const msurface
 		GL_DepthMask(true);
 		R_SetupShader_Surface(vec3_origin, (rsurface.texture->currentmaterialflags & MATERIALFLAG_MODELLIGHT) != 0, 1, 1, rsurface.texture->specularscale, RSURFPASS_BACKGROUND);
 		RSurf_DrawBatch_WithLightmapSwitching_WithWaterTextureSwitching(texturenumsurfaces, texturesurfacelist);
-		GL_LockArrays(0, 0);
 		GL_DepthMask(false);
 		R_SetupShader_Surface(vec3_origin, (rsurface.texture->currentmaterialflags & MATERIALFLAG_MODELLIGHT) != 0, 1, 1, rsurface.texture->specularscale, prepass ? RSURFPASS_DEFERREDGEOMETRY : RSURFPASS_BASE);
 		RSurf_DrawBatch_WithLightmapSwitching_WithWaterTextureSwitching(texturenumsurfaces, texturesurfacelist);
-		GL_LockArrays(0, 0);
 	}
 	else
 	{
@@ -10359,7 +10346,6 @@ static void R_DrawTextureSurfaceList_GL20(int texturenumsurfaces, const msurface
 			RSurf_DrawBatch_WithLightmapSwitching(texturenumsurfaces, texturesurfacelist);
 		else
 			RSurf_DrawBatch_Simple(texturenumsurfaces, texturesurfacelist);
-		GL_LockArrays(0, 0);
 	}
 }
 
@@ -10476,7 +10462,6 @@ static void R_DrawTextureSurfaceList_GL13(int texturenumsurfaces, const msurface
 		default:
 			Con_Printf("R_DrawTextureSurfaceList: unknown layer type %i\n", layer->type);
 		}
-		GL_LockArrays(0, 0);
 	}
 	CHECKGLERROR
 	if (rsurface.texture->currentmaterialflags & MATERIALFLAG_ALPHATEST)
@@ -10528,7 +10513,6 @@ static void R_DrawTextureSurfaceList_GL11(int texturenumsurfaces, const msurface
 					RSurf_DrawBatch_GL11_Lightmap(texturenumsurfaces, texturesurfacelist, 1, 1, 1, 1, false, false);
 				else
 					RSurf_DrawBatch_GL11_VertexColor(texturenumsurfaces, texturesurfacelist, 1, 1, 1, 1, false, false);
-				GL_LockArrays(0, 0);
 				// then apply the texture to it
 				GL_BlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
 				R_Mesh_TexBind(0, layer->texture);
@@ -10595,7 +10579,6 @@ static void R_DrawTextureSurfaceList_GL11(int texturenumsurfaces, const msurface
 		default:
 			Con_Printf("R_DrawTextureSurfaceList: unknown layer type %i\n", layer->type);
 		}
-		GL_LockArrays(0, 0);
 	}
 	CHECKGLERROR
 	if (rsurface.texture->currentmaterialflags & MATERIALFLAG_ALPHATEST)
@@ -11727,9 +11710,7 @@ static void R_DrawModelDecals_Entity(entity_render_t *ent)
 		GL_CullFace(GL_NONE);
 		GL_BlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
 		R_SetupShader_Generic(decalskinframe->base, NULL, GL_MODULATE, 1);
-		GL_LockArrays(0, numtris * 3);
 		R_Mesh_Draw(0, numtris * 3, 0, numtris, decalsystem->element3i, decalsystem->element3s, 0, 0);
-		GL_LockArrays(0, 0);
 	}
 }
 
diff --git a/gl_rsurf.c b/gl_rsurf.c
index 96f2bc8a..9478d237 100644
--- a/gl_rsurf.c
+++ b/gl_rsurf.c
@@ -1132,7 +1132,6 @@ void R_Q1BSP_DrawShadowMap(int side, entity_render_t *ent, const vec3_t relative
 		GL_CullFace(rsurface.texture->currentmaterialflags & MATERIALFLAG_NOCULLFACE ? GL_NONE : r_refdef.view.cullface_back);
 		RSurf_PrepareVerticesForBatch(false, false, batchsize, batch);
 		RSurf_DrawBatch_Simple(batchsize, batch);
-		GL_LockArrays(0, 0);
 	}
 }
 
diff --git a/glquake.h b/glquake.h
index 0385511e..bd3e133c 100644
--- a/glquake.h
+++ b/glquake.h
@@ -336,10 +336,6 @@ extern void (GLAPIENTRY *qglClientActiveTexture) (GLenum);
 #define GL_TEXTURE31_ARB				0x84DF
 #endif
 
-// GL_EXT_compiled_vertex_array
-extern void (GLAPIENTRY *qglLockArraysEXT) (GLint first, GLint count);
-extern void (GLAPIENTRY *qglUnlockArraysEXT) (void);
-
 // GL_ARB_texture_env_combine
 #ifndef GL_COMBINE_ARB
 #define GL_COMBINE_ARB					0x8570
diff --git a/r_explosion.c b/r_explosion.c
index e26ba58a..ecb83f17 100644
--- a/r_explosion.c
+++ b/r_explosion.c
@@ -222,9 +222,7 @@ static void R_DrawExplosion_TransparentCallback(const entity_render_t *ent, cons
 		R_Mesh_VertexPointer(e->vert[0], 0, 0);
 		// FIXME: fixed function path can't properly handle r_refdef.view.colorscale > 1
 		GL_Color(e->alpha * r_refdef.view.colorscale, e->alpha * r_refdef.view.colorscale, e->alpha * r_refdef.view.colorscale, 1);
-		GL_LockArrays(0, numverts);
 		R_Mesh_Draw(0, numverts, 0, numtriangles, NULL, explosiontris[0], 0, 0);
-		GL_LockArrays(0, 0);
 	}
 }
 
diff --git a/r_shadow.c b/r_shadow.c
index d368e831..49f03e4e 100644
--- a/r_shadow.c
+++ b/r_shadow.c
@@ -1330,7 +1330,6 @@ void R_Shadow_VolumeFromList(int numverts, int numtris, const float *invertex3f,
 		r_refdef.stats.lights_shadowtriangles += tris;
 		CHECKGLERROR
 		R_Mesh_VertexPointer(shadowvertex3f, 0, 0);
-		GL_LockArrays(0, outverts);
 		if (r_shadow_rendermode == R_SHADOW_RENDERMODE_ZPASS_STENCIL)
 		{
 			// increment stencil if frontface is infront of depthbuffer
@@ -1352,7 +1351,6 @@ void R_Shadow_VolumeFromList(int numverts, int numtris, const float *invertex3f,
 			qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);CHECKGLERROR
 		}
 		R_Mesh_Draw(0, outverts, 0, tris, shadowelements, NULL, 0, 0);
-		GL_LockArrays(0, 0);
 		CHECKGLERROR
 	}
 }
@@ -3314,7 +3312,6 @@ void R_Shadow_DrawWorldShadow_ShadowVolume(int numsurfaces, int *surfacelist, co
 		{
 			r_refdef.stats.lights_shadowtriangles += mesh->numtriangles;
 			R_Mesh_VertexPointer(mesh->vertex3f, mesh->vbo, mesh->vbooffset_vertex3f);
-			GL_LockArrays(0, mesh->numverts);
 			if (r_shadow_rendermode == R_SHADOW_RENDERMODE_ZPASS_STENCIL)
 			{
 				// increment stencil if frontface is infront of depthbuffer
@@ -3336,7 +3333,6 @@ void R_Shadow_DrawWorldShadow_ShadowVolume(int numsurfaces, int *surfacelist, co
 				qglStencilOp(GL_KEEP, GL_INCR, GL_KEEP);CHECKGLERROR
 			}
 			R_Mesh_Draw(0, mesh->numverts, 0, mesh->numtriangles, mesh->element3i, mesh->element3s, mesh->ebo3i, mesh->ebo3s);
-			GL_LockArrays(0, 0);
 		}
 		CHECKGLERROR
 	}
diff --git a/vid.h b/vid.h
index b0c3b626..52331ae4 100644
--- a/vid.h
+++ b/vid.h
@@ -59,7 +59,6 @@ typedef struct viddef_support_s
 	qboolean ati_separate_stencil;
 	qboolean ext_blend_minmax;
 	qboolean ext_blend_subtract;
-	qboolean ext_compiled_vertex_array;
 	qboolean ext_draw_range_elements;
 	qboolean ext_framebuffer_object;
 	qboolean ext_stencil_two_side;
diff --git a/vid_shared.c b/vid_shared.c
index 397f590f..4579c143 100644
--- a/vid_shared.c
+++ b/vid_shared.c
@@ -110,10 +110,6 @@ void (GLAPIENTRY *qglMultiTexCoord4f) (GLenum, GLfloat, GLfloat, GLfloat, GLfloa
 void (GLAPIENTRY *qglActiveTexture) (GLenum);
 void (GLAPIENTRY *qglClientActiveTexture) (GLenum);
 
-// GL_EXT_compiled_vertex_array
-void (GLAPIENTRY *qglLockArraysEXT) (GLint first, GLint count);
-void (GLAPIENTRY *qglUnlockArraysEXT) (void);
-
 // general GL functions
 
 void (GLAPIENTRY *qglClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
@@ -593,13 +589,6 @@ static dllfunction_t multitexturefuncs[] =
 	{NULL, NULL}
 };
 
-static dllfunction_t compiledvertexarrayfuncs[] =
-{
-	{"glLockArraysEXT", (void **) &qglLockArraysEXT},
-	{"glUnlockArraysEXT", (void **) &qglUnlockArraysEXT},
-	{NULL, NULL}
-};
-
 static dllfunction_t texture3dextfuncs[] =
 {
 	{"glTexImage3DEXT", (void **) &qglTexImage3D},
@@ -829,7 +818,6 @@ void VID_CheckExtensions(void)
 	vid.support.ati_separate_stencil = GL_CheckExtension("2.0", gl2separatestencilfuncs, "-noseparatestencil", true) || GL_CheckExtension("GL_ATI_separate_stencil", atiseparatestencilfuncs, "-noseparatestencil", false);
 	vid.support.ext_blend_minmax = GL_CheckExtension("GL_EXT_blend_minmax", blendequationfuncs, "-noblendminmax", false);
 	vid.support.ext_blend_subtract = GL_CheckExtension("GL_EXT_blend_subtract", blendequationfuncs, "-noblendsubtract", false);
-	vid.support.ext_compiled_vertex_array = GL_CheckExtension("GL_EXT_compiled_vertex_array", compiledvertexarrayfuncs, "-nocva", false);
 	vid.support.ext_draw_range_elements = GL_CheckExtension("1.2", drawrangeelementsfuncs, "-nodrawrangeelements", true) || GL_CheckExtension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", false);
 	vid.support.ext_framebuffer_object = GL_CheckExtension("GL_EXT_framebuffer_object", fbofuncs, "-nofbo", false);
 	vid.support.ext_stencil_two_side = GL_CheckExtension("GL_EXT_stencil_two_side", stenciltwosidefuncs, "-nostenciltwoside", false);
@@ -842,7 +830,6 @@ void VID_CheckExtensions(void)
 // COMMANDLINEOPTION: GL: -noblendsubtract disables GL_EXT_blend_subtract
 // COMMANDLINEOPTION: GL: -nocombine disables GL_ARB_texture_env_combine or GL_EXT_texture_env_combine (required for bumpmapping and faster map rendering)
 // COMMANDLINEOPTION: GL: -nocubemap disables GL_ARB_texture_cube_map (required for bumpmapping)
-// COMMANDLINEOPTION: GL: -nocva disables GL_EXT_compiled_vertex_array (renders faster)
 // COMMANDLINEOPTION: GL: -nodepthtexture disables use of GL_ARB_depth_texture (required for shadowmapping)
 // COMMANDLINEOPTION: GL: -nodrawbuffers disables use of GL_ARB_draw_buffers (required for r_shadow_deferredprepass)
 // COMMANDLINEOPTION: GL: -nodrawrangeelements disables GL_EXT_draw_range_elements (renders faster)