- Matrix4x4_Transform(&ent->matrix, surf->poly_center, center);
- R_MeshQueue_AddTransparent(center, RSurfShader_Water_Callback, ent, surf - ent->model->surfaces);
- }
- }
- }
- else
- for (chain = surfchain;(surf = *chain) != NULL;chain++)
- if (surf->visframe == r_framecount)
- RSurfShader_Water_Callback(ent, surf - ent->model->surfaces);
-}
-
-static void RSurfShader_Wall_Pass_BaseVertex(const entity_render_t *ent, const msurface_t *surf, const texture_t *texture, int rendertype, float currentalpha)
-{
- float base, colorscale;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- float modelorg[3];
- Matrix4x4_Transform(&ent->inversematrix, r_origin, modelorg);
- memset(&m, 0, sizeof(m));
- if (rendertype == SURFRENDER_ADD)
- {
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE;
- }
- else if (rendertype == SURFRENDER_ALPHA)
- {
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- }
- else
- {
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- }
- m.tex[0] = R_GetTexture(texture->skin.base);
- colorscale = r_colorscale;
- if (gl_combine.integer)
- {
- m.texrgbscale[0] = 4;
- colorscale *= 0.25f;
- }
- base = ent->effects & EF_FULLBRIGHT ? 2.0f : r_ambient.value * (1.0f / 64.0f);
- R_Mesh_State(&m);
- GL_UseColorArray();
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_FillColors(varray_color4f, mesh->numverts, base, base, base, currentalpha);
- if (!(ent->effects & EF_FULLBRIGHT))
- {
- if (surf->dlightframe == r_framecount)
- RSurf_LightSeparate_Vertex3f_Color4f(&ent->inversematrix, surf->dlightbits, mesh->numverts, mesh->vertex3f, varray_color4f, 1);
- if (surf->flags & SURF_LIGHTMAP)
- RSurf_AddLightmapToVertexColors_Color4f(mesh->lightmapoffsets, varray_color4f, mesh->numverts, surf->samples, ((surf->extents[0]>>4)+1)*((surf->extents[1]>>4)+1)*3, surf->styles);
- }
- RSurf_FogColors_Vertex3f_Color4f(mesh->vertex3f, varray_color4f, colorscale, mesh->numverts, modelorg);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
-}
-
-static void RSurfShader_Wall_Pass_Glow(const entity_render_t *ent, const msurface_t *surf, const texture_t *texture, int rendertype, float currentalpha)
-{
- const surfmesh_t *mesh;
- rmeshstate_t m;
- float modelorg[3];
- Matrix4x4_Transform(&ent->inversematrix, r_origin, modelorg);
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE;
- m.tex[0] = R_GetTexture(texture->skin.glow);
- R_Mesh_State(&m);
- GL_UseColorArray();
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- RSurf_FoggedColors_Vertex3f_Color4f(mesh->vertex3f, varray_color4f, 1, 1, 1, currentalpha, r_colorscale, mesh->numverts, modelorg);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
-}
-
-static void RSurfShader_Wall_Pass_Fog(const entity_render_t *ent, const msurface_t *surf, const texture_t *texture, int rendertype, float currentalpha)
-{
- const surfmesh_t *mesh;
- rmeshstate_t m;
- float modelorg[3];
- Matrix4x4_Transform(&ent->inversematrix, r_origin, modelorg);
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE;
- m.tex[0] = R_GetTexture(texture->skin.fog);
- R_Mesh_State(&m);
- GL_UseColorArray();
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- if (m.tex[0])
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- RSurf_FogPassColors_Vertex3f_Color4f(mesh->vertex3f, varray_color4f, fogcolor[0], fogcolor[1], fogcolor[2], currentalpha, r_colorscale, mesh->numverts, modelorg);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_BaseTripleTexCombine(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- int lightmaptexturenum;
- float cl;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- m.tex[0] = R_GetTexture(texture->skin.base);
- m.tex[1] = R_GetTexture((**surfchain).lightmaptexture);
- m.tex[2] = R_GetTexture(texture->skin.detail);
- m.texrgbscale[0] = 1;
- m.texrgbscale[1] = 4;
- m.texrgbscale[2] = 2;
- R_Mesh_State(&m);
- cl = (float) (1 << r_lightmapscalebit) * r_colorscale;
- GL_Color(cl, cl, cl, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- lightmaptexturenum = R_GetTexture(surf->lightmaptexture);
- if (m.tex[1] != lightmaptexturenum)
- {
- m.tex[1] = lightmaptexturenum;
- R_Mesh_State(&m);
- }
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(1, mesh->texcoordlightmap2f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(2, mesh->texcoorddetail2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_BaseDoubleTex(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- int lightmaptexturenum;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- m.tex[0] = R_GetTexture(texture->skin.base);
- m.tex[1] = R_GetTexture((**surfchain).lightmaptexture);
- if (gl_combine.integer)
- m.texrgbscale[1] = 4;
- R_Mesh_State(&m);
- GL_Color(r_colorscale, r_colorscale, r_colorscale, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- lightmaptexturenum = R_GetTexture(surf->lightmaptexture);
- if (m.tex[1] != lightmaptexturenum)
- {
- m.tex[1] = lightmaptexturenum;
- R_Mesh_State(&m);
- }
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(1, mesh->texcoordlightmap2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_BaseTexture(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- m.tex[0] = R_GetTexture(texture->skin.base);
- R_Mesh_State(&m);
- GL_Color(1, 1, 1, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_BaseLightmap(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- int lightmaptexturenum;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_ZERO;
- m.blendfunc2 = GL_SRC_COLOR;
- m.tex[0] = R_GetTexture((**surfchain).lightmaptexture);
- if (gl_combine.integer)
- m.texrgbscale[0] = 4;
- R_Mesh_State(&m);
- GL_Color(r_colorscale, r_colorscale, r_colorscale, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- lightmaptexturenum = R_GetTexture(surf->lightmaptexture);
- if (m.tex[0] != lightmaptexturenum)
- {
- m.tex[0] = lightmaptexturenum;
- R_Mesh_State(&m);
- }
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordlightmap2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_Light(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- float colorscale;
- rmeshstate_t m;
-
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE;
- m.tex[0] = R_GetTexture(texture->skin.base);
- colorscale = r_colorscale;
- if (gl_combine.integer)
- {
- m.texrgbscale[0] = 4;
- colorscale *= 0.25f;
- }
- R_Mesh_State(&m);
- GL_UseColorArray();
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount && surf->dlightframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- if (RSurf_LightCheck(&ent->inversematrix, surf->dlightbits, mesh))
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_FillColors(varray_color4f, mesh->numverts, 0, 0, 0, 1);
- RSurf_LightSeparate_Vertex3f_Color4f(&ent->inversematrix, surf->dlightbits, mesh->numverts, mesh->vertex3f, varray_color4f, colorscale);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_Fog(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- float modelorg[3];
- Matrix4x4_Transform(&ent->inversematrix, r_origin, modelorg);
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
- R_Mesh_State(&m);
- GL_UseColorArray();
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- if (m.tex[0])
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- RSurf_FogPassColors_Vertex3f_Color4f(mesh->vertex3f, varray_color4f, fogcolor[0], fogcolor[1], fogcolor[2], 1, r_colorscale, mesh->numverts, modelorg);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_BaseDetail(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_DST_COLOR;
- m.blendfunc2 = GL_SRC_COLOR;
- m.tex[0] = R_GetTexture(texture->skin.detail);
- R_Mesh_State(&m);
- GL_Color(1, 1, 1, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoorddetail2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_Glow(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ONE;
- m.tex[0] = R_GetTexture(texture->skin.glow);
- R_Mesh_State(&m);
- GL_Color(r_colorscale, r_colorscale, r_colorscale, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_OpaqueWall_Pass_OpaqueGlow(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- const surfmesh_t *mesh;
- rmeshstate_t m;
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_SRC_ALPHA;
- m.blendfunc2 = GL_ZERO;
- m.tex[0] = R_GetTexture(texture->skin.glow);
- R_Mesh_State(&m);
- if (m.tex[0])
- GL_Color(r_colorscale, r_colorscale, r_colorscale, 1);
- else
- GL_Color(0, 0, 0, 1);
- while((surf = *surfchain++) != NULL)
- {
- if (surf->visframe == r_framecount)
- {
- for (mesh = surf->mesh;mesh;mesh = mesh->chain)
- {
- R_Mesh_GetSpace(mesh->numverts);
- R_Mesh_CopyVertex3f(mesh->vertex3f, mesh->numverts);
- R_Mesh_CopyTexCoord2f(0, mesh->texcoordtexture2f, mesh->numverts);
- R_Mesh_Draw(mesh->numverts, mesh->numtriangles, mesh->element3i);
- }
- }
- }
-}
-
-static void RSurfShader_Wall_Vertex_Callback(const void *calldata1, int calldata2)
-{
- const entity_render_t *ent = calldata1;
- const msurface_t *surf = ent->model->surfaces + calldata2;
- int rendertype;
- float currentalpha;
- texture_t *texture;
- R_Mesh_Matrix(&ent->matrix);
-
- texture = surf->texinfo->texture;
- if (texture->animated)
- texture = texture->anim_frames[ent->frame != 0][(texture->anim_total[ent->frame != 0] >= 2) ? ((int) (cl.time * 5.0f) % texture->anim_total[ent->frame != 0]) : 0];
-
- currentalpha = ent->alpha;
- if (texture->flags & SURF_WATERALPHA)
- currentalpha *= r_wateralpha.value;
- if (ent->effects & EF_ADDITIVE)
- rendertype = SURFRENDER_ADD;
- else if (currentalpha < 1 || texture->skin.fog != NULL)
- rendertype = SURFRENDER_ALPHA;
- else
- rendertype = SURFRENDER_OPAQUE;
-
- RSurfShader_Wall_Pass_BaseVertex(ent, surf, texture, rendertype, currentalpha);
- if (texture->skin.glow)
- RSurfShader_Wall_Pass_Glow(ent, surf, texture, rendertype, currentalpha);
- if (fogenabled)
- RSurfShader_Wall_Pass_Fog(ent, surf, texture, rendertype, currentalpha);
-}
-
-static void RSurfShader_Wall_Lightmap(const entity_render_t *ent, const texture_t *texture, msurface_t **surfchain)
-{
- const msurface_t *surf;
- msurface_t **chain;
- vec3_t center;
- if (texture->rendertype != SURFRENDER_OPAQUE)
- {
- // transparent vertex shaded from lightmap
- for (chain = surfchain;(surf = *chain) != NULL;chain++)
- {
- if (surf->visframe == r_framecount)
- {
- Matrix4x4_Transform(&ent->matrix, surf->poly_center, center);
- R_MeshQueue_AddTransparent(center, RSurfShader_Wall_Vertex_Callback, ent, surf - ent->model->surfaces);
- }
- }
- }
- else if (r_shadow_lightingmode >= 2)
- {
- // opaque base lighting
- RSurfShader_OpaqueWall_Pass_OpaqueGlow(ent, texture, surfchain);
- if (fogenabled)
- RSurfShader_OpaqueWall_Pass_Fog(ent, texture, surfchain);
- }
- else if (r_vertexsurfaces.integer)
- {
- // opaque vertex shaded from lightmap
- for (chain = surfchain;(surf = *chain) != NULL;chain++)
- if (surf->visframe == r_framecount)
- RSurfShader_Wall_Pass_BaseVertex(ent, surf, texture, texture->rendertype, texture->currentalpha);
- if (texture->skin.glow)
- for (chain = surfchain;(surf = *chain) != NULL;chain++)
- if (surf->visframe == r_framecount)
- RSurfShader_Wall_Pass_Glow(ent, surf, texture, texture->rendertype, texture->currentalpha);
- if (fogenabled)
- for (chain = surfchain;(surf = *chain) != NULL;chain++)
- if (surf->visframe == r_framecount)
- RSurfShader_Wall_Pass_Fog(ent, surf, texture, texture->rendertype, texture->currentalpha);
- }
- else
- {
- // opaque lightmapped
- if (r_textureunits.integer >= 2)
- {
- if (r_textureunits.integer >= 3 && gl_combine.integer && r_detailtextures.integer)
- RSurfShader_OpaqueWall_Pass_BaseTripleTexCombine(ent, texture, surfchain);
- else
- {
- RSurfShader_OpaqueWall_Pass_BaseDoubleTex(ent, texture, surfchain);
- if (r_detailtextures.integer)
- RSurfShader_OpaqueWall_Pass_BaseDetail(ent, texture, surfchain);
- }
- }
- else
- {
- RSurfShader_OpaqueWall_Pass_BaseTexture(ent, texture, surfchain);
- RSurfShader_OpaqueWall_Pass_BaseLightmap(ent, texture, surfchain);
- if (r_detailtextures.integer)
- RSurfShader_OpaqueWall_Pass_BaseDetail(ent, texture, surfchain);
- }
- if (!r_dlightmap.integer && !(ent->effects & EF_FULLBRIGHT))
- RSurfShader_OpaqueWall_Pass_Light(ent, texture, surfchain);
- if (texture->skin.glow)
- RSurfShader_OpaqueWall_Pass_Glow(ent, texture, surfchain);
- if (fogenabled)
- RSurfShader_OpaqueWall_Pass_Fog(ent, texture, surfchain);
- }
-}
-
-Cshader_t Cshader_wall_lightmap = {{NULL, RSurfShader_Wall_Lightmap}, SHADERFLAGS_NEEDLIGHTMAP};
-Cshader_t Cshader_water = {{NULL, RSurfShader_Water}, 0};
-Cshader_t Cshader_sky = {{RSurfShader_Sky, NULL}, 0};
-
-int Cshader_count = 3;
-Cshader_t *Cshaders[3] =
-{
- &Cshader_wall_lightmap,
- &Cshader_water,
- &Cshader_sky
-};
-
-void R_UpdateTextureInfo(entity_render_t *ent)
-{
- int i, texframe, alttextures;
- texture_t *t;
-
- if (!ent->model)
- return;
-
- alttextures = ent->frame != 0;
- texframe = (int)(cl.time * 5.0f);
- for (i = 0;i < ent->model->numtextures;i++)
- {
- t = ent->model->textures + i;
- t->currentalpha = ent->alpha;
- if (t->flags & SURF_WATERALPHA)
- t->currentalpha *= r_wateralpha.value;
- if (ent->effects & EF_ADDITIVE)
- t->rendertype = SURFRENDER_ADD;
- else if (t->currentalpha < 1 || t->skin.fog != NULL)
- t->rendertype = SURFRENDER_ALPHA;
- else
- t->rendertype = SURFRENDER_OPAQUE;
- // we don't need to set currentframe if t->animated is false because
- // it was already set up by the texture loader for non-animating
- if (t->animated)
- t->currentframe = t->anim_frames[alttextures][(t->anim_total[alttextures] >= 2) ? (texframe % t->anim_total[alttextures]) : 0];
- }
-}
-
-void R_PrepareSurfaces(entity_render_t *ent)
-{
- int i, numsurfaces, *surfacevisframes;
- model_t *model;
- msurface_t *surf, *surfaces, **surfchain;
- vec3_t modelorg;
-
- if (!ent->model)
- return;
-
- model = ent->model;
- Matrix4x4_Transform(&ent->inversematrix, r_origin, modelorg);
- numsurfaces = model->nummodelsurfaces;
- surfaces = model->surfaces + model->firstmodelsurface;
- surfacevisframes = model->surfacevisframes + model->firstmodelsurface;
-
- R_UpdateTextureInfo(ent);
-
- if (r_dynamic.integer && r_shadow_lightingmode < 1)
- R_MarkLights(ent);
-
- if (model->light_ambient != r_ambient.value || model->light_scalebit != r_lightmapscalebit)
- {
- model->light_ambient = r_ambient.value;
- model->light_scalebit = r_lightmapscalebit;
- for (i = 0;i < model->nummodelsurfaces;i++)
- model->surfaces[i + model->firstmodelsurface].cached_dlight = true;
- }
- else
- {
- for (i = 0;i < model->light_styles;i++)
- {
- if (model->light_stylevalue[i] != d_lightstylevalue[model->light_style[i]])
- {
- model->light_stylevalue[i] = d_lightstylevalue[model->light_style[i]];
- for (surfchain = model->light_styleupdatechains[i];*surfchain;surfchain++)
- (**surfchain).cached_dlight = true;
- }
- }
- }
-
- for (i = 0, surf = surfaces;i < numsurfaces;i++, surf++)
- {
- if (surfacevisframes[i] == r_framecount)
- {
-#if !WORLDNODECULLBACKFACES
- // mark any backface surfaces as not visible
- if (PlaneDist(modelorg, surf->plane) < surf->plane->dist)
- {
- if (!(surf->flags & SURF_PLANEBACK))
- surfacevisframes[i] = -1;