X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=r_light.c;h=b61ec11fbc32ed74c8128f391b5d47850fe4fc7e;hb=f489a657f28418efa08ca8907f5f78e17b44655f;hp=5b2b34961e824c2acdaf6ede61d1a0195907e742;hpb=5a42835b26f8877bc4bbdc6e0a35e05961cf4f2a;p=xonotic%2Fdarkplaces.git diff --git a/r_light.c b/r_light.c index 5b2b3496..b61ec11f 100644 --- a/r_light.c +++ b/r_light.c @@ -77,14 +77,16 @@ void R_DrawCoronas(void) int i, lnum, flag; float cscale, scale, viewdist, dist; dlight_t *light; + rtlight_t *rtlight; if (r_coronas.value < 0.01) return; R_Mesh_Matrix(&identitymatrix); viewdist = DotProduct(r_view.origin, r_view.forward); flag = r_refdef.rtworld ? LIGHTFLAG_REALTIMEMODE : LIGHTFLAG_NORMALMODE; + // FIXME: these traces should scan all render entities instead of cl.world for (lnum = 0, light = r_shadow_worldlightchain;light;light = light->next, lnum++) { - if ((light->flags & flag) && light->corona * r_coronas.value > 0 && (r_shadow_debuglight.integer < 0 || r_shadow_debuglight.integer == lnum) && (dist = (DotProduct(light->rtlight.shadoworigin, r_view.forward) - viewdist)) >= 24.0f && CL_TraceBox(light->rtlight.shadoworigin, vec3_origin, vec3_origin, r_view.origin, true, NULL, SUPERCONTENTS_SOLID, false).fraction == 1) + if ((light->flags & flag) && light->corona * r_coronas.value > 0 && (r_shadow_debuglight.integer < 0 || r_shadow_debuglight.integer == lnum) && (dist = (DotProduct(light->rtlight.shadoworigin, r_view.forward) - viewdist)) >= 24.0f && CL_Move(light->rtlight.shadoworigin, vec3_origin, vec3_origin, r_view.origin, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID, true, false, NULL, false).fraction == 1) { cscale = light->rtlight.corona * r_coronas.value * 0.25f; scale = light->rtlight.radius * light->rtlight.coronasizescale; @@ -93,17 +95,17 @@ void R_DrawCoronas(void) } for (i = 0;i < r_refdef.numlights;i++) { - light = r_refdef.lights[i]; - if ((light->flags & flag) && light->corona * r_coronas.value > 0 && (dist = (DotProduct(light->origin, r_view.forward) - viewdist)) >= 24.0f && CL_TraceBox(light->origin, vec3_origin, vec3_origin, r_view.origin, true, NULL, SUPERCONTENTS_SOLID, false).fraction == 1) + rtlight = &r_refdef.lights[i]; + if ((rtlight->flags & flag) && rtlight->corona * r_coronas.value > 0 && (dist = (DotProduct(rtlight->shadoworigin, r_view.forward) - viewdist)) >= 24.0f && CL_Move(rtlight->shadoworigin, vec3_origin, vec3_origin, r_view.origin, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID, true, false, NULL, false).fraction == 1) { - cscale = light->corona * r_coronas.value * 0.25f; - scale = light->rtlight.radius * light->rtlight.coronasizescale; + cscale = rtlight->corona * r_coronas.value * 0.25f; + scale = rtlight->radius * rtlight->coronasizescale; if (gl_flashblend.integer) { cscale *= 4.0f; scale *= 2.0f; } - R_DrawSprite(GL_ONE, GL_ONE, lightcorona, NULL, true, light->origin, r_view.right, r_view.up, scale, -scale, -scale, scale, light->color[0] * cscale, light->color[1] * cscale, light->color[2] * cscale, 1); + R_DrawSprite(GL_ONE, GL_ONE, lightcorona, NULL, true, rtlight->shadoworigin, r_view.right, r_view.up, scale, -scale, -scale, scale, rtlight->color[0] * cscale, rtlight->color[1] * cscale, rtlight->color[2] * cscale, 1); } } } @@ -133,14 +135,14 @@ void R_CompleteLightPoint(vec3_t ambientcolor, vec3_t diffusecolor, vec3_t diffu { int i; float f, v[3]; - dlight_t *light; + rtlight_t *light; for (i = 0;i < r_refdef.numlights;i++) { - light = r_refdef.lights[i]; - Matrix4x4_Transform(&light->rtlight.matrix_worldtolight, p, v); + light = &r_refdef.lights[i]; + Matrix4x4_Transform(&light->matrix_worldtolight, p, v); f = 1 - VectorLength2(v); - if (f > 0 && CL_TraceBox(p, vec3_origin, vec3_origin, light->origin, false, NULL, SUPERCONTENTS_SOLID, false).fraction == 1) - VectorMA(ambientcolor, f, light->rtlight.currentcolor, ambientcolor); + if (f > 0 && CL_Move(p, vec3_origin, vec3_origin, light->shadoworigin, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID, true, false, NULL, false).fraction == 1) + VectorMA(ambientcolor, f, light->currentcolor, ambientcolor); } } }