-void GL_DrawZymoticModelMesh(byte *colors, zymtype1header_t *m)
-{
- int i, c, *renderlist;
- rtexture_t **texture;
- if (!r_render.value)
- return;
- renderlist = (int *)(m->lump_render.start + (int) m);
- texture = (rtexture_t **)(m->lump_shaders.start + (int) m);
- glVertexPointer(3, GL_FLOAT, sizeof(float[3]), aliasvert);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(byte[4]), colors);
- glEnableClientState(GL_COLOR_ARRAY);
-
- glTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), (float *)(m->lump_texcoords.start + (int) m));
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
- for (i = 0;i < m->numshaders;i++)
- {
- c = (*renderlist++) * 3;
- glBindTexture(GL_TEXTURE_2D, R_GetTexture(*texture));
- texture++;
- glDrawElements(GL_TRIANGLES, c, GL_UNSIGNED_INT, renderlist);
- renderlist += c;
- }
-
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glDisableClientState(GL_COLOR_ARRAY);
-
- glDisableClientState(GL_VERTEX_ARRAY);
-}
-
-void GL_DrawZymoticModelMeshFog(vec3_t org, zymtype1header_t *m)
-{
- vec3_t diff;
- int i, c, *renderlist;
- if (!r_render.value)
- return;
- renderlist = (int *)(m->lump_render.start + (int) m);
- glDisable(GL_TEXTURE_2D);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable (GL_BLEND);
- glDepthMask(0); // disable zbuffer updates
-
- VectorSubtract(org, r_origin, diff);
- glColor4f(fogcolor[0], fogcolor[1], fogcolor[2], exp(fogdensity/DotProduct(diff,diff)));
-
- glVertexPointer(3, GL_FLOAT, sizeof(float[3]), aliasvert);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- for (i = 0;i < m->numshaders;i++)
- {
- c = (*renderlist++) * 3;
- glDrawElements(GL_TRIANGLES, c, GL_UNSIGNED_INT, renderlist);
- renderlist += c;
- }
-
- glDisableClientState(GL_VERTEX_ARRAY);
-
- glEnable(GL_TEXTURE_2D);
- glColor3f (1,1,1);
-}
-
-/*
-=================
-R_DrawZymoticFrame
-=================
-*/
-void R_DrawZymoticFrame (zymtype1header_t *m, float alpha, vec3_t color, entity_t *ent, int shadow, vec3_t org, vec3_t angles, vec_t scale, frameblend_t *blend, int skinblah, int effects, int flags)
-{
- ZymoticLerpBones(m->numbones, (zymbonematrix *)(m->lump_poses.start + (int) m), blend, (zymbone_t *)(m->lump_bones.start + (int) m), org, angles, scale);
- 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(ent, m->numverts, org, color);
-
- if (!r_render.value)
- return;
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glShadeModel(GL_SMOOTH);
- if (effects & EF_ADDITIVE)
- {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE); // additive rendering
- glEnable(GL_BLEND);
- glDepthMask(0);
- }
- else if (alpha != 1.0)
- {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- glDepthMask(0);
- }
- else
- {
- glDisable(GL_BLEND);
- glDepthMask(1);
- }
-
- GL_DrawZymoticModelMesh(aliasvertcolor, m);
-
- if (fogenabled)
- GL_DrawZymoticModelMeshFog(org, m);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable (GL_BLEND);
- glDepthMask(1);
-}
-
-/*
-=================
-R_DrawAliasModel
-
-=================
-*/
-void R_DrawAliasModel (entity_t *ent, int cull, float alpha, model_t *clmodel, frameblend_t *blend, int skin, vec3_t org, vec3_t angles, vec_t scale, int effects, int flags, int colormap)
-{
- int i;
- vec3_t mins, maxs, color;
- void *modelheader;
- rtexture_t **skinset;
-
- if (alpha < (1.0 / 64.0))
- return; // basically completely transparent
-
- VectorAdd (org, clmodel->mins, mins);
- VectorAdd (org, clmodel->maxs, maxs);
-
-// if (cull && R_CullBox (mins, maxs))
-// return;
-
- c_models++;
-
- if (skin < 0 || skin >= clmodel->numskins)
- {
- skin = 0;
- Con_DPrintf("invalid skin number %d for model %s\n", skin, clmodel->name);
- }
-
- modelheader = Mod_Extradata (clmodel);
-
- {
-// int *skinanimrange = (int *) (clmodel->skinanimrange + (int) modelheader) + skin * 2;
-// int *skinanim = (int *) (clmodel->skinanim + (int) modelheader);
- int *skinanimrange = clmodel->skinanimrange + skin * 2;
- rtexture_t **skinanim = clmodel->skinanim;
- i = skinanimrange[0];
- if (skinanimrange[1] > 1) // animated
- i += ((int) (cl.time * 10) % skinanimrange[1]);
- skinset = skinanim + i*5;
- }
-
- if (r_render.value)
- glEnable (GL_TEXTURE_2D);
-
- c_alias_polys += clmodel->numtris;
- if (clmodel->aliastype == ALIASTYPE_ZYM)
- R_DrawZymoticFrame (modelheader, alpha, color, ent, ent != &cl.viewent, org, angles, scale, blend, 0 , effects, flags);
- else if (clmodel->aliastype == ALIASTYPE_MD2)
- R_DrawQ2AliasFrame (modelheader, alpha, color, ent, ent != &cl.viewent, org, angles, scale, blend, skinset[0] , effects, flags);
- else
- R_DrawAliasFrame (modelheader, alpha, color, ent, ent != &cl.viewent, org, angles, scale, blend, skinset , colormap, effects, flags);
-}