X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=r_shadow.c;h=3abad9d0aff13f50b902409dd993d798318baa46;hb=HEAD;hp=7363602ac2839a1c6d7e27c70d993d1f65233748;hpb=6c43af5f0fbb35910c50d82ac6c0b0e26bb55012;p=xonotic%2Fdarkplaces.git diff --git a/r_shadow.c b/r_shadow.c index 7363602a..2c5cecd3 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -232,7 +232,7 @@ cvar_t r_shadow_bouncegrid_subsamples = {CF_CLIENT | CF_ARCHIVE, "r_shadow_bounc 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"}; @@ -1226,7 +1226,7 @@ static unsigned int R_Shadow_MakeTextures_SamplePoint(float x, float y, float z) float dist = sqrt(x*x+y*y+z*z); float intensity = dist < 1 ? ((1.0f - dist) * r_shadow_lightattenuationlinearscale.value / (r_shadow_lightattenuationdividebias.value + dist*dist)) : 0; // note this code could suffer byte order issues except that it is multiplying by an integer that reads the same both ways - return (unsigned char)bound(0, intensity * 256.0f, 255) * 0x01010101; + return bound(0, (unsigned int)(intensity * 256.0f), 255) * 0x01010101U; } static void R_Shadow_MakeTextures(void) @@ -2959,7 +2959,7 @@ void R_Shadow_RenderLighting(int texturenumsurfaces, const msurface_t **textures VectorNegate(specularcolor, specularcolor); GL_BlendEquationSubtract(true); } - RSurf_SetupDepthAndCulling(); + RSurf_SetupDepthAndCulling(false); switch (r_shadow_rendermode) { case R_SHADOW_RENDERMODE_VISIBLELIGHTING: @@ -2996,7 +2996,7 @@ void R_RTLight_Update(rtlight_t *rtlight, int isstatic, matrix4x4_t *matrix, vec 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; @@ -4561,7 +4561,8 @@ void R_Shadow_DrawCoronas(void) { 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) { @@ -4675,7 +4676,7 @@ static void R_Shadow_UpdateWorldLight(dlight_t *light, vec3_t origin, vec3_t ang 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; @@ -5099,14 +5100,14 @@ void R_Shadow_LoadWorldLightsFromMap_LightArghliteTyrlite(void) 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)) @@ -5318,7 +5319,7 @@ void R_Shadow_EditLights_Reload_f(cmd_state_t *cmd) { 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) { @@ -5391,7 +5392,7 @@ static void R_Shadow_EditLights_Edit_f(cmd_state_t *cmd) 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; @@ -5595,7 +5596,7 @@ static void R_Shadow_EditLights_Edit_f(cmd_state_t *cmd) 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; } @@ -5926,7 +5927,7 @@ static void R_Shadow_EditLights_CopyInfo_f(cmd_state_t *cmd) 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;