Merge branch 'legacyglfixes' into 'master'

Add support for terrain floorClip and RF_ALWAYSONTOP in legacyGL

See merge request kart-krew-dev/ring-racers!8
This commit is contained in:
Eidolon 2025-09-15 20:59:15 -05:00
commit 898f69c2bd
2 changed files with 20 additions and 2 deletions

View file

@ -3415,6 +3415,11 @@ static void HWR_SplitSprite(gl_vissprite_t *spr)
return; // cap
blend = HWR_SurfaceBlend(blendmode, trans, &Surf);
// if sprite has PF_ALWAYSONTOP, draw on top of everything.
if (cv_debugrender_spriteclip.value || spr->mobj->renderflags & RF_ALWAYSONTOP)
blend |= PF_NoDepthTest;
if (!trans && !blendmode)
{
// BP: i agree that is little better in environement but it don't
@ -3896,6 +3901,11 @@ static void HWR_DrawSprite(gl_vissprite_t *spr)
return; // cap
blend = HWR_SurfaceBlend(blendmode, trans, &Surf);
// if sprite has PF_ALWAYSONTOP, draw on top of everything.
if (cv_debugrender_spriteclip.value || spr->mobj->renderflags & RF_ALWAYSONTOP)
blend |= PF_NoDepthTest;
if (!trans && !blendmode)
{
// BP: i agree that is little better in environement but it don't
@ -3921,7 +3931,10 @@ static void HWR_DrawSprite(gl_vissprite_t *spr)
if (HWR_UseShader())
{
shader = (R_ThingIsPaperSprite(spr->mobj) || R_ThingIsFloorSprite(spr->mobj)) ? SHADER_SPRITE : SHADER_SPRITECLIPHACK;;
shader = (R_ThingIsPaperSprite(spr->mobj)
|| R_ThingIsFloorSprite(spr->mobj)
|| (spr->mobj->terrain && spr->mobj->terrain->floorClip)
) ? SHADER_SPRITE : SHADER_SPRITECLIPHACK;
blend |= PF_ColorMapped;
}
@ -5007,6 +5020,9 @@ static void HWR_ProjectSprite(mobj_t *thing)
x1 = tr_x + x1 * rightcos;
x2 = tr_x - x2 * rightcos;
if (thing->terrain && thing->terrain->floorClip)
spr_topoffset -= thing->terrain->floorClip;
if (vflip)
{
gz = FIXED_TO_FLOAT(interp.z + thing->height) - (FIXED_TO_FLOAT(spr_topoffset) * this_yscale);

View file

@ -1723,6 +1723,8 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
HWD.pfnSetShader(SHADER_MODEL); // model shader
{
float this_scale = FIXED_TO_FLOAT(spr->mobj->scale);
fixed_t floorClip = spr->mobj->terrain ? spr->mobj->terrain->floorClip : 0;
float finalfloorClip = FIXED_TO_FLOAT(FixedMul(floorClip, mapobjectscale)*P_MobjFlip(spr->mobj));
float xs = this_scale * FIXED_TO_FLOAT(spr->mobj->spritexscale);
float ys = this_scale * FIXED_TO_FLOAT(spr->mobj->spriteyscale);
@ -1733,7 +1735,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
// offset perpendicular to the camera angle
p.x -= ox * gl_viewsin;
p.y += ox * gl_viewcos;
p.z += oy;
p.z += oy - finalfloorClip;
if (R_ThingIsUsingBakedOffsets(spr->mobj))
{