X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=r_shadow.c;h=11e62aae756f97efb7489603adb7f137f931483d;hb=a81420212fe295610d9266855ba2d7200db1b666;hp=9a9071a853434108c9eb4a4b62446d692ca98fd5;hpb=0869ac67d15e53f88a26fadecdddb87b118689c4;p=xonotic%2Fdarkplaces.git diff --git a/r_shadow.c b/r_shadow.c index 9a9071a8..11e62aae 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -160,12 +160,14 @@ cvar_t r_shadow_debuglight = {0, "r_shadow_debuglight", "-1"}; cvar_t r_shadow_scissor = {0, "r_shadow_scissor", "1"}; cvar_t r_shadow_bumpscale_bumpmap = {0, "r_shadow_bumpscale_bumpmap", "4"}; cvar_t r_shadow_bumpscale_basetexture = {0, "r_shadow_bumpscale_basetexture", "0"}; -cvar_t r_shadow_polygonoffset = {0, "r_shadow_polygonoffset", "0"}; +cvar_t r_shadow_polygonfactor = {0, "r_shadow_polygonfactor", "0"}; +cvar_t r_shadow_polygonoffset = {0, "r_shadow_polygonoffset", "1"}; cvar_t r_shadow_portallight = {0, "r_shadow_portallight", "1"}; cvar_t r_shadow_projectdistance = {0, "r_shadow_projectdistance", "10000"}; cvar_t r_shadow_texture3d = {0, "r_shadow_texture3d", "1"}; cvar_t r_shadow_singlepassvolumegeneration = {0, "r_shadow_singlepassvolumegeneration", "1"}; -cvar_t r_shadow_shadows = {CVAR_SAVE, "r_shadow_shadows", "1"}; +cvar_t r_shadow_worldshadows = {0, "r_shadow_worldshadows", "1"}; +cvar_t r_shadow_dlightshadows = {CVAR_SAVE, "r_shadow_dlightshadows", "1"}; cvar_t r_shadow_showtris = {0, "r_shadow_showtris", "0"}; int c_rt_lights, c_rt_clears, c_rt_scissored; @@ -249,12 +251,14 @@ void R_Shadow_Help_f(void) "r_shadow_scissor : use scissor optimization\n" "r_shadow_bumpscale_bumpmap : depth scale for bumpmap conversion\n" "r_shadow_bumpscale_basetexture : base texture as bumpmap with this scale\n" +"r_shadow_polygonfactor : nudge shadow volumes closer/further\n" "r_shadow_polygonoffset : nudge shadow volumes closer/further\n" "r_shadow_portallight : use portal visibility for static light precomputation\n" "r_shadow_projectdistance : shadow volume projection distance\n" "r_shadow_texture3d : use 3d attenuation texture (if hardware supports)\n" "r_shadow_singlepassvolumegeneration : selects shadow volume algorithm\n" -"r_shadow_shadows : dlight shadows (world always has shadows)\n" +"r_shadow_worldshadows : enable world shadows\n" +"r_shadow_dlightshadows : enable dlight shadows\n" "Commands:\n" "r_shadow_help : this help\n" ); @@ -275,12 +279,14 @@ void R_Shadow_Init(void) Cvar_RegisterVariable(&r_shadow_scissor); Cvar_RegisterVariable(&r_shadow_bumpscale_bumpmap); Cvar_RegisterVariable(&r_shadow_bumpscale_basetexture); + Cvar_RegisterVariable(&r_shadow_polygonfactor); Cvar_RegisterVariable(&r_shadow_polygonoffset); Cvar_RegisterVariable(&r_shadow_portallight); Cvar_RegisterVariable(&r_shadow_projectdistance); Cvar_RegisterVariable(&r_shadow_texture3d); Cvar_RegisterVariable(&r_shadow_singlepassvolumegeneration); - Cvar_RegisterVariable(&r_shadow_shadows); + Cvar_RegisterVariable(&r_shadow_worldshadows); + Cvar_RegisterVariable(&r_shadow_dlightshadows); Cvar_RegisterVariable(&r_shadow_showtris); Cmd_AddCommand("r_shadow_help", R_Shadow_Help_f); R_Shadow_EditLights_Init(); @@ -862,13 +868,14 @@ void R_Shadow_Stage_ShadowVolumes(void) GL_BlendFunc(GL_ONE, GL_ZERO); GL_DepthMask(false); GL_DepthTest(true); - if (r_shadow_polygonoffset.value != 0) - { - qglPolygonOffset(1.0f, r_shadow_polygonoffset.value); - qglEnable(GL_POLYGON_OFFSET_FILL); - } - else - qglDisable(GL_POLYGON_OFFSET_FILL); + qglPolygonOffset(r_shadow_polygonfactor.value, r_shadow_polygonoffset.value); + //if (r_shadow_polygonoffset.value != 0) + //{ + // qglPolygonOffset(r_shadow_polygonfactor.value, r_shadow_polygonoffset.value); + // qglEnable(GL_POLYGON_OFFSET_FILL); + //} + //else + // qglDisable(GL_POLYGON_OFFSET_FILL); qglDepthFunc(GL_LESS); qglCullFace(GL_FRONT); // quake is backwards, this culls back faces qglEnable(GL_STENCIL_TEST); @@ -894,7 +901,8 @@ void R_Shadow_Stage_LightWithoutShadows(void) GL_BlendFunc(GL_ONE, GL_ONE); GL_DepthMask(false); GL_DepthTest(true); - qglDisable(GL_POLYGON_OFFSET_FILL); + qglPolygonOffset(0, 0); + //qglDisable(GL_POLYGON_OFFSET_FILL); GL_Color(1, 1, 1, 1); qglColorMask(1, 1, 1, 1); qglDepthFunc(GL_EQUAL); @@ -914,7 +922,8 @@ void R_Shadow_Stage_LightWithShadows(void) GL_BlendFunc(GL_ONE, GL_ONE); GL_DepthMask(false); GL_DepthTest(true); - qglDisable(GL_POLYGON_OFFSET_FILL); + qglPolygonOffset(0, 0); + //qglDisable(GL_POLYGON_OFFSET_FILL); GL_Color(1, 1, 1, 1); qglColorMask(1, 1, 1, 1); qglDepthFunc(GL_EQUAL); @@ -936,7 +945,8 @@ void R_Shadow_Stage_End(void) GL_BlendFunc(GL_ONE, GL_ZERO); GL_DepthMask(true); GL_DepthTest(true); - qglDisable(GL_POLYGON_OFFSET_FILL); + qglPolygonOffset(0, 0); + //qglDisable(GL_POLYGON_OFFSET_FILL); GL_Color(1, 1, 1, 1); qglColorMask(1, 1, 1, 1); qglDisable(GL_SCISSOR_TEST);