Fix a few renderflags oversights in OpenGL
This commit is contained in:
parent
be496e1bc1
commit
f6cb1798cc
|
@ -3665,7 +3665,7 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
static void HWR_RotateSpritePolyToAim(gl_vissprite_t *spr, FOutVector *wallVerts, const boolean precip)
|
static void HWR_RotateSpritePolyToAim(gl_vissprite_t *spr, FOutVector *wallVerts, const boolean precip)
|
||||||
{
|
{
|
||||||
if (cv_glspritebillboarding.value
|
if (cv_glspritebillboarding.value
|
||||||
&& spr && spr->mobj && !(spr->mobj->frame & FF_PAPERSPRITE)
|
&& spr && spr->mobj && !R_ThingIsPaperSprite(spr->mobj)
|
||||||
&& wallVerts)
|
&& wallVerts)
|
||||||
{
|
{
|
||||||
float basey = FIXED_TO_FLOAT(spr->mobj->z);
|
float basey = FIXED_TO_FLOAT(spr->mobj->z);
|
||||||
|
@ -3707,7 +3707,6 @@ static void HWR_SplitSprite(gl_vissprite_t *spr)
|
||||||
FBITFIELD blend = 0;
|
FBITFIELD blend = 0;
|
||||||
FBITFIELD occlusion;
|
FBITFIELD occlusion;
|
||||||
boolean use_linkdraw_hack = false;
|
boolean use_linkdraw_hack = false;
|
||||||
boolean splat = R_ThingIsFloorSprite(spr->mobj);
|
|
||||||
UINT8 alpha;
|
UINT8 alpha;
|
||||||
|
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
@ -3766,22 +3765,19 @@ static void HWR_SplitSprite(gl_vissprite_t *spr)
|
||||||
baseWallVerts[0].t = baseWallVerts[1].t = ((GLPatch_t *)gpatch->hardware)->max_t;
|
baseWallVerts[0].t = baseWallVerts[1].t = ((GLPatch_t *)gpatch->hardware)->max_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!splat)
|
// if it has a dispoffset, push it a little towards the camera
|
||||||
{
|
if (spr->dispoffset) {
|
||||||
// if it has a dispoffset, push it a little towards the camera
|
float co = -gl_viewcos*(0.05f*spr->dispoffset);
|
||||||
if (spr->dispoffset) {
|
float si = -gl_viewsin*(0.05f*spr->dispoffset);
|
||||||
float co = -gl_viewcos*(0.05f*spr->dispoffset);
|
baseWallVerts[0].z = baseWallVerts[3].z = baseWallVerts[0].z+si;
|
||||||
float si = -gl_viewsin*(0.05f*spr->dispoffset);
|
baseWallVerts[1].z = baseWallVerts[2].z = baseWallVerts[1].z+si;
|
||||||
baseWallVerts[0].z = baseWallVerts[3].z = baseWallVerts[0].z+si;
|
baseWallVerts[0].x = baseWallVerts[3].x = baseWallVerts[0].x+co;
|
||||||
baseWallVerts[1].z = baseWallVerts[2].z = baseWallVerts[1].z+si;
|
baseWallVerts[1].x = baseWallVerts[2].x = baseWallVerts[1].x+co;
|
||||||
baseWallVerts[0].x = baseWallVerts[3].x = baseWallVerts[0].x+co;
|
|
||||||
baseWallVerts[1].x = baseWallVerts[2].x = baseWallVerts[1].x+co;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let dispoffset work first since this adjust each vertex
|
|
||||||
HWR_RotateSpritePolyToAim(spr, baseWallVerts, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Let dispoffset work first since this adjust each vertex
|
||||||
|
HWR_RotateSpritePolyToAim(spr, baseWallVerts, false);
|
||||||
|
|
||||||
realtop = top = baseWallVerts[3].y;
|
realtop = top = baseWallVerts[3].y;
|
||||||
realbot = bot = baseWallVerts[0].y;
|
realbot = bot = baseWallVerts[0].y;
|
||||||
ttop = baseWallVerts[3].t;
|
ttop = baseWallVerts[3].t;
|
||||||
|
@ -3914,7 +3910,7 @@ static void HWR_SplitSprite(gl_vissprite_t *spr)
|
||||||
|
|
||||||
// The x and y only need to be adjusted in the case that it's not a papersprite
|
// The x and y only need to be adjusted in the case that it's not a papersprite
|
||||||
if (cv_glspritebillboarding.value
|
if (cv_glspritebillboarding.value
|
||||||
&& spr->mobj && !(spr->mobj->frame & FF_PAPERSPRITE))
|
&& spr->mobj && !R_ThingIsPaperSprite(spr->mobj))
|
||||||
{
|
{
|
||||||
// Get the x and z of the vertices so billboarding draws correctly
|
// Get the x and z of the vertices so billboarding draws correctly
|
||||||
realheight = realbot - realtop;
|
realheight = realbot - realtop;
|
||||||
|
@ -3983,7 +3979,7 @@ static void HWR_SplitSprite(gl_vissprite_t *spr)
|
||||||
static void HWR_DrawSprite(gl_vissprite_t *spr)
|
static void HWR_DrawSprite(gl_vissprite_t *spr)
|
||||||
{
|
{
|
||||||
FOutVector wallVerts[4];
|
FOutVector wallVerts[4];
|
||||||
patch_t *gpatch; // sprite patch converted to hardware
|
patch_t *gpatch;
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
const boolean splat = R_ThingIsFloorSprite(spr->mobj);
|
const boolean splat = R_ThingIsFloorSprite(spr->mobj);
|
||||||
|
|
||||||
|
@ -4284,7 +4280,7 @@ static inline void HWR_DrawPrecipitationSprite(gl_vissprite_t *spr)
|
||||||
{
|
{
|
||||||
FBITFIELD blend = 0;
|
FBITFIELD blend = 0;
|
||||||
FOutVector wallVerts[4];
|
FOutVector wallVerts[4];
|
||||||
patch_t *gpatch; // sprite patch converted to hardware
|
patch_t *gpatch;
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
|
|
||||||
if (!spr->mobj)
|
if (!spr->mobj)
|
||||||
|
@ -4337,7 +4333,7 @@ static inline void HWR_DrawPrecipitationSprite(gl_vissprite_t *spr)
|
||||||
// Always use the light at the top instead of whatever I was doing before
|
// Always use the light at the top instead of whatever I was doing before
|
||||||
INT32 light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false);
|
INT32 light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false);
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!R_ThingIsFullBright(spr->mobj))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
||||||
|
|
||||||
if (*sector->lightlist[light].extra_colormap)
|
if (*sector->lightlist[light].extra_colormap)
|
||||||
|
@ -4345,7 +4341,7 @@ static inline void HWR_DrawPrecipitationSprite(gl_vissprite_t *spr)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!R_ThingIsFullBright(spr->mobj))
|
||||||
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
|
@ -4921,8 +4917,8 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
angle_t ang;
|
angle_t ang;
|
||||||
INT32 heightsec, phs;
|
INT32 heightsec, phs;
|
||||||
const boolean papersprite = R_ThingIsPaperSprite(thing);
|
|
||||||
const boolean splat = R_ThingIsFloorSprite(thing);
|
const boolean splat = R_ThingIsFloorSprite(thing);
|
||||||
|
const boolean papersprite = (R_ThingIsPaperSprite(thing) && !splat);
|
||||||
angle_t mobjangle = (thing->player ? thing->player->drawangle : thing->angle);
|
angle_t mobjangle = (thing->player ? thing->player->drawangle : thing->angle);
|
||||||
float z1, z2;
|
float z1, z2;
|
||||||
|
|
||||||
|
|
|
@ -1314,7 +1314,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
|
|
||||||
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!R_ThingIsFullBright(spr->mobj))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
||||||
|
|
||||||
if (*sector->lightlist[light].extra_colormap)
|
if (*sector->lightlist[light].extra_colormap)
|
||||||
|
@ -1322,7 +1322,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!R_ThingIsFullBright(spr->mobj))
|
||||||
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
|
@ -1340,10 +1340,9 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
GLPatch_t *hwrPatch = NULL, *hwrBlendPatch = NULL;
|
GLPatch_t *hwrPatch = NULL, *hwrBlendPatch = NULL;
|
||||||
INT32 durs = spr->mobj->state->tics;
|
INT32 durs = spr->mobj->state->tics;
|
||||||
INT32 tics = spr->mobj->tics;
|
INT32 tics = spr->mobj->tics;
|
||||||
//mdlframe_t *next = NULL;
|
const boolean papersprite = (R_ThingIsPaperSprite(spr->mobj) && !R_ThingIsFloorSprite(spr->mobj));
|
||||||
const boolean papersprite = (spr->mobj->frame & FF_PAPERSPRITE);
|
const UINT8 flip = (UINT8)(!(spr->mobj->eflags & MFE_VERTICALFLIP) != !R_ThingVerticallyFlipped(spr->mobj));
|
||||||
const UINT8 flip = (UINT8)(!(spr->mobj->eflags & MFE_VERTICALFLIP) != !(spr->mobj->frame & FF_VERTICALFLIP));
|
const UINT8 hflip = (UINT8)(!(spr->mobj->mirrored) != !R_ThingHorizontallyFlipped(spr->mobj));
|
||||||
const UINT8 hflip = (UINT8)(!(spr->mobj->mirrored) != !(spr->mobj->frame & FF_HORIZONTALFLIP));
|
|
||||||
spritedef_t *sprdef;
|
spritedef_t *sprdef;
|
||||||
spriteframe_t *sprframe;
|
spriteframe_t *sprframe;
|
||||||
spriteinfo_t *sprinfo;
|
spriteinfo_t *sprinfo;
|
||||||
|
|
Loading…
Reference in New Issue