cvar_t r_shadow_bouncegrid_threaded = {CF_CLIENT | CF_ARCHIVE, "r_shadow_bouncegrid_threaded", "1", "enables use of taskqueue_maxthreads to perform the traces and slice rendering of bouncegrid"};
cvar_t r_coronas = {CF_CLIENT | CF_ARCHIVE, "r_coronas", "0", "brightness of corona flare effects around certain lights, 0 disables corona effects"};
cvar_t r_coronas_occlusionsizescale = {CF_CLIENT | CF_ARCHIVE, "r_coronas_occlusionsizescale", "0.1", "size of light source for corona occlusion checksum the proportion of hidden pixels controls corona intensity"};
-cvar_t r_coronas_occlusionquery = {CF_CLIENT | CF_ARCHIVE, "r_coronas_occlusionquery", "0", "fades coronas according to visibility"};
+cvar_t r_coronas_occlusionquery = {CF_CLIENT | CF_ARCHIVE, "r_coronas_occlusionquery", "0", "fades coronas according to visibility, requires OpenGL 4.4"};
cvar_t gl_flashblend = {CF_CLIENT | CF_ARCHIVE, "gl_flashblend", "0", "render bright coronas for dynamic lights instead of actual lighting, fast but ugly"};
cvar_t r_editlights = {CF_CLIENT, "r_editlights", "0", "enables .rtlights file editing mode"};
cvar_t r_editlights_cursordistance = {CF_CLIENT, "r_editlights_cursordistance", "1024", "maximum distance of cursor from eye"};
VectorNegate(specularcolor, specularcolor);
GL_BlendEquationSubtract(true);
}
- RSurf_SetupDepthAndCulling();
+ RSurf_SetupDepthAndCulling(false);
switch (r_shadow_rendermode)
{
case R_SHADOW_RENDERMODE_VISIBLELIGHTING:
VectorCopy(color, rtlight->color);
rtlight->cubemapname[0] = 0;
if (cubemapname && cubemapname[0])
- strlcpy(rtlight->cubemapname, cubemapname, sizeof(rtlight->cubemapname));
+ dp_strlcpy(rtlight->cubemapname, cubemapname, sizeof(rtlight->cubemapname));
rtlight->shadow = shadow;
rtlight->corona = corona;
rtlight->style = style;
{
case RENDERPATH_GL32:
case RENDERPATH_GLES2:
- usequery = r_coronas_occlusionquery.integer;
+ // buffer binding target GL_QUERY_BUFFER: Core since version 4.4
+ usequery = r_coronas_occlusionquery.integer && vid.support.glversion >= 44;
#ifndef USE_GLES2
if (usequery)
{
light->style = style;
light->shadow = shadowenable;
light->corona = corona;
- strlcpy(light->cubemapname, cubemapname, sizeof(light->cubemapname));
+ dp_strlcpy(light->cubemapname, cubemapname, sizeof(light->cubemapname));
light->coronasizescale = coronasizescale;
light->ambientscale = ambientscale;
light->diffusescale = diffusescale;
if (com_token[0] == '}')
break; // end of entity
if (com_token[0] == '_')
- strlcpy(key, com_token + 1, sizeof(key));
+ dp_strlcpy(key, com_token + 1, sizeof(key));
else
- strlcpy(key, com_token, sizeof(key));
+ dp_strlcpy(key, com_token, sizeof(key));
while (key[strlen(key)-1] == ' ') // remove trailing spaces
key[strlen(key)-1] = 0;
if (!COM_ParseToken_Simple(&data, false, false, true))
break; // error
- strlcpy(value, com_token, sizeof(value));
+ dp_strlcpy(value, com_token, sizeof(value));
// now that we have the key pair worked out...
if (!strcmp("light", key))
{
if (!cl.worldmodel)
return;
- strlcpy(r_shadow_mapname, cl.worldname, sizeof(r_shadow_mapname));
+ dp_strlcpy(r_shadow_mapname, cl.worldname, sizeof(r_shadow_mapname));
R_Shadow_ClearWorldLights();
if (r_shadow_realtime_world_importlightentitiesfrommap.integer <= 1)
{
radius = r_shadow_selectedlight->radius;
style = r_shadow_selectedlight->style;
if (*r_shadow_selectedlight->cubemapname)
- strlcpy(cubemapname, r_shadow_selectedlight->cubemapname, sizeof(cubemapname));
+ dp_strlcpy(cubemapname, r_shadow_selectedlight->cubemapname, sizeof(cubemapname));
else
cubemapname[0] = 0;
shadows = r_shadow_selectedlight->shadow;
return;
}
if (Cmd_Argc(cmd) == 3)
- strlcpy(cubemapname, Cmd_Argv(cmd, 2), sizeof(cubemapname));
+ dp_strlcpy(cubemapname, Cmd_Argv(cmd, 2), sizeof(cubemapname));
else
cubemapname[0] = 0;
}
r_shadow_bufferlight.radius = r_shadow_selectedlight->radius;
r_shadow_bufferlight.style = r_shadow_selectedlight->style;
if (*r_shadow_selectedlight->cubemapname)
- strlcpy(r_shadow_bufferlight.cubemapname, r_shadow_selectedlight->cubemapname, sizeof(r_shadow_bufferlight.cubemapname));
+ dp_strlcpy(r_shadow_bufferlight.cubemapname, r_shadow_selectedlight->cubemapname, sizeof(r_shadow_bufferlight.cubemapname));
else
r_shadow_bufferlight.cubemapname[0] = 0;
r_shadow_bufferlight.shadow = r_shadow_selectedlight->shadow;