]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_light.c
fix a logic bug in EntLight handling (should have been checking r_shadow_realtime_wor...
[xonotic/darkplaces.git] / r_light.c
index bd1bf3a8e00841b28bd769a5846937432c345c53..ca6817ce95070febc83237109108d803f44a9499 100644 (file)
--- a/r_light.c
+++ b/r_light.c
@@ -146,12 +146,12 @@ void R_DrawCoronas(void)
        if (!r_coronas.integer)
                return;
        R_Mesh_Matrix(&r_identitymatrix);
-       viewdist = DotProduct(r_origin, vpn);
+       viewdist = DotProduct(r_vieworigin, r_viewforward);
        for (i = 0;i < r_numdlights;i++)
        {
                rd = r_dlight + i;
-               dist = (DotProduct(rd->origin, vpn) - viewdist);
-               if (dist >= 24.0f && CL_TraceLine(rd->origin, r_origin, NULL, NULL, true, NULL, SUPERCONTENTS_SOLID) == 1)
+               dist = (DotProduct(rd->origin, r_viewforward) - viewdist);
+               if (dist >= 24.0f && CL_TraceLine(rd->origin, r_vieworigin, NULL, NULL, true, NULL, SUPERCONTENTS_SOLID) == 1)
                {
                        cscale = (1.0f / 131072.0f);
                        scale = rd->cullradius * 0.25f;
@@ -160,7 +160,7 @@ void R_DrawCoronas(void)
                                cscale *= 4.0f;
                                scale *= 2.0f;
                        }
-                       R_DrawSprite(GL_ONE, GL_ONE, lightcorona, true, rd->origin, vright, vup, scale, -scale, -scale, scale, rd->light[0] * cscale, rd->light[1] * cscale, rd->light[2] * cscale, 1);
+                       R_DrawSprite(GL_ONE, GL_ONE, lightcorona, true, rd->origin, r_viewright, r_viewup, scale, -scale, -scale, scale, rd->light[0] * cscale, rd->light[1] * cscale, rd->light[2] * cscale, 1);
                }
        }
 }
@@ -252,8 +252,7 @@ static void R_RecursiveMarkLights(entity_render_t *ent, vec3_t lightorigin, rdli
                        {
                                surf->dlightbits[0] = surf->dlightbits[1] = surf->dlightbits[2] = surf->dlightbits[3] = surf->dlightbits[4] = surf->dlightbits[5] = surf->dlightbits[6] = surf->dlightbits[7] = 0;
                                surf->dlightframe = r_framecount;
-                               if (r_dlightmap.integer)
-                                       surf->cached_dlight = true;
+                               surf->cached_dlight = true;
                        }
                        surf->dlightbits[bitindex] |= bit;
                }
@@ -540,7 +539,9 @@ void R_LightModel_CalcVertexColors(const float *ambientcolor4f, const float *dif
        float color[4], v[3], dot, dist2, f, dnormal[3];
        nearlight_t *nl;
        usediffuse = DotProduct(diffusecolor, diffusecolor) > 0;
-       VectorCopy(diffusenormal, dnormal);
+       // negate the diffuse normal to avoid the need to negate the
+       // dotproduct on each vertex
+       VectorNegate(diffusenormal, dnormal);
        if (usediffuse)
                VectorNormalize(dnormal);
        // directional shading code here
@@ -551,7 +552,7 @@ void R_LightModel_CalcVertexColors(const float *ambientcolor4f, const float *dif
                // silly directional diffuse shading
                if (usediffuse)
                {
-                       dot = -DotProduct(normal3f, dnormal);
+                       dot = DotProduct(normal3f, dnormal);
                        if (dot > 0)
                                VectorMA(color, dot, diffusecolor, color);
                }
@@ -589,7 +590,7 @@ void R_UpdateEntLights(entity_render_t *ent)
        int i;
        const mlight_t *sl;
        vec3_t v;
-       if (r_shadow_realtime_dlight.integer || gl_flashblend.integer)
+       if (r_shadow_realtime_world.integer)
                return;
        VectorSubtract(ent->origin, ent->entlightsorigin, v);
        if (ent->entlightsframe != (r_framecount - 1) || (realtime > ent->entlightstime && DotProduct(v,v) >= 1.0f))