R_Shadow_MakeTextures_MakeCorona();
// Editor light sprites
- r_editlights_sprcursor = R_SkinFrame_LoadInternal8bit("gfx/editlights/cursor", TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
+ r_editlights_sprcursor = R_SkinFrame_LoadInternal8bit("gfx/editlights/cursor", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
"................"
".3............3."
"..5...2332...5.."
".3............3."
"................"
, 16, 16, palette_bgra_embeddedpic, palette_bgra_embeddedpic);
- r_editlights_sprlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/light", TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
+ r_editlights_sprlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/light", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
"................"
"................"
"......1111......"
"................"
"................"
, 16, 16, palette_bgra_embeddedpic, palette_bgra_embeddedpic);
- r_editlights_sprnoshadowlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/noshadow", TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
+ r_editlights_sprnoshadowlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/noshadow", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
"................"
"................"
"......1111......"
"................"
"................"
, 16, 16, palette_bgra_embeddedpic, palette_bgra_embeddedpic);
- r_editlights_sprcubemaplight = R_SkinFrame_LoadInternal8bit("gfx/editlights/cubemaplight", TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
+ r_editlights_sprcubemaplight = R_SkinFrame_LoadInternal8bit("gfx/editlights/cubemaplight", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
"................"
"................"
"......2772......"
"................"
"................"
, 16, 16, palette_bgra_embeddedpic, palette_bgra_embeddedpic);
- r_editlights_sprcubemapnoshadowlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/cubemapnoshadowlight", TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
+ r_editlights_sprcubemapnoshadowlight = R_SkinFrame_LoadInternal8bit("gfx/editlights/cubemapnoshadowlight", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (const unsigned char *)
"................"
"................"
"......2772......"
"................"
"................"
, 16, 16, palette_bgra_embeddedpic, palette_bgra_embeddedpic);
- r_editlights_sprselection = R_SkinFrame_LoadInternal8bit("gfx/editlights/selection", TEXF_ALPHA | TEXF_CLAMP, (unsigned char *)
+ r_editlights_sprselection = R_SkinFrame_LoadInternal8bit("gfx/editlights/selection", TEXF_PRECACHE | TEXF_ALPHA | TEXF_CLAMP, (unsigned char *)
"................"
".777752..257777."
".742........247."
R_MeshQueue_AddTransparent(r_editlights_cursorlocation, R_Shadow_DrawCursor_TransparentCallback, NULL, 0, NULL);
}
-void R_SampleRTLights(const float *pos, float *sample)
+int R_Shadow_GetRTLightInfo(unsigned int lightindex, float *origin, float *radius, float *color)
{
- int flag;
- size_t lightindex;
+ unsigned int range;
dlight_t *light;
rtlight_t *rtlight;
- size_t range;
- vec3_t relativepoint;
- vec3_t localpoint;
- vec3_t color;
- vec_t dist;
- vec_t intensity;
- flag = LIGHTFLAG_REALTIMEMODE;
range = Mem_ExpandableArray_IndexRange(&r_shadow_worldlightsarray);
- for (lightindex = 0;lightindex < range;lightindex++)
- {
- light = (dlight_t *) Mem_ExpandableArray_RecordAtIndex(&r_shadow_worldlightsarray, lightindex);
- if (!light)
- continue;
- rtlight = &light->rtlight;
- if (!(rtlight->flags & flag))
- continue;
- VectorSubtract(rtlight->shadoworigin, pos, relativepoint);
- // early out
- if (VectorLength2(relativepoint) >= rtlight->radius*rtlight->radius)
- continue;
- Matrix4x4_Transform(&rtlight->matrix_worldtolight, pos, localpoint);
- dist = VectorLength(localpoint);
- intensity = dist < 1 ? ((1.0f - dist) * r_shadow_lightattenuationlinearscale.value / (r_shadow_lightattenuationdividebias.value + dist*dist)) : 0;
- if (intensity <= 0)
- continue;
- // scale down intensity to add to both ambient and diffuse
- intensity *= 0.5f;
- VectorNormalize(relativepoint);
- VectorScale(rtlight->color, intensity, color);
- VectorMA(sample , 1.0f , color, sample );
- VectorMA(sample + 3, relativepoint[0], color, sample + 3);
- VectorMA(sample + 6, relativepoint[1], color, sample + 6);
- VectorMA(sample + 9, relativepoint[2], color, sample + 9);
- intensity *= VectorLength(color);
- VectorMA(sample + 12, intensity, relativepoint, sample + 12);
- }
+ if (lightindex >= range)
+ return -1;
+ light = (dlight_t *) Mem_ExpandableArray_RecordAtIndex(&r_shadow_worldlightsarray, lightindex);
+ if (!light)
+ return 0;
+ rtlight = &light->rtlight;
+ //if (!(rtlight->flags & flag))
+ // return 0;
+ VectorCopy(rtlight->shadoworigin, origin);
+ *radius = rtlight->radius;
+ VectorCopy(rtlight->color, color);
+ return 1;
}
void R_Shadow_SelectLightInView(void)