- if (lighthalf)
- {
- if (light)
- {
- for (;s;s = s->texturechain)
- {
- for (p=s->polys ; p ; p=p->next)
- {
- // FIXME: could be a transparent water texture
- transpolybegin(s->texinfo->texture->gl_texturenum, s->texinfo->texture->gl_glowtexturenum, 0, TPOLYTYPE_ALPHA);
- for (i = 0,v = p->verts[0];i < p->numverts;i++, v += VERTEXSIZE)
- {
- shadecolor[0] = shadecolor[1] = shadecolor[2] = 128;
- R_DynamicLightPoint(shadecolor, v, s->dlightbits);
- transpolyvert(v[0], v[1], v[2], (v[3] + os) * (1.0f/64.0f), (v[4] + ot) * (1.0f/64.0f), (int) shadecolor[0] >> 1,(int) shadecolor[1] >> 1,(int) shadecolor[2] >> 1,alpha);
- }
- transpolyend();
- }
- }
- }
- else
- {
- for (;s;s = s->texturechain)
- {
- for (p=s->polys ; p ; p=p->next)
- {
- // FIXME: could be a transparent water texture
- transpolybegin(s->texinfo->texture->gl_texturenum, s->texinfo->texture->gl_glowtexturenum, 0, TPOLYTYPE_ALPHA);
- for (i = 0,v = p->verts[0];i < p->numverts;i++, v += VERTEXSIZE)
- {
- transpolyvert(v[0], v[1], v[2], (v[3] + os) * (1.0f/64.0f), (v[4] + ot) * (1.0f/64.0f), r,g,b,alpha);
- }
- transpolyend();
- }
- }
- }
- }
- else
- {
- if (light)
- {
- for (;s;s = s->texturechain)
- {
- for (p=s->polys ; p ; p=p->next)
- {
- // FIXME: could be a transparent water texture
- transpolybegin(s->texinfo->texture->gl_texturenum, s->texinfo->texture->gl_glowtexturenum, 0, TPOLYTYPE_ALPHA);
- for (i = 0,v = p->verts[0];i < p->numverts;i++, v += VERTEXSIZE)
- {
- shadecolor[0] = shadecolor[1] = shadecolor[2] = 128;
- R_DynamicLightPoint(shadecolor, v, s->dlightbits);
- transpolyvert(v[0], v[1], v[2], (v[3] + os) * (1.0f/64.0f), (v[4] + ot) * (1.0f/64.0f), shadecolor[0],shadecolor[1],shadecolor[2],alpha);
- }
- transpolyend();
- }
- }
- }
- else
- {
- for (;s;s = s->texturechain)
- {
- for (p=s->polys ; p ; p=p->next)
- {
- // FIXME: could be a transparent water texture
- transpolybegin(s->texinfo->texture->gl_texturenum, s->texinfo->texture->gl_glowtexturenum, 0, TPOLYTYPE_ALPHA);
- for (i = 0,v = p->verts[0];i < p->numverts;i++, v += VERTEXSIZE)
- {
- transpolyvert(v[0], v[1], v[2], (v[3] + os) * (1.0f/64.0f), (v[4] + ot) * (1.0f/64.0f), r,g,b,alpha);
- }
- transpolyend();
- }
- }
- }
- }
+ if (surf->dlightframe == r_framecount)
+ RSurf_LightSeparate(&ent->inversematrix, surf->dlightbits, m.numverts, m.vertex, m.color);
+ if (surf->flags & SURF_LIGHTMAP)
+ RSurf_AddLightmapToVertexColors(mesh->vertex, m.color, m.numverts, surf->samples, ((surf->extents[0]>>4)+1)*((surf->extents[1]>>4)+1)*3, surf->styles);
+ }
+ RSurf_FogColors(m.vertex, m.color, m.colorscale, m.numverts, modelorg);
+ R_Mesh_Render();
+ }
+ }
+
+ if (fogenabled)
+ {
+ memset(&m, 0, sizeof(m));
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE;
+ m.tex[0] = R_GetTexture(surf->currenttexture->fogtexture);
+ m.matrix = ent->matrix;
+ for (mesh = surf->mesh;mesh;mesh = mesh->chain)
+ {
+ m.numtriangles = mesh->numtriangles;
+ m.numverts = mesh->numverts;
+ if (R_Mesh_Draw_GetBuffer(&m, false))
+ {
+ memcpy(m.index, mesh->index, m.numtriangles * sizeof(int[3]));
+ RSurf_CopyXYZ(mesh->vertex, m.vertex, m.numverts);
+ if (m.tex[0])
+ RSurf_CopyST(mesh->vertex, m.texcoords[0], m.numverts);
+ RSurf_FogPassColors(m.vertex, m.color, fogcolor[0], fogcolor[1], fogcolor[2], alpha, m.colorscale, m.numverts, modelorg);
+ R_Mesh_Render();