+ const surfmesh_t *mesh;
+ static rmeshstate_t m;
+ float cl;
+ //memset(&m, 0, sizeof(m));
+ m.blendfunc1 = GL_ONE;
+ m.blendfunc2 = GL_ZERO;
+ m.wantoverbright = false;
+ m.tex[0] = R_GetTexture(surf->currenttexture->texture);
+ m.texrgbscale[0] = 1.0f;
+ m.tex[1] = R_GetTexture(surf->lightmaptexture);
+ m.texrgbscale[1] = 4.0f;
+ m.tex[2] = R_GetTexture(surf->currenttexture->detailtexture);
+ m.texrgbscale[2] = 2.0f;
+ R_Mesh_State(&m);
+ for (mesh = surf->mesh;mesh;mesh = mesh->chain)
+ {
+ R_Mesh_ResizeCheck(mesh->numverts, mesh->numtriangles);
+ memcpy(varray_element, mesh->index, mesh->numtriangles * sizeof(int[3]));
+ memcpy(varray_vertex, mesh->verts, mesh->numverts * sizeof(float[4]));
+ memcpy(varray_texcoord[0], mesh->st, mesh->numverts * sizeof(float[2]));
+ memcpy(varray_texcoord[1], mesh->uv, mesh->numverts * sizeof(float[2]));
+ memcpy(varray_texcoord[2], mesh->ab, mesh->numverts * sizeof(float[2]));
+ cl = (float) (1 << lightscalebit) * mesh_colorscale;
+ R_FillColors(varray_color, mesh->numverts, cl, cl, cl, 1);
+ R_Mesh_Draw(mesh->numverts, mesh->numtriangles);
+ }
+}
+
+static void RSurfShader_OpaqueWall_Pass_BaseMTex(const entity_render_t *ent, const msurface_t *surf)
+{
+ const surfmesh_t *mesh;
+ rmeshstate_t m;
+ float cl;
+ memset(&m, 0, sizeof(m));
+ m.blendfunc1 = GL_ONE;
+ m.blendfunc2 = GL_ZERO;
+ m.wantoverbright = true;
+ m.tex[0] = R_GetTexture(surf->currenttexture->texture);
+ m.tex[1] = R_GetTexture(surf->lightmaptexture);
+ R_Mesh_State(&m);
+ for (mesh = surf->mesh;mesh;mesh = mesh->chain)
+ {
+ R_Mesh_ResizeCheck(mesh->numverts, mesh->numtriangles);
+ memcpy(varray_element, mesh->index, mesh->numtriangles * sizeof(int[3]));
+ memcpy(varray_vertex, mesh->verts, mesh->numverts * sizeof(float[4]));
+ memcpy(varray_texcoord[0], mesh->st, mesh->numverts * sizeof(float[2]));
+ memcpy(varray_texcoord[1], mesh->uv, mesh->numverts * sizeof(float[2]));
+ cl = (float) (1 << lightscalebit) * mesh_colorscale;
+ R_FillColors(varray_color, mesh->numverts, cl, cl, cl, 1);
+ R_Mesh_Draw(mesh->numverts, mesh->numtriangles);
+ }
+}
+
+static void RSurfShader_OpaqueWall_Pass_BaseTexture(const entity_render_t *ent, const msurface_t *surf)
+{
+ const surfmesh_t *mesh;
+ rmeshstate_t m;
+ float cl;
+ memset(&m, 0, sizeof(m));
+ m.blendfunc1 = GL_ONE;
+ m.blendfunc2 = GL_ZERO;
+ m.wantoverbright = false;
+ m.tex[0] = R_GetTexture(surf->currenttexture->texture);
+ R_Mesh_State(&m);
+ for (mesh = surf->mesh;mesh;mesh = mesh->chain)
+ {
+ R_Mesh_ResizeCheck(mesh->numverts, mesh->numtriangles);
+ memcpy(varray_element, mesh->index, mesh->numtriangles * sizeof(int[3]));
+ memcpy(varray_vertex, mesh->verts, mesh->numverts * sizeof(float[4]));
+ memcpy(varray_texcoord[0], mesh->st, mesh->numverts * sizeof(float[2]));
+ cl = mesh_colorscale;
+ R_FillColors(varray_color, mesh->numverts, cl, cl, cl, 1);
+ R_Mesh_Draw(mesh->numverts, mesh->numtriangles);
+ }
+}
+
+static void RSurfShader_OpaqueWall_Pass_BaseLightmap(const entity_render_t *ent, const msurface_t *surf)
+{
+ const surfmesh_t *mesh;
+ rmeshstate_t m;
+ float cl;
+ memset(&m, 0, sizeof(m));
+ m.blendfunc1 = GL_ZERO;
+ m.blendfunc2 = GL_SRC_COLOR;
+ m.wantoverbright = true;
+ m.tex[0] = R_GetTexture(surf->lightmaptexture);
+ R_Mesh_State(&m);
+ for (mesh = surf->mesh;mesh;mesh = mesh->chain)
+ {
+ R_Mesh_ResizeCheck(mesh->numverts, mesh->numtriangles);
+ memcpy(varray_element, mesh->index, mesh->numtriangles * sizeof(int[3]));
+ memcpy(varray_vertex, mesh->verts, mesh->numverts * sizeof(float[4]));
+ memcpy(varray_texcoord[0], mesh->uv, mesh->numverts * sizeof(float[2]));
+ cl = (float) (1 << lightscalebit) * mesh_colorscale;
+ R_FillColors(varray_color, mesh->numverts, cl, cl, cl, 1);
+ R_Mesh_Draw(mesh->numverts, mesh->numtriangles);
+ }
+}
+
+static void RSurfShader_OpaqueWall_Pass_Light(const entity_render_t *ent, const msurface_t *surf)
+{
+ const surfmesh_t *mesh;
+ rmeshstate_t m;
+
+ if (surf->dlightframe != r_framecount)
+ return;
+ if (ent->effects & EF_FULLBRIGHT)
+ return;