- blendfunc1 = GL_SRC_ALPHA;
- blendfunc2 = GL_ONE;
- }
- else if (ent->alpha != 1.0 || skinframe->fog != NULL)
- {
- blendfunc1 = GL_SRC_ALPHA;
- blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- }
- else
- {
- blendfunc1 = GL_ONE;
- blendfunc2 = GL_ZERO;
- }
-
- colorscale = r_colorscale;
- if (gl_combine.integer)
- colorscale *= 0.25f;
-
- if (!skinframe->base && !skinframe->pants && !skinframe->shirt && !skinframe->glow)
- {
- // untextured
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = blendfunc1;
- m.blendfunc2 = blendfunc2;
- if (gl_combine.integer)
- m.texrgbscale[0] = 4;
- m.tex[0] = R_GetTexture(r_notexture);
- R_Mesh_State(&m);
-
- c_alias_polys += model->numtris;
- for (i = 0;i < model->numverts * 2;i++)
- varray_texcoord[0][i] = model->mdlmd2data_texcoords[i] * 8.0f;
- aliasvert = varray_vertex;
- aliasvertcolor = varray_color;
- R_LerpMDLMD2Vertices(ent, aliasvert, aliasvertnorm);
- R_LightModel(ent, model->numverts, colorscale, colorscale, colorscale, false);
- aliasvert = aliasvertbuf;
- aliasvertcolor = aliasvertcolorbuf;
- GL_UseColorArray();
- R_Mesh_Draw(model->numverts, model->numtris, model->mdlmd2data_indices);
- return;
- }
-
-
- colormapped = !skinframe->merged || (ent->colormap >= 0 && skinframe->base && (skinframe->pants || skinframe->shirt));
- if (!colormapped && !fog && !skinframe->glow && !skinframe->fog)
- {
- // fastpath for the normal situation (one texture)
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = blendfunc1;
- m.blendfunc2 = blendfunc2;
- if (gl_combine.integer)
- m.texrgbscale[0] = 4;
- m.tex[0] = R_GetTexture(skinframe->merged);
- R_Mesh_State(&m);
-
- c_alias_polys += model->numtris;
- memcpy(varray_texcoord[0], model->mdlmd2data_texcoords, model->numverts * sizeof(float[2]));
- aliasvert = varray_vertex;
- aliasvertcolor = varray_color;
- R_LerpMDLMD2Vertices(ent, aliasvert, aliasvertnorm);
- R_LightModel(ent, model->numverts, colorscale, colorscale, colorscale, false);
- aliasvert = aliasvertbuf;
- aliasvertcolor = aliasvertcolorbuf;
- GL_UseColorArray();
- R_Mesh_Draw(model->numverts, model->numtris, model->mdlmd2data_indices);
- return;
- }
-
- R_LerpMDLMD2Vertices(ent, aliasvert, aliasvertnorm);
- R_LightModel(ent, model->numverts, colorscale * (1 - fog), colorscale * (1 - fog), colorscale * (1 - fog), false);
-
- if (colormapped)
- {
- // 128-224 are backwards ranges
- c = (ent->colormap & 0xF) << 4;c += (c >= 128 && c < 224) ? 4 : 12;
- bcolor = (qbyte *) (&d_8to24table[c]);
- pantsfullbright = c >= 224;
- VectorScale(bcolor, (1.0f / 255.0f), pantscolor);
- c = (ent->colormap & 0xF0);c += (c >= 128 && c < 224) ? 4 : 12;
- bcolor = (qbyte *) (&d_8to24table[c]);
- shirtfullbright = c >= 224;
- VectorScale(bcolor, (1.0f / 255.0f), shirtcolor);