- rmeshbufferinfo_t mbuf;
- int i, *renderlist;
- rtexture_t **texture;
-
- texture = (rtexture_t **)(m->lump_shaders.start + (int) m);
-
- renderlist = (int *)(m->lump_render.start + (int) m);
- for (i = 0;i < m->numshaders;i++)
- {
- memset(&mbuf, 0, sizeof(mbuf));
- mbuf.numverts = m->numverts;
- mbuf.numtriangles = *renderlist++;
- if (currentrenderentity->effects & EF_ADDITIVE)
- {
- mbuf.transparent = true;
- mbuf.blendfunc1 = GL_SRC_ALPHA;
- mbuf.blendfunc2 = GL_ONE;
- }
- else if (currentrenderentity->alpha != 1.0 || R_TextureHasAlpha(texture[i]))
- {
- mbuf.transparent = true;
- mbuf.blendfunc1 = GL_SRC_ALPHA;
- mbuf.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- }
- else
- {
- mbuf.transparent = false;
- mbuf.blendfunc1 = GL_ONE;
- mbuf.blendfunc2 = GL_ZERO;
- }
- mbuf.tex[0] = R_GetTexture(texture[i]);
- if (R_Mesh_Draw_GetBuffer(&mbuf, true))
- {
- c_alias_polys += mbuf.numtriangles;
- memcpy(mbuf.index, renderlist, mbuf.numtriangles * sizeof(int[3]));
- memcpy(mbuf.vertex, aliasvert, mbuf.numverts * sizeof(float[4]));
- R_ModulateColors(aliasvertcolor, mbuf.color, mbuf.numverts, mbuf.colorscale, mbuf.colorscale, mbuf.colorscale);
- //memcpy(mbuf.color, aliasvertcolor, mbuf.numverts * sizeof(float[4]));
- memcpy(mbuf.texcoords[0], (float *)(m->lump_texcoords.start + (int) m), mbuf.numverts * sizeof(float[2]));
- R_Mesh_Render();
- }
- renderlist += mbuf.numtriangles * 3;
- }
-
- if (fog)
- {
- renderlist = (int *)(m->lump_render.start + (int) m);
- for (i = 0;i < m->numshaders;i++)
- {
- memset(&mbuf, 0, sizeof(mbuf));
- mbuf.numverts = m->numverts;
- mbuf.numtriangles = *renderlist++;
- mbuf.transparent = currentrenderentity->effects & EF_ADDITIVE || currentrenderentity->alpha != 1.0 || R_TextureHasAlpha(texture[i]);
- mbuf.blendfunc1 = GL_SRC_ALPHA;
- mbuf.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- // FIXME: need alpha mask for fogging...
- //mbuf.tex[0] = R_GetTexture(texture[i]);
- if (R_Mesh_Draw_GetBuffer(&mbuf, false))
- {
- c_alias_polys += mbuf.numtriangles;
- memcpy(mbuf.index, renderlist, mbuf.numtriangles * sizeof(int[3]));
- memcpy(mbuf.vertex, aliasvert, mbuf.numverts * sizeof(float[4]));
- R_FillColors(mbuf.color, mbuf.numverts, fogcolor[0] * mbuf.colorscale, fogcolor[1] * mbuf.colorscale, fogcolor[2] * mbuf.colorscale, currentrenderentity->alpha * fog);
- //memcpy(mbuf.texcoords[0], (float *)(m->lump_texcoords.start + (int) m), mbuf.numverts * sizeof(float[2]));
- R_Mesh_Render();
- }
- renderlist += mbuf.numtriangles * 3;
- }
- }
-}
-
-void R_DrawZymoticModel (float fog)
-{
- zymtype1header_t *m;
-
- // FIXME: do better fog
- m = currentrenderentity->model->zymdata_header;
- ZymoticLerpBones(m->numbones, (zymbonematrix *)(m->lump_poses.start + (int) m), currentrenderentity->frameblend, (zymbone_t *)(m->lump_bones.start + (int) m));
- ZymoticTransformVerts(m->numverts, (int *)(m->lump_vertbonecounts.start + (int) m), (zymvertex_t *)(m->lump_verts.start + (int) m));
- ZymoticCalcNormals(m->numverts, m->numshaders, (int *)(m->lump_render.start + (int) m));
-
- R_LightModel(m->numverts, 1 - fog, 1 - fog, 1 - fog, true);
-
- R_DrawZymoticModelMesh(m, fog);
-}
-
-void R_DrawAliasModel (void)
-{
- float fog;