diff --git a/src/common/rendering/hwrenderer/data/hw_cvars.cpp b/src/common/rendering/hwrenderer/data/hw_cvars.cpp index 029095022..fe9af928a 100644 --- a/src/common/rendering/hwrenderer/data/hw_cvars.cpp +++ b/src/common/rendering/hwrenderer/data/hw_cvars.cpp @@ -168,7 +168,14 @@ CUSTOM_CVAR(Int, gl_wireframe, 0, CVAR_GLOBALCONFIG | CVAR_ARCHIVE) CVAR(Color, gl_wireframecolor, -1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE) -CUSTOM_CVAR(Int, gl_spritelight, 1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE) +CUSTOM_CVAR(Int, gl_spritelight, -1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE) { - if (self < 0 || self > 2) self = 1; // default gpu vertex, 0 = cpu, 1 = gpu vertex, 2 = gpu pixel + if (self < -1 || self > 2) self = -1; // default auto, auto (rt 1, non-rt 0) = -1 gpu vertex, 0 = cpu, 1 = gpu vertex, 2 = gpu pixel +} + +#include "common/rendering/vulkan/vk_renderdevice.h" + +int get_gl_spritelight() +{ + return gl_spritelight < 0 ? (static_cast(screen)->IsRayQueryEnabled() ? 1 : 0) : gl_spritelight; } \ No newline at end of file diff --git a/src/common/rendering/hwrenderer/data/hw_cvars.h b/src/common/rendering/hwrenderer/data/hw_cvars.h index 92a7d6670..db43bb828 100644 --- a/src/common/rendering/hwrenderer/data/hw_cvars.h +++ b/src/common/rendering/hwrenderer/data/hw_cvars.h @@ -63,4 +63,4 @@ EXTERN_CVAR(Bool, gl_strict_gldefs) EXTERN_CVAR(Int, gl_wireframe) EXTERN_CVAR(Color, gl_wireframecolor) -EXTERN_CVAR(Int, gl_spritelight) \ No newline at end of file +int get_gl_spritelight(); \ No newline at end of file diff --git a/src/rendering/hwrenderer/scene/hw_spritelight.cpp b/src/rendering/hwrenderer/scene/hw_spritelight.cpp index 21d5e6454..116bdde0f 100644 --- a/src/rendering/hwrenderer/scene/hw_spritelight.cpp +++ b/src/rendering/hwrenderer/scene/hw_spritelight.cpp @@ -129,7 +129,7 @@ float inverseSquareAttenuation(float dist, float radius, float strength) void HWDrawInfo::GetDynSpriteLight(AActor *self, sun_trace_cache_t * traceCache, double x, double y, double z, FLightNode *node, int portalgroup, float *out, bool fullbright) { - if (fullbright || gl_spritelight > 0) + if (fullbright || get_gl_spritelight() > 0) return; FDynamicLight *light; @@ -280,6 +280,8 @@ void HWDrawInfo::GetDynSpriteLightList(AActor *self, FDynLightData &modellightda ActorTraceStaticLight staticLight(self); + int gl_spritelight = get_gl_spritelight(); + if ((level.lightmaps && gl_spritelight > 0) || ActorTraceStaticLight::TraceSunVisibility(x, y, z, (self ? &self->StaticLightsTraceCache : nullptr), (self ? staticLight.ActorMoved : false))) { AddSunLightToList(modellightdata, x, y, z, self->Level->SunDirection, self->Level->SunColor * self->Level->SunIntensity, gl_spritelight > 0); diff --git a/src/rendering/hwrenderer/scene/hw_sprites.cpp b/src/rendering/hwrenderer/scene/hw_sprites.cpp index 493610f8a..d5844b952 100644 --- a/src/rendering/hwrenderer/scene/hw_sprites.cpp +++ b/src/rendering/hwrenderer/scene/hw_sprites.cpp @@ -109,6 +109,8 @@ CVARD(Bool, r_showhitbox, false, CVAR_GLOBALCONFIG | CVAR_CHEAT, "show actor hit void HWSprite::DrawSprite(HWDrawInfo *di, FRenderState &state, bool translucent) { + int gl_spritelight = get_gl_spritelight(); + state.SetShadeVertex(gl_spritelight == 1); bool additivefog = false; bool foglayer = false; @@ -650,7 +652,7 @@ bool HWSprite::CalculateVertices(HWDrawInfo* di, FVector3* v, DVector3* vp) inline void HWSprite::PutSprite(HWDrawInfo *di, FRenderState& state, bool translucent) { // That's a lot of checks... - if ((gl_spritelight > 0 || (modelframe && !modelframe->isVoxel && !(modelframeflags & MDL_NOPERPIXELLIGHTING))) && RenderStyle.BlendOp != STYLEOP_Shadow && gl_light_sprites && di->Level->HasDynamicLights && !di->isFullbrightScene() && !fullbright) + if ((get_gl_spritelight() > 0 || (modelframe && !modelframe->isVoxel && !(modelframeflags & MDL_NOPERPIXELLIGHTING))) && RenderStyle.BlendOp != STYLEOP_Shadow && gl_light_sprites && di->Level->HasDynamicLights && !di->isFullbrightScene() && !fullbright) { di->GetDynSpriteLightList(actor, lightdata); dynlightindex = state.UploadLights(lightdata); diff --git a/src/rendering/hwrenderer/scene/hw_weapon.cpp b/src/rendering/hwrenderer/scene/hw_weapon.cpp index 993c0f160..f2ac3963e 100644 --- a/src/rendering/hwrenderer/scene/hw_weapon.cpp +++ b/src/rendering/hwrenderer/scene/hw_weapon.cpp @@ -740,7 +740,7 @@ void HWDrawInfo::PreparePlayerSprites2D(sector_t * viewsector, area_t in_area, F if (hudsprite.RenderStyle.BlendOp != STYLEOP_Shadow && Level->HasDynamicLights && !isFullbrightScene() && gl_light_sprites) { GetDynSpriteLight(playermo, nullptr, nullptr, hudsprite.dynrgb); - if (gl_spritelight > 0) + if (get_gl_spritelight() > 0) { GetDynSpriteLightList(playermo, lightdata); }