+ memset(&m, 0, sizeof(m));
+ skin = R_FetchAliasSkin(ent, mesh);
+ for (layernum = 0, layer = skin->data_layers;layernum < skin->num_layers;layernum++, layer++)
+ {
+ if (((layer->flags & ALIASLAYER_NODRAW_IF_NOTCOLORMAPPED) && ent->colormap < 0)
+ || ((layer->flags & ALIASLAYER_NODRAW_IF_COLORMAPPED) && ent->colormap >= 0)
+ || (layer->flags & ALIASLAYER_DRAW_PER_LIGHT))
+ continue;
+ expandaliasvert(mesh->num_vertices);
+ if (layer->flags & ALIASLAYER_FOG)
+ {
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE;
+ colorscale = r_colorscale;
+ m.texrgbscale[0] = 1;
+ m.tex[0] = R_GetTexture(layer->texture);
+ R_Mesh_State(&m);
+ GL_Color(fogcolor[0] * fog * colorscale, fogcolor[1] * fog * colorscale, fogcolor[2] * fog * colorscale, ent->alpha);
+ c_alias_polys += mesh->num_triangles;
+ R_Mesh_GetSpace(mesh->num_vertices);
+ R_Model_Alias_GetMesh_Vertex3f(ent, mesh, varray_vertex3f, aliasvert_normal3f, NULL, NULL);
+ if (layer->texture != NULL)
+ R_Mesh_CopyTexCoord2f(0, mesh->data_texcoord2f, mesh->num_vertices);
+ R_Mesh_Draw(mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
+ continue;
+ }
+ if ((layer->flags & ALIASLAYER_ADD) || ((layer->flags & ALIASLAYER_ALPHA) && (ent->effects & EF_ADDITIVE)))
+ {
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE;
+ }
+ else if ((layer->flags & ALIASLAYER_ALPHA) || ent->alpha != 1.0)
+ {
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
+ }
+ else
+ {
+ m.blendfunc1 = GL_ONE;
+ m.blendfunc2 = GL_ZERO;
+ }
+ colorscale = r_colorscale;
+ m.texrgbscale[0] = 1;
+ if (gl_combine.integer)
+ {
+ colorscale *= 0.25f;
+ m.texrgbscale[0] = 4;
+ }
+ m.tex[0] = R_GetTexture(layer->texture);
+ R_Mesh_State(&m);
+ if (layer->flags & ALIASLAYER_COLORMAP_PANTS)
+ {
+ // 128-224 are backwards ranges
+ c = (ent->colormap & 0xF) << 4;c += (c >= 128 && c < 224) ? 4 : 12;
+ bcolor = (qbyte *) (&palette_complete[c]);
+ fullbright = c >= 224;
+ VectorScale(bcolor, (1.0f / 255.0f), tint);
+ }
+ else if (layer->flags & ALIASLAYER_COLORMAP_SHIRT)
+ {
+ // 128-224 are backwards ranges
+ c = (ent->colormap & 0xF0);c += (c >= 128 && c < 224) ? 4 : 12;
+ bcolor = (qbyte *) (&palette_complete[c]);
+ fullbright = c >= 224;
+ VectorScale(bcolor, (1.0f / 255.0f), tint);
+ }
+ else
+ {
+ tint[0] = tint[1] = tint[2] = 1;
+ fullbright = false;
+ }
+ VectorScale(tint, ifog * colorscale, tint);
+ if (!(layer->flags & ALIASLAYER_DIFFUSE))
+ fullbright = true;
+ if (ent->effects & EF_FULLBRIGHT)
+ fullbright = true;
+ c_alias_polys += mesh->num_triangles;
+ R_Mesh_GetSpace(mesh->num_vertices);
+ R_Model_Alias_GetMesh_Vertex3f(ent, mesh, varray_vertex3f, aliasvert_normal3f, NULL, NULL);
+ R_Mesh_CopyTexCoord2f(0, mesh->data_texcoord2f, mesh->num_vertices);
+ if (fullbright)
+ GL_Color(tint[0], tint[1], tint[2], ent->alpha);
+ else
+ R_LightModel(ent, mesh->num_vertices, varray_vertex3f, aliasvert_normal3f, varray_color4f, tint[0], tint[1], tint[2], false);
+ R_Mesh_Draw(mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
+ }