From b2040a0892b69e4e52f8ea4407469eea38722b6d Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 8 Sep 2024 22:25:24 +0200 Subject: [PATCH] Add support for the poor souls on a 386 that can't afford to use full screen --- src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h | 3 +++ src/rendering/hwrenderer/scene/hw_drawinfo.cpp | 2 ++ wadsrc/static/shaders/scene/binding_rsbuffers.glsl | 2 ++ wadsrc/static/shaders/scene/frag_main.glsl | 2 +- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h index bdbc91707..fed7827fb 100644 --- a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h +++ b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h @@ -20,6 +20,9 @@ struct HWViewpointUniforms VSMatrix mNormalViewMatrix; FVector4 mCameraPos; FVector4 mClipLine; + + int mViewOffsetX = 0; + int mViewOffsetY = 0; float mGlobVis = 1.f; int mPalLightLevels = 0; diff --git a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp index 53332b9f9..78bae4534 100644 --- a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp +++ b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp @@ -111,6 +111,8 @@ void HWDrawInfo::StartScene(FRenderViewpoint &parentvp, HWViewpointUniforms *uni VPUniforms.mProjectionMatrix.loadIdentity(); VPUniforms.mViewMatrix.loadIdentity(); VPUniforms.mNormalViewMatrix.loadIdentity(); + VPUniforms.mViewOffsetX = -screen->mSceneViewport.left; + VPUniforms.mViewOffsetY = -screen->mSceneViewport.top; VPUniforms.mViewHeight = viewheight; if (lightmode == ELightMode::Build) { diff --git a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl index 5356fb66d..bdddc0f4f 100644 --- a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl +++ b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl @@ -9,6 +9,8 @@ layout(set = 1, binding = 0, std140) uniform ViewpointUBO vec4 uCameraPos; vec4 uClipLine; + ivec2 uViewOffset; + float uGlobVis; // uGlobVis = R_GetGlobVis(r_visibility) / 32.0 int uPalLightLevels; int uViewHeight; // Software fuzz scaling diff --git a/wadsrc/static/shaders/scene/frag_main.glsl b/wadsrc/static/shaders/scene/frag_main.glsl index 6fe89fe10..ebaf25c66 100644 --- a/wadsrc/static/shaders/scene/frag_main.glsl +++ b/wadsrc/static/shaders/scene/frag_main.glsl @@ -28,7 +28,7 @@ void main() #endif #ifdef USE_DEPTHFADEFALLOFF - float behindFragmentDepth = texelFetch(LinearDepth, ivec2(gl_FragCoord.xy), 0).r; + float behindFragmentDepth = texelFetch(LinearDepth, uViewOffset + ivec2(gl_FragCoord.xy), 0).r; material.Base.a *= clamp((behindFragmentDepth - pixelpos.w) / uDepthFadeFalloff, 0.0, 1.0); #endif