mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-01-18 22:51:39 +00:00
- adjustments for floating point changes.
This commit is contained in:
parent
48afdd7dcb
commit
b54b34a512
19 changed files with 107 additions and 91 deletions
|
@ -3,6 +3,7 @@
|
||||||
#define __GLC_DATA_H
|
#define __GLC_DATA_H
|
||||||
|
|
||||||
#include "doomtype.h"
|
#include "doomtype.h"
|
||||||
|
#include "vectors.h"
|
||||||
|
|
||||||
struct GLRenderSettings
|
struct GLRenderSettings
|
||||||
{
|
{
|
||||||
|
|
|
@ -361,7 +361,7 @@ static void CollectPortalSectors(FPortalMap &collection)
|
||||||
ASkyViewpoint *SkyBox = barrier_cast<ASkyViewpoint*>(sec->SkyBoxes[j]);
|
ASkyViewpoint *SkyBox = barrier_cast<ASkyViewpoint*>(sec->SkyBoxes[j]);
|
||||||
if (SkyBox != NULL && SkyBox->bAlways && SkyBox->Mate != NULL)
|
if (SkyBox != NULL && SkyBox->bAlways && SkyBox->Mate != NULL)
|
||||||
{
|
{
|
||||||
FPortalID id = { SkyBox->X() - SkyBox->Mate->X(), SkyBox->Y() - SkyBox->Mate->Y() };
|
FPortalID id = { SkyBox->_f_X() - SkyBox->Mate->_f_X(), SkyBox->_f_Y() - SkyBox->Mate->_f_Y() };
|
||||||
|
|
||||||
FPortalSectors &sss = collection[id];
|
FPortalSectors &sss = collection[id];
|
||||||
FPortalSector ss = { sec, j };
|
FPortalSector ss = { sec, j };
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "gl/system/gl_system.h"
|
||||||
|
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
#include "m_random.h"
|
#include "m_random.h"
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
|
@ -174,7 +176,7 @@ void ADynamicLight::PostBeginPlay()
|
||||||
Activate (NULL);
|
Activate (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
subsector = R_PointInSubsector(X(), Y());
|
subsector = R_PointInSubsector(_f_X(), _f_Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,7 +195,7 @@ void ADynamicLight::Activate(AActor *activator)
|
||||||
|
|
||||||
if (lighttype == PulseLight)
|
if (lighttype == PulseLight)
|
||||||
{
|
{
|
||||||
float pulseTime = ANGLE_TO_FLOAT(this->angle) / TICRATE;
|
float pulseTime = Angles.Yaw.Degrees / TICRATE;
|
||||||
|
|
||||||
m_lastUpdate = level.maptime;
|
m_lastUpdate = level.maptime;
|
||||||
m_cycler.SetParams(float(m_intensity[1]), float(m_intensity[0]), pulseTime);
|
m_cycler.SetParams(float(m_intensity[1]), float(m_intensity[0]), pulseTime);
|
||||||
|
@ -257,7 +259,7 @@ void ADynamicLight::Tick()
|
||||||
case FlickerLight:
|
case FlickerLight:
|
||||||
{
|
{
|
||||||
BYTE rnd = randLight();
|
BYTE rnd = randLight();
|
||||||
float pct = ANGLE_TO_FLOAT(angle)/360.f;
|
float pct = Angles.Yaw.Degrees / 360.f;
|
||||||
|
|
||||||
m_currentIntensity = float(m_intensity[rnd >= pct * 255]);
|
m_currentIntensity = float(m_intensity[rnd >= pct * 255]);
|
||||||
break;
|
break;
|
||||||
|
@ -270,7 +272,7 @@ void ADynamicLight::Tick()
|
||||||
|
|
||||||
m_tickCount++;
|
m_tickCount++;
|
||||||
|
|
||||||
if (m_tickCount > ANGLE_TO_FLOAT(angle))
|
if (m_tickCount > Angles.Yaw.Degrees)
|
||||||
{
|
{
|
||||||
m_currentIntensity = float(m_intensity[0] + (amt * flickerRange));
|
m_currentIntensity = float(m_intensity[0] + (amt * flickerRange));
|
||||||
m_tickCount = 0;
|
m_tickCount = 0;
|
||||||
|
@ -283,7 +285,7 @@ void ADynamicLight::Tick()
|
||||||
case ColorFlickerLight:
|
case ColorFlickerLight:
|
||||||
{
|
{
|
||||||
BYTE rnd = randLight();
|
BYTE rnd = randLight();
|
||||||
float pct = ANGLE_TO_FLOAT(angle)/360.f;
|
float pct = ANGLE2FLOAT(angle)/360.f;
|
||||||
|
|
||||||
m_currentIntensity = m_intensity[rnd >= pct * 255];
|
m_currentIntensity = m_intensity[rnd >= pct * 255];
|
||||||
break;
|
break;
|
||||||
|
@ -296,7 +298,7 @@ void ADynamicLight::Tick()
|
||||||
|
|
||||||
m_tickCount++;
|
m_tickCount++;
|
||||||
|
|
||||||
if (m_tickCount > ANGLE_TO_FLOAT(angle))
|
if (m_tickCount > ANGLE2FLOAT(angle))
|
||||||
{
|
{
|
||||||
m_currentIntensity = m_intensity[0] + (amt * flickerRange);
|
m_currentIntensity = m_intensity[0] + (amt * flickerRange);
|
||||||
m_tickCount = 0;
|
m_tickCount = 0;
|
||||||
|
@ -337,16 +339,16 @@ void ADynamicLight::Tick()
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
void ADynamicLight::UpdateLocation()
|
void ADynamicLight::UpdateLocation()
|
||||||
{
|
{
|
||||||
fixed_t oldx=X();
|
double oldx= X();
|
||||||
fixed_t oldy=Y();
|
double oldy= Y();
|
||||||
fixed_t oldradius=radius;
|
double oldradius= radius;
|
||||||
float intensity;
|
float intensity;
|
||||||
|
|
||||||
if (IsActive())
|
if (IsActive())
|
||||||
{
|
{
|
||||||
if (target)
|
if (target)
|
||||||
{
|
{
|
||||||
angle_t angle = target->angle>>ANGLETOFINESHIFT;
|
angle_t angle = target->_f_angle() >> ANGLETOFINESHIFT;
|
||||||
fixedvec3 pos = target->Vec3Offset(
|
fixedvec3 pos = target->Vec3Offset(
|
||||||
FixedMul(m_offX, finecosine[angle]) + FixedMul(m_offZ, finesine[angle]),
|
FixedMul(m_offX, finecosine[angle]) + FixedMul(m_offZ, finesine[angle]),
|
||||||
FixedMul(m_offX, finesine[angle]) - FixedMul(m_offZ, finecosine[angle]),
|
FixedMul(m_offX, finesine[angle]) - FixedMul(m_offZ, finecosine[angle]),
|
||||||
|
@ -363,7 +365,7 @@ void ADynamicLight::UpdateLocation()
|
||||||
// The radius being used here is always the maximum possible with the
|
// The radius being used here is always the maximum possible with the
|
||||||
// current settings. This avoids constant relinking of flickering lights
|
// current settings. This avoids constant relinking of flickering lights
|
||||||
|
|
||||||
if (lighttype == FlickerLight || lighttype == RandomFlickerLight)
|
if (lighttype == FlickerLight || lighttype == RandomFlickerLight)
|
||||||
{
|
{
|
||||||
intensity = float(MAX(m_intensity[0], m_intensity[1]));
|
intensity = float(MAX(m_intensity[0], m_intensity[1]));
|
||||||
}
|
}
|
||||||
|
@ -371,9 +373,9 @@ void ADynamicLight::UpdateLocation()
|
||||||
{
|
{
|
||||||
intensity = m_currentIntensity;
|
intensity = m_currentIntensity;
|
||||||
}
|
}
|
||||||
radius = FLOAT2FIXED(intensity * 2.0f * gl_lights_size);
|
radius = intensity * 2.0f * gl_lights_size;
|
||||||
|
|
||||||
if (X()!=oldx || Y()!=oldy || radius!=oldradius)
|
if (X() != oldx || Y() != oldy || radius != oldradius)
|
||||||
{
|
{
|
||||||
//Update the light lists
|
//Update the light lists
|
||||||
LinkLight();
|
LinkLight();
|
||||||
|
@ -599,9 +601,9 @@ void ADynamicLight::CollectWithinRadius(const fixedvec3 &pos, subsector_t *subSe
|
||||||
{
|
{
|
||||||
line_t *other = subSec->firstline->linedef;
|
line_t *other = subSec->firstline->linedef;
|
||||||
AActor *sb = subSec->sector->SkyBoxes[sector_t::ceiling];
|
AActor *sb = subSec->sector->SkyBoxes[sector_t::ceiling];
|
||||||
if (sb->threshold < Z() + radius)
|
if (sb->specialf1 < Z() + radius)
|
||||||
{
|
{
|
||||||
fixedvec2 refpos = { other->v1->x + other->dx / 2 + sb->scaleX, other->v1->y + other->dy / 2 + sb->scaleY };
|
fixedvec2 refpos = { other->v1->x + other->dx / 2 + FLOAT2FIXED(sb->Scale.X), other->v1->y + other->dy / 2 + FLOAT2FIXED(sb->Scale.Y) };
|
||||||
subsector_t *othersub = R_PointInSubsector(refpos.x, refpos.y);
|
subsector_t *othersub = R_PointInSubsector(refpos.x, refpos.y);
|
||||||
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
||||||
}
|
}
|
||||||
|
@ -610,9 +612,9 @@ void ADynamicLight::CollectWithinRadius(const fixedvec3 &pos, subsector_t *subSe
|
||||||
{
|
{
|
||||||
line_t *other = subSec->firstline->linedef;
|
line_t *other = subSec->firstline->linedef;
|
||||||
AActor *sb = subSec->sector->SkyBoxes[sector_t::floor];
|
AActor *sb = subSec->sector->SkyBoxes[sector_t::floor];
|
||||||
if (sb->threshold > Z() - radius)
|
if (sb->specialf1 > Z() - radius)
|
||||||
{
|
{
|
||||||
fixedvec2 refpos = { other->v1->x + other->dx / 2 + sb->scaleX, other->v1->y + other->dy / 2 + sb->scaleY };
|
fixedvec2 refpos = { other->v1->x + other->dx / 2 + FLOAT2FIXED(sb->Scale.X), other->v1->y + other->dy / 2 + FLOAT2FIXED(sb->Scale.Y) };
|
||||||
subsector_t *othersub = R_PointInSubsector(refpos.x, refpos.y);
|
subsector_t *othersub = R_PointInSubsector(refpos.x, refpos.y);
|
||||||
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
||||||
}
|
}
|
||||||
|
@ -652,10 +654,9 @@ void ADynamicLight::LinkLight()
|
||||||
if (radius>0)
|
if (radius>0)
|
||||||
{
|
{
|
||||||
// passing in radius*radius allows us to do a distance check without any calls to sqrtf
|
// passing in radius*radius allows us to do a distance check without any calls to sqrtf
|
||||||
subsector_t * subSec = R_PointInSubsector(X(), Y());
|
subsector_t * subSec = R_PointInSubsector(_f_X(), _f_Y());
|
||||||
float fradius = FIXED2FLOAT(radius);
|
|
||||||
::validcount++;
|
::validcount++;
|
||||||
CollectWithinRadius(Pos(), subSec, fradius*fradius);
|
CollectWithinRadius(_f_Pos(), subSec, radius*radius);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,8 +761,8 @@ CCMD(listlights)
|
||||||
subsecs = 0;
|
subsecs = 0;
|
||||||
Printf("%s at (%f, %f, %f), color = 0x%02x%02x%02x, radius = %f ",
|
Printf("%s at (%f, %f, %f), color = 0x%02x%02x%02x, radius = %f ",
|
||||||
dl->target? dl->target->GetClass()->TypeName.GetChars() : dl->GetClass()->TypeName.GetChars(),
|
dl->target? dl->target->GetClass()->TypeName.GetChars() : dl->GetClass()->TypeName.GetChars(),
|
||||||
FIXED2FLOAT(dl->X()), FIXED2FLOAT(dl->Y()), FIXED2FLOAT(dl->Z()), dl->args[LIGHT_RED],
|
dl->X(), dl->Y(), dl->Z(), dl->args[LIGHT_RED],
|
||||||
dl->args[LIGHT_GREEN], dl->args[LIGHT_BLUE], FIXED2FLOAT(dl->radius));
|
dl->args[LIGHT_GREEN], dl->args[LIGHT_BLUE], dl->radius);
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (dl->target)
|
if (dl->target)
|
||||||
|
|
|
@ -171,7 +171,7 @@ FLightDefaults::FLightDefaults(FName name, ELightType type)
|
||||||
void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
||||||
{
|
{
|
||||||
light->lighttype = m_type;
|
light->lighttype = m_type;
|
||||||
light->angle = m_Angle;
|
light->Angles.Yaw = ANGLE2DBL(m_Angle);
|
||||||
light->SetOffset(m_X, m_Y, m_Z);
|
light->SetOffset(m_X, m_Y, m_Z);
|
||||||
light->halo = m_halo;
|
light->halo = m_halo;
|
||||||
for (int a = 0; a < 3; a++) light->args[a] = clamp<int>((int)(m_Args[a] * gl_lights_intensity), 0, 255);
|
for (int a = 0; a < 3; a++) light->args[a] = clamp<int>((int)(m_Args[a] * gl_lights_intensity), 0, 255);
|
||||||
|
@ -423,7 +423,7 @@ void gl_ParsePulseLight(FScanner &sc)
|
||||||
break;
|
break;
|
||||||
case LIGHTTAG_INTERVAL:
|
case LIGHTTAG_INTERVAL:
|
||||||
floatVal = gl_ParseFloat(sc);
|
floatVal = gl_ParseFloat(sc);
|
||||||
defaults->SetAngle(FLOAT_TO_ANGLE(floatVal * TICRATE));
|
defaults->SetAngle(FLOAT2ANGLE(floatVal * TICRATE));
|
||||||
break;
|
break;
|
||||||
case LIGHTTAG_SUBTRACTIVE:
|
case LIGHTTAG_SUBTRACTIVE:
|
||||||
defaults->SetSubtractive(gl_ParseInt(sc) != 0);
|
defaults->SetSubtractive(gl_ParseInt(sc) != 0);
|
||||||
|
|
|
@ -523,7 +523,7 @@ void gl_InitModels()
|
||||||
else if (sc.Compare("angleoffset"))
|
else if (sc.Compare("angleoffset"))
|
||||||
{
|
{
|
||||||
sc.MustGetFloat();
|
sc.MustGetFloat();
|
||||||
smf.angleoffset = FLOAT_TO_ANGLE(sc.Float);
|
smf.angleoffset = FLOAT2ANGLE(sc.Float);
|
||||||
}
|
}
|
||||||
else if (sc.Compare("pitchoffset"))
|
else if (sc.Compare("pitchoffset"))
|
||||||
{
|
{
|
||||||
|
@ -854,20 +854,20 @@ void gl_RenderModel(GLSprite * spr)
|
||||||
|
|
||||||
|
|
||||||
// y scale for a sprite means height, i.e. z in the world!
|
// y scale for a sprite means height, i.e. z in the world!
|
||||||
float scaleFactorX = FIXED2FLOAT(spr->actor->scaleX) * smf->xscale;
|
float scaleFactorX = spr->actor->Scale.X * smf->xscale;
|
||||||
float scaleFactorY = FIXED2FLOAT(spr->actor->scaleX) * smf->yscale;
|
float scaleFactorY = spr->actor->Scale.X * smf->yscale;
|
||||||
float scaleFactorZ = FIXED2FLOAT(spr->actor->scaleY) * smf->zscale;
|
float scaleFactorZ = spr->actor->Scale.Y * smf->zscale;
|
||||||
float pitch = 0;
|
float pitch = 0;
|
||||||
float roll = 0;
|
float roll = 0;
|
||||||
float rotateOffset = 0;
|
float rotateOffset = 0;
|
||||||
float angle = ANGLE_TO_FLOAT(spr->actor->angle);
|
float angle = spr->actor->Angles.Yaw.Degrees;
|
||||||
|
|
||||||
// [BB] Workaround for the missing pitch information.
|
// [BB] Workaround for the missing pitch information.
|
||||||
if ( (smf->flags & MDL_PITCHFROMMOMENTUM) )
|
if ( (smf->flags & MDL_PITCHFROMMOMENTUM) )
|
||||||
{
|
{
|
||||||
const double x = static_cast<double>(spr->actor->vel.x);
|
const double x = spr->actor->Vel.X;
|
||||||
const double y = static_cast<double>(spr->actor->vel.y);
|
const double y = spr->actor->Vel.Y;
|
||||||
const double z = static_cast<double>(spr->actor->vel.z);
|
const double z = spr->actor->Vel.Z;
|
||||||
|
|
||||||
// [BB] Calculate the pitch using spherical coordinates.
|
// [BB] Calculate the pitch using spherical coordinates.
|
||||||
if(z || x || y) pitch = float(atan( z/sqrt(x*x+y*y) ) / M_PI * 180);
|
if(z || x || y) pitch = float(atan( z/sqrt(x*x+y*y) ) / M_PI * 180);
|
||||||
|
@ -888,9 +888,8 @@ void gl_RenderModel(GLSprite * spr)
|
||||||
|
|
||||||
// Added MDL_INHERITACTORPITCH and MDL_INHERITACTORROLL flags processing.
|
// Added MDL_INHERITACTORPITCH and MDL_INHERITACTORROLL flags processing.
|
||||||
// If both flags MDL_INHERITACTORPITCH and MDL_PITCHFROMMOMENTUM are set, the pitch sums up the actor pitch and the momentum vector pitch.
|
// If both flags MDL_INHERITACTORPITCH and MDL_PITCHFROMMOMENTUM are set, the pitch sums up the actor pitch and the momentum vector pitch.
|
||||||
// This is rather crappy way to transfer fixet_t type into angle in degrees, but its works!
|
if(smf->flags & MDL_INHERITACTORPITCH) pitch += spr->actor->Angles.Pitch.Degrees;
|
||||||
if(smf->flags & MDL_INHERITACTORPITCH) pitch += float(static_cast<double>(spr->actor->pitch >> 16) / (1 << 13) * 45 + static_cast<double>(spr->actor->pitch & 0x0000FFFF) / (1 << 29) * 45);
|
if(smf->flags & MDL_INHERITACTORROLL) roll += spr->actor->Angles.Roll.Degrees;
|
||||||
if(smf->flags & MDL_INHERITACTORROLL) roll += float(static_cast<double>(spr->actor->roll >> 16) / (1 << 13) * 45 + static_cast<double>(spr->actor->roll & 0x0000FFFF) / (1 << 29) * 45);
|
|
||||||
|
|
||||||
gl_RenderState.mModelMatrix.loadIdentity();
|
gl_RenderState.mModelMatrix.loadIdentity();
|
||||||
|
|
||||||
|
@ -920,7 +919,7 @@ void gl_RenderModel(GLSprite * spr)
|
||||||
gl_RenderState.mModelMatrix.translate(smf->xoffset / smf->xscale, smf->zoffset / smf->zscale, smf->yoffset / smf->yscale);
|
gl_RenderState.mModelMatrix.translate(smf->xoffset / smf->xscale, smf->zoffset / smf->zscale, smf->yoffset / smf->yscale);
|
||||||
|
|
||||||
// 5) Applying model rotations.
|
// 5) Applying model rotations.
|
||||||
gl_RenderState.mModelMatrix.rotate(-ANGLE_TO_FLOAT(smf->angleoffset), 0, 1, 0);
|
gl_RenderState.mModelMatrix.rotate(-ANGLE2FLOAT(smf->angleoffset), 0, 1, 0);
|
||||||
gl_RenderState.mModelMatrix.rotate(smf->pitchoffset, 0, 0, 1);
|
gl_RenderState.mModelMatrix.rotate(smf->pitchoffset, 0, 0, 1);
|
||||||
gl_RenderState.mModelMatrix.rotate(-smf->rolloffset, 1, 0, 0);
|
gl_RenderState.mModelMatrix.rotate(-smf->rolloffset, 1, 0, 0);
|
||||||
|
|
||||||
|
@ -983,7 +982,7 @@ void gl_RenderHUDModel(pspdef_t *psp, fixed_t ofsx, fixed_t ofsy)
|
||||||
gl_RenderState.mViewMatrix.rotate(90.f, 0, 1, 0);
|
gl_RenderState.mViewMatrix.rotate(90.f, 0, 1, 0);
|
||||||
|
|
||||||
// Applying angleoffset, pitchoffset, rolloffset.
|
// Applying angleoffset, pitchoffset, rolloffset.
|
||||||
gl_RenderState.mViewMatrix.rotate(-ANGLE_TO_FLOAT(smf->angleoffset), 0, 1, 0);
|
gl_RenderState.mViewMatrix.rotate(-ANGLE2FLOAT(smf->angleoffset), 0, 1, 0);
|
||||||
gl_RenderState.mViewMatrix.rotate(smf->pitchoffset, 0, 0, 1);
|
gl_RenderState.mViewMatrix.rotate(smf->pitchoffset, 0, 0, 1);
|
||||||
gl_RenderState.mViewMatrix.rotate(-smf->rolloffset, 1, 0, 0);
|
gl_RenderState.mViewMatrix.rotate(-smf->rolloffset, 1, 0, 0);
|
||||||
gl_RenderState.ApplyMatrices();
|
gl_RenderState.ApplyMatrices();
|
||||||
|
|
|
@ -88,7 +88,7 @@ FGLRenderer::FGLRenderer(OpenGLFrameBuffer *fb)
|
||||||
mMirrorCount = 0;
|
mMirrorCount = 0;
|
||||||
mPlaneMirrorCount = 0;
|
mPlaneMirrorCount = 0;
|
||||||
mLightCount = 0;
|
mLightCount = 0;
|
||||||
mAngles = FRotator(0,0,0);
|
mAngles = FRotator(0.f, 0.f, 0.f);
|
||||||
mViewVector = FVector2(0,0);
|
mViewVector = FVector2(0,0);
|
||||||
mVBO = NULL;
|
mVBO = NULL;
|
||||||
mSkyVBO = NULL;
|
mSkyVBO = NULL;
|
||||||
|
|
|
@ -19,6 +19,16 @@ class GLPortal;
|
||||||
class FLightBuffer;
|
class FLightBuffer;
|
||||||
class FSamplerManager;
|
class FSamplerManager;
|
||||||
|
|
||||||
|
inline float DEG2RAD(float deg)
|
||||||
|
{
|
||||||
|
return deg * float(M_PI / 180.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float RAD2DEG(float deg)
|
||||||
|
{
|
||||||
|
return deg * float(180. / M_PI);
|
||||||
|
}
|
||||||
|
|
||||||
enum SectorRenderFlags
|
enum SectorRenderFlags
|
||||||
{
|
{
|
||||||
// This is used to avoid creating too many drawinfos
|
// This is used to avoid creating too many drawinfos
|
||||||
|
@ -94,7 +104,7 @@ public:
|
||||||
void DrawScene(bool toscreen = false);
|
void DrawScene(bool toscreen = false);
|
||||||
void DrawBlend(sector_t * viewsector);
|
void DrawBlend(sector_t * viewsector);
|
||||||
|
|
||||||
void DrawPSprite (player_t * player,pspdef_t *psp,fixed_t sx, fixed_t sy, bool hudModelStep, int OverrideShader, bool alphatexture);
|
void DrawPSprite (player_t * player,pspdef_t *psp,float sx, float sy, bool hudModelStep, int OverrideShader, bool alphatexture);
|
||||||
void DrawPlayerSprites(sector_t * viewsector, bool hudModelStep);
|
void DrawPlayerSprites(sector_t * viewsector, bool hudModelStep);
|
||||||
void DrawTargeterSprites();
|
void DrawTargeterSprites();
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ void gl_SetPlaneTextureRotation(const GLSectorPlane * secplane, FMaterial * glte
|
||||||
{
|
{
|
||||||
yscale1 = 0 - yscale1;
|
yscale1 = 0 - yscale1;
|
||||||
}
|
}
|
||||||
float angle=-ANGLE_TO_FLOAT(secplane->angle);
|
float angle=-ANGLE2FLOAT(secplane->angle);
|
||||||
|
|
||||||
float xscale2=64.f/gltexture->TextureWidth();
|
float xscale2=64.f/gltexture->TextureWidth();
|
||||||
float yscale2=64.f/gltexture->TextureHeight();
|
float yscale2=64.f/gltexture->TextureHeight();
|
||||||
|
@ -143,7 +143,7 @@ void GLFlat::SetupSubsectorLights(int pass, subsector_t * sub, int *dli)
|
||||||
// we must do the side check here because gl_SetupLight needs the correct plane orientation
|
// we must do the side check here because gl_SetupLight needs the correct plane orientation
|
||||||
// which we don't have for Legacy-style 3D-floors
|
// which we don't have for Legacy-style 3D-floors
|
||||||
fixed_t planeh = plane.plane.ZatPoint(light);
|
fixed_t planeh = plane.plane.ZatPoint(light);
|
||||||
if (gl_lights_checkside && ((planeh<light->Z() && ceiling) || (planeh>light->Z() && !ceiling)))
|
if (gl_lights_checkside && ((planeh<light->_f_Z() && ceiling) || (planeh>light->_f_Z() && !ceiling)))
|
||||||
{
|
{
|
||||||
node=node->nextLight;
|
node=node->nextLight;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -659,7 +659,7 @@ void GLSkyboxPortal::DrawContents()
|
||||||
viewx = viewpos.x;
|
viewx = viewpos.x;
|
||||||
viewy = viewpos.y;
|
viewy = viewpos.y;
|
||||||
viewz = viewpos.z;
|
viewz = viewpos.z;
|
||||||
viewangle += origin->PrevAngle + FixedMul(r_TicFrac, origin->angle - origin->PrevAngle);
|
viewangle += (origin->PrevAngles.Yaw + deltaangle(origin->PrevAngles.Yaw, origin->Angles.Yaw) * FIXED2DBL(r_TicFrac)).BAMs();
|
||||||
|
|
||||||
// Don't let the viewpoint be too close to a floor or ceiling
|
// Don't let the viewpoint be too close to a floor or ceiling
|
||||||
fixed_t floorh = origin->Sector->floorplane.ZatPoint(origin);
|
fixed_t floorh = origin->Sector->floorplane.ZatPoint(origin);
|
||||||
|
@ -1003,7 +1003,9 @@ void GLLineToLinePortal::DrawContents()
|
||||||
|
|
||||||
line_t *origin = glport->reference->mOrigin;
|
line_t *origin = glport->reference->mOrigin;
|
||||||
P_TranslatePortalXY(origin, viewx, viewy);
|
P_TranslatePortalXY(origin, viewx, viewy);
|
||||||
P_TranslatePortalAngle(origin, viewangle);
|
DAngle va = ANGLE2DBL(viewangle);
|
||||||
|
P_TranslatePortalAngle(origin, va);
|
||||||
|
viewangle = va.BAMs();
|
||||||
P_TranslatePortalZ(origin, viewz);
|
P_TranslatePortalZ(origin, viewz);
|
||||||
|
|
||||||
SaveMapSection();
|
SaveMapSection();
|
||||||
|
|
|
@ -110,7 +110,7 @@ void gl_ParseDefs();
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
angle_t FGLRenderer::FrustumAngle()
|
angle_t FGLRenderer::FrustumAngle()
|
||||||
{
|
{
|
||||||
float tilt= fabs(mAngles.Pitch);
|
float tilt= fabs(mAngles.Pitch.Degrees);
|
||||||
|
|
||||||
// If the pitch is larger than this you can look all around at a FOV of 90°
|
// If the pitch is larger than this you can look all around at a FOV of 90°
|
||||||
if (tilt>46.0f) return 0xffffffff;
|
if (tilt>46.0f) return 0xffffffff;
|
||||||
|
@ -118,7 +118,7 @@ angle_t FGLRenderer::FrustumAngle()
|
||||||
// ok, this is a gross hack that barely works...
|
// ok, this is a gross hack that barely works...
|
||||||
// but at least it doesn't overestimate too much...
|
// but at least it doesn't overestimate too much...
|
||||||
double floatangle=2.0+(45.0+((tilt/1.9)))*mCurrentFoV*48.0/BaseRatioSizes[WidescreenRatio][3]/90.0;
|
double floatangle=2.0+(45.0+((tilt/1.9)))*mCurrentFoV*48.0/BaseRatioSizes[WidescreenRatio][3]/90.0;
|
||||||
angle_t a1 = FLOAT_TO_ANGLE(floatangle);
|
angle_t a1 = FLOAT2ANGLE(floatangle);
|
||||||
if (a1>=ANGLE_180) return 0xffffffff;
|
if (a1>=ANGLE_180) return 0xffffffff;
|
||||||
return a1;
|
return a1;
|
||||||
}
|
}
|
||||||
|
@ -264,9 +264,9 @@ void FGLRenderer::SetViewMatrix(fixed_t viewx, fixed_t viewy, fixed_t viewz, boo
|
||||||
float planemult = planemirror? -glset.pixelstretch : glset.pixelstretch;
|
float planemult = planemirror? -glset.pixelstretch : glset.pixelstretch;
|
||||||
|
|
||||||
gl_RenderState.mViewMatrix.loadIdentity();
|
gl_RenderState.mViewMatrix.loadIdentity();
|
||||||
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Roll, 0.0f, 0.0f, 1.0f);
|
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Roll.Degrees, 0.0f, 0.0f, 1.0f);
|
||||||
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Pitch, 1.0f, 0.0f, 0.0f);
|
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Pitch.Degrees, 1.0f, 0.0f, 0.0f);
|
||||||
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Yaw, 0.0f, mult, 0.0f);
|
gl_RenderState.mViewMatrix.rotate(GLRenderer->mAngles.Yaw.Degrees, 0.0f, mult, 0.0f);
|
||||||
gl_RenderState.mViewMatrix.translate(FIXED2FLOAT(viewx) * mult, -FIXED2FLOAT(viewz) * planemult , -FIXED2FLOAT(viewy));
|
gl_RenderState.mViewMatrix.translate(FIXED2FLOAT(viewx) * mult, -FIXED2FLOAT(viewz) * planemult , -FIXED2FLOAT(viewy));
|
||||||
gl_RenderState.mViewMatrix.scale(-mult, planemult, 1);
|
gl_RenderState.mViewMatrix.scale(-mult, planemult, 1);
|
||||||
}
|
}
|
||||||
|
@ -780,7 +780,7 @@ sector_t * FGLRenderer::RenderViewpoint (AActor * camera, GL_IRECT * bounds, flo
|
||||||
double alen = sqrt(angx*angx + angy*angy);
|
double alen = sqrt(angx*angx + angy*angy);
|
||||||
|
|
||||||
mAngles.Pitch = (float)RAD2DEG(asin(angy / alen));
|
mAngles.Pitch = (float)RAD2DEG(asin(angy / alen));
|
||||||
mAngles.Roll = (float)(camera->roll>>ANGLETOFINESHIFT)*360.0f/FINEANGLES;
|
mAngles.Roll.Degrees = camera->Angles.Roll.Degrees;
|
||||||
|
|
||||||
// Scroll the sky
|
// Scroll the sky
|
||||||
mSky1Pos = (float)fmod(gl_frameMS * level.skyspeed1, 1024.f) * 90.f/256.f;
|
mSky1Pos = (float)fmod(gl_frameMS * level.skyspeed1, 1024.f) * 90.f/256.f;
|
||||||
|
@ -817,7 +817,7 @@ sector_t * FGLRenderer::RenderViewpoint (AActor * camera, GL_IRECT * bounds, flo
|
||||||
// SetProjection(fov, ratio, fovratio); // switch to perspective mode and set up clipper
|
// SetProjection(fov, ratio, fovratio); // switch to perspective mode and set up clipper
|
||||||
SetViewAngle(viewangle);
|
SetViewAngle(viewangle);
|
||||||
// Stereo mode specific viewpoint adjustment - temporarily shifts global viewx, viewy, viewz
|
// Stereo mode specific viewpoint adjustment - temporarily shifts global viewx, viewy, viewz
|
||||||
eye->GetViewShift(GLRenderer->mAngles.Yaw, viewShift);
|
eye->GetViewShift(GLRenderer->mAngles.Yaw.Degrees, viewShift);
|
||||||
s3d::ScopedViewShifter viewShifter(viewShift);
|
s3d::ScopedViewShifter viewShifter(viewShift);
|
||||||
SetViewMatrix(viewx, viewy, viewz, false, false);
|
SetViewMatrix(viewx, viewy, viewz, false, false);
|
||||||
gl_RenderState.ApplyMatrices();
|
gl_RenderState.ApplyMatrices();
|
||||||
|
|
|
@ -92,7 +92,7 @@ void GLSkyInfo::init(int sky1, PalEntry FadeColor)
|
||||||
texture[0] = FMaterial::ValidateTexture(texno, false, true);
|
texture[0] = FMaterial::ValidateTexture(texno, false, true);
|
||||||
if (!texture[0] || texture[0]->tex->UseType == FTexture::TEX_Null) goto normalsky;
|
if (!texture[0] || texture[0]->tex->UseType == FTexture::TEX_Null) goto normalsky;
|
||||||
skytexno1 = texno;
|
skytexno1 = texno;
|
||||||
x_offset[0] = ANGLE_TO_FLOAT(s->GetTextureXOffset(pos));
|
x_offset[0] = ANGLE2FLOAT(s->GetTextureXOffset(pos));
|
||||||
y_offset = FIXED2FLOAT(s->GetTextureYOffset(pos));
|
y_offset = FIXED2FLOAT(s->GetTextureYOffset(pos));
|
||||||
mirrored = !l->args[2];
|
mirrored = !l->args[2];
|
||||||
}
|
}
|
||||||
|
|
|
@ -281,12 +281,12 @@ void GLSprite::Draw(int pass)
|
||||||
float xcenter = (x1 + x2)*0.5;
|
float xcenter = (x1 + x2)*0.5;
|
||||||
float ycenter = (y1 + y2)*0.5;
|
float ycenter = (y1 + y2)*0.5;
|
||||||
float zcenter = (z1 + z2)*0.5;
|
float zcenter = (z1 + z2)*0.5;
|
||||||
float angleRad = DEG2RAD(270. - float(GLRenderer->mAngles.Yaw));
|
float angleRad = ToRadians(270. - GLRenderer->mAngles.Yaw);
|
||||||
|
|
||||||
Matrix3x4 mat;
|
Matrix3x4 mat;
|
||||||
mat.MakeIdentity();
|
mat.MakeIdentity();
|
||||||
mat.Translate(xcenter, zcenter, ycenter);
|
mat.Translate(xcenter, zcenter, ycenter);
|
||||||
mat.Rotate(-sin(angleRad), 0, cos(angleRad), -GLRenderer->mAngles.Pitch);
|
mat.Rotate(-sin(angleRad), 0, cos(angleRad), -GLRenderer->mAngles.Pitch.Degrees);
|
||||||
mat.Translate(-xcenter, -zcenter, -ycenter);
|
mat.Translate(-xcenter, -zcenter, -ycenter);
|
||||||
v1 = mat * Vector(x1, z1, y1);
|
v1 = mat * Vector(x1, z1, y1);
|
||||||
v2 = mat * Vector(x2, z1, y2);
|
v2 = mat * Vector(x2, z1, y2);
|
||||||
|
@ -387,8 +387,8 @@ void GLSprite::PerformSpriteClipAdjustment(AActor *thing, fixed_t thingx, fixed_
|
||||||
thing->IsKindOf(RUNTIME_CLASS(AInventory))) && (thing->flags&MF_ICECORPSE ||
|
thing->IsKindOf(RUNTIME_CLASS(AInventory))) && (thing->flags&MF_ICECORPSE ||
|
||||||
!(thing->flags&MF_CORPSE))) || (gl_spriteclip == 3 && (smarterclip = true)) || gl_spriteclip > 1)
|
!(thing->flags&MF_CORPSE))) || (gl_spriteclip == 3 && (smarterclip = true)) || gl_spriteclip > 1)
|
||||||
{
|
{
|
||||||
float btm = 1000000.0f;
|
float btm = 100000000.0f;
|
||||||
float top = -1000000.0f;
|
float top = -100000000.0f;
|
||||||
extsector_t::xfloor &x = thing->Sector->e->XFloor;
|
extsector_t::xfloor &x = thing->Sector->e->XFloor;
|
||||||
|
|
||||||
if (x.ffloors.Size())
|
if (x.ffloors.Size())
|
||||||
|
@ -396,17 +396,17 @@ void GLSprite::PerformSpriteClipAdjustment(AActor *thing, fixed_t thingx, fixed_
|
||||||
for (unsigned int i = 0; i < x.ffloors.Size(); i++)
|
for (unsigned int i = 0; i < x.ffloors.Size(); i++)
|
||||||
{
|
{
|
||||||
F3DFloor * ff = x.ffloors[i];
|
F3DFloor * ff = x.ffloors[i];
|
||||||
fixed_t floorh = ff->top.plane->ZatPoint(thingx, thingy);
|
float floorh = FIXED2FLOAT(ff->top.plane->ZatPoint(thingx, thingy));
|
||||||
fixed_t ceilingh = ff->bottom.plane->ZatPoint(thingx, thingy);
|
float ceilingh = FIXED2FLOAT(ff->bottom.plane->ZatPoint(thingx, thingy));
|
||||||
if (floorh == thing->floorz)
|
if (floorh == thing->floorz)
|
||||||
{
|
{
|
||||||
btm = FIXED2FLOAT(floorh);
|
btm = floorh;
|
||||||
}
|
}
|
||||||
if (ceilingh == thing->ceilingz)
|
if (ceilingh == thing->ceilingz)
|
||||||
{
|
{
|
||||||
top = FIXED2FLOAT(ceilingh);
|
top = ceilingh;
|
||||||
}
|
}
|
||||||
if (btm != 1000000.0f && top != -1000000.0f)
|
if (btm != 100000000.0f && top != -100000000.0f)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -415,14 +415,14 @@ void GLSprite::PerformSpriteClipAdjustment(AActor *thing, fixed_t thingx, fixed_
|
||||||
else if (thing->Sector->heightsec && !(thing->Sector->heightsec->MoreFlags & SECF_IGNOREHEIGHTSEC))
|
else if (thing->Sector->heightsec && !(thing->Sector->heightsec->MoreFlags & SECF_IGNOREHEIGHTSEC))
|
||||||
{
|
{
|
||||||
if (thing->flags2&MF2_ONMOBJ && thing->floorz ==
|
if (thing->flags2&MF2_ONMOBJ && thing->floorz ==
|
||||||
thing->Sector->heightsec->floorplane.ZatPoint(thingx, thingy))
|
FIXED2FLOAT(thing->Sector->heightsec->floorplane.ZatPoint(thingx, thingy)))
|
||||||
{
|
{
|
||||||
btm = FIXED2FLOAT(thing->floorz);
|
btm = thing->floorz;
|
||||||
top = FIXED2FLOAT(thing->ceilingz);
|
top = thing->ceilingz;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (btm == 1000000.0f)
|
if (btm == 1000000.0f)
|
||||||
btm = FIXED2FLOAT(thing->Sector->floorplane.ZatPoint(thingx, thingy) - thing->floorclip);
|
btm = FIXED2FLOAT(thing->Sector->floorplane.ZatPoint(thing)) - thing->Floorclip;
|
||||||
if (top == -1000000.0f)
|
if (top == -1000000.0f)
|
||||||
top = FIXED2FLOAT(thing->Sector->ceilingplane.ZatPoint(thingx, thingy));
|
top = FIXED2FLOAT(thing->Sector->ceilingplane.ZatPoint(thingx, thingy));
|
||||||
|
|
||||||
|
@ -492,11 +492,10 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
}
|
}
|
||||||
|
|
||||||
int spritenum = thing->sprite;
|
int spritenum = thing->sprite;
|
||||||
fixed_t spritescaleX = thing->scaleX;
|
DVector2 sprscale = thing->Scale;
|
||||||
fixed_t spritescaleY = thing->scaleY;
|
|
||||||
if (thing->player != NULL)
|
if (thing->player != NULL)
|
||||||
{
|
{
|
||||||
P_CheckPlayerSprite(thing, spritenum, spritescaleX, spritescaleY);
|
P_CheckPlayerSprite(thing, spritenum, sprscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thing->renderflags & RF_INVISIBLE || !thing->RenderStyle.IsVisible(thing->alpha))
|
if (thing->renderflags & RF_INVISIBLE || !thing->RenderStyle.IsVisible(thing->alpha))
|
||||||
|
@ -514,10 +513,10 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
// Too close to the camera. This doesn't look good if it is a sprite.
|
// Too close to the camera. This doesn't look good if it is a sprite.
|
||||||
if (P_AproxDistance(thingpos.x-viewx, thingpos.y-viewy)<2*FRACUNIT)
|
if (P_AproxDistance(thingpos.x-viewx, thingpos.y-viewy)<2*FRACUNIT)
|
||||||
{
|
{
|
||||||
if (viewz >= thingpos.z - 2 * FRACUNIT && viewz <= thingpos.z + thing->height + 2 * FRACUNIT)
|
if (viewz >= thingpos.z - 2 * FRACUNIT && viewz <= thingpos.z + FLOAT2FIXED(thing->Height) + 2 * FRACUNIT)
|
||||||
{
|
{
|
||||||
// exclude vertically moving objects from this check.
|
// exclude vertically moving objects from this check.
|
||||||
if (!(thing->vel.x == 0 && thing->vel.y == 0 && thing->vel.z != 0))
|
if (!thing->Vel.isZero())
|
||||||
{
|
{
|
||||||
if (!gl_FindModelFrame(thing->GetClass(), spritenum, thing->frame, false))
|
if (!gl_FindModelFrame(thing->GetClass(), spritenum, thing->frame, false))
|
||||||
{
|
{
|
||||||
|
@ -532,7 +531,7 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
{
|
{
|
||||||
if (!(thing->flags7 & MF7_FLYCHEAT) && thing->target==GLRenderer->mViewActor && GLRenderer->mViewActor != NULL)
|
if (!(thing->flags7 & MF7_FLYCHEAT) && thing->target==GLRenderer->mViewActor && GLRenderer->mViewActor != NULL)
|
||||||
{
|
{
|
||||||
fixed_t clipdist = clamp(thing->Speed, thing->target->radius, thing->target->radius*2);
|
fixed_t clipdist = FLOAT2FIXED(clamp(thing->Speed, thing->target->radius, thing->target->radius*2));
|
||||||
if (P_AproxDistance(thingpos.x-viewx, thingpos.y-viewy) < clipdist) return;
|
if (P_AproxDistance(thingpos.x-viewx, thingpos.y-viewy) < clipdist) return;
|
||||||
}
|
}
|
||||||
thing->flags7 |= MF7_FLYCHEAT; // do this only once for the very first frame, but not if it gets into range again.
|
thing->flags7 |= MF7_FLYCHEAT; // do this only once for the very first frame, but not if it gets into range again.
|
||||||
|
@ -558,7 +557,7 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
|
|
||||||
|
|
||||||
x = FIXED2FLOAT(thingpos.x);
|
x = FIXED2FLOAT(thingpos.x);
|
||||||
z = FIXED2FLOAT(thingpos.z-thing->floorclip);
|
z = FIXED2FLOAT(thingpos.z)-thing->Floorclip;
|
||||||
y = FIXED2FLOAT(thingpos.y);
|
y = FIXED2FLOAT(thingpos.y);
|
||||||
|
|
||||||
// [RH] Make floatbobbing a renderer-only effect.
|
// [RH] Make floatbobbing a renderer-only effect.
|
||||||
|
@ -574,7 +573,7 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
angle_t ang = R_PointToAngle(thingpos.x, thingpos.y);
|
angle_t ang = R_PointToAngle(thingpos.x, thingpos.y);
|
||||||
|
|
||||||
bool mirror;
|
bool mirror;
|
||||||
FTextureID patch = gl_GetSpriteFrame(spritenum, thing->frame, -1, ang - thing->angle, &mirror);
|
FTextureID patch = gl_GetSpriteFrame(spritenum, thing->frame, -1, ang - thing->Angles.Yaw.BAMs(), &mirror);
|
||||||
if (!patch.isValid()) return;
|
if (!patch.isValid()) return;
|
||||||
int type = thing->renderflags & RF_SPRITETYPEMASK;
|
int type = thing->renderflags & RF_SPRITETYPEMASK;
|
||||||
gltexture = FMaterial::ValidateTexture(patch, (type == RF_FACESPRITE), false);
|
gltexture = FMaterial::ValidateTexture(patch, (type == RF_FACESPRITE), false);
|
||||||
|
@ -595,7 +594,7 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
ur = gltexture->GetSpriteUL();
|
ur = gltexture->GetSpriteUL();
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Scale(FIXED2FLOAT(spritescaleX), FIXED2FLOAT(spritescaleY));
|
r.Scale(sprscale.X, sprscale.Y);
|
||||||
|
|
||||||
float rightfac = -r.left;
|
float rightfac = -r.left;
|
||||||
float leftfac = rightfac - r.width;
|
float leftfac = rightfac - r.width;
|
||||||
|
@ -603,7 +602,7 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
z1 = z - r.top;
|
z1 = z - r.top;
|
||||||
z2 = z1 - r.height;
|
z2 = z1 - r.height;
|
||||||
|
|
||||||
float spriteheight = FIXED2FLOAT(spritescaleY) * r.height;
|
float spriteheight = sprscale.Y * r.height;
|
||||||
|
|
||||||
// Tests show that this doesn't look good for many decorations and corpses
|
// Tests show that this doesn't look good for many decorations and corpses
|
||||||
if (spriteheight > 0 && gl_spriteclip > 0 && (thing->renderflags & RF_SPRITETYPEMASK) == RF_FACESPRITE)
|
if (spriteheight > 0 && gl_spriteclip > 0 && (thing->renderflags & RF_SPRITETYPEMASK) == RF_FACESPRITE)
|
||||||
|
@ -626,8 +625,8 @@ void GLSprite::Process(AActor* thing,sector_t * sector)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RF_WALLSPRITE:
|
case RF_WALLSPRITE:
|
||||||
viewvecX = FIXED2FLOAT(finecosine[thing->angle >> ANGLETOFINESHIFT]);
|
viewvecX = thing->Angles.Yaw.Cos();
|
||||||
viewvecY = FIXED2FLOAT(finesine[thing->angle >> ANGLETOFINESHIFT]);
|
viewvecY = thing->Angles.Yaw.Sin();
|
||||||
|
|
||||||
x1 = x + viewvecY*leftfac;
|
x1 = x + viewvecY*leftfac;
|
||||||
x2 = x + viewvecY*rightfac;
|
x2 = x + viewvecY*rightfac;
|
||||||
|
|
|
@ -80,7 +80,7 @@ void gl_SetDynSpriteLight(AActor *self, fixed_t x, fixed_t y, fixed_t z, subsect
|
||||||
if (!(light->flags2&MF2_DORMANT) &&
|
if (!(light->flags2&MF2_DORMANT) &&
|
||||||
(!(light->flags4&MF4_DONTLIGHTSELF) || light->target != self))
|
(!(light->flags4&MF4_DONTLIGHTSELF) || light->target != self))
|
||||||
{
|
{
|
||||||
float dist = FVector3(FIXED2FLOAT(x - light->X()), FIXED2FLOAT(y - light->Y()), FIXED2FLOAT(z - light->Z())).Length();
|
float dist = FVector3(FIXED2FLOAT(x - light->_f_X()), FIXED2FLOAT(y - light->_f_Y()), FIXED2FLOAT(z - light->_f_Z())).Length();
|
||||||
radius = light->GetRadius() * gl_lights_size;
|
radius = light->GetRadius() * gl_lights_size;
|
||||||
|
|
||||||
if (dist < radius)
|
if (dist < radius)
|
||||||
|
@ -117,7 +117,7 @@ void gl_SetDynSpriteLight(AActor *thing, particle_t *particle)
|
||||||
{
|
{
|
||||||
if (thing != NULL)
|
if (thing != NULL)
|
||||||
{
|
{
|
||||||
gl_SetDynSpriteLight(thing, thing->X(), thing->Y(), thing->Z() + (thing->height >> 1), thing->subsector);
|
gl_SetDynSpriteLight(thing, thing->_f_X(), thing->_f_Y(), thing->_f_Z() + (thing->_f_height() >> 1), thing->subsector);
|
||||||
}
|
}
|
||||||
else if (particle != NULL)
|
else if (particle != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -117,9 +117,9 @@ void GLWall::SetupLights()
|
||||||
|
|
||||||
Vector fn, pos;
|
Vector fn, pos;
|
||||||
|
|
||||||
float x = FIXED2FLOAT(node->lightsource->X());
|
float x = node->lightsource->X();
|
||||||
float y = FIXED2FLOAT(node->lightsource->Y());
|
float y = node->lightsource->Y();
|
||||||
float z = FIXED2FLOAT(node->lightsource->Z());
|
float z = node->lightsource->Z();
|
||||||
float dist = fabsf(p.DistToPoint(x, z, y));
|
float dist = fabsf(p.DistToPoint(x, z, y));
|
||||||
float radius = (node->lightsource->GetRadius() * gl_lights_size);
|
float radius = (node->lightsource->GetRadius() * gl_lights_size);
|
||||||
float scale = 1.0f / ((2.f * radius) - dist);
|
float scale = 1.0f / ((2.f * radius) - dist);
|
||||||
|
|
|
@ -71,7 +71,7 @@ EXTERN_CVAR (Bool, r_deathcamera)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void FGLRenderer::DrawPSprite (player_t * player,pspdef_t *psp,fixed_t sx, fixed_t sy, bool hudModelStep, int OverrideShader, bool alphatexture)
|
void FGLRenderer::DrawPSprite (player_t * player,pspdef_t *psp, float sx, float sy, bool hudModelStep, int OverrideShader, bool alphatexture)
|
||||||
{
|
{
|
||||||
float fU1,fV1;
|
float fU1,fV1;
|
||||||
float fU2,fV2;
|
float fU2,fV2;
|
||||||
|
@ -109,7 +109,7 @@ void FGLRenderer::DrawPSprite (player_t * player,pspdef_t *psp,fixed_t sx, fixed
|
||||||
// calculate edges of the shape
|
// calculate edges of the shape
|
||||||
scalex = xratio[WidescreenRatio] * vw / 320;
|
scalex = xratio[WidescreenRatio] * vw / 320;
|
||||||
|
|
||||||
tx = FIXED2FLOAT(sx) - (160 - r.left);
|
tx = sx - (160 - r.left);
|
||||||
x1 = tx * scalex + vw/2;
|
x1 = tx * scalex + vw/2;
|
||||||
if (x1 > vw) return; // off the right side
|
if (x1 > vw) return; // off the right side
|
||||||
x1 += viewwindowx;
|
x1 += viewwindowx;
|
||||||
|
@ -121,7 +121,7 @@ void FGLRenderer::DrawPSprite (player_t * player,pspdef_t *psp,fixed_t sx, fixed
|
||||||
|
|
||||||
|
|
||||||
// killough 12/98: fix psprite positioning problem
|
// killough 12/98: fix psprite positioning problem
|
||||||
ftexturemid = 100.f - FIXED2FLOAT(sy) - r.top;
|
ftexturemid = 100.f - sy - r.top;
|
||||||
|
|
||||||
AWeapon * wi=player->ReadyWeapon;
|
AWeapon * wi=player->ReadyWeapon;
|
||||||
if (wi && wi->YAdjust)
|
if (wi && wi->YAdjust)
|
||||||
|
@ -188,7 +188,7 @@ void FGLRenderer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
pspdef_t *psp;
|
pspdef_t *psp;
|
||||||
int lightlevel=0;
|
int lightlevel=0;
|
||||||
fixed_t ofsx, ofsy;
|
float ofsx, ofsy;
|
||||||
FColormap cm;
|
FColormap cm;
|
||||||
sector_t * fakesec, fs;
|
sector_t * fakesec, fs;
|
||||||
AActor * playermo=players[consoleplayer].camera;
|
AActor * playermo=players[consoleplayer].camera;
|
||||||
|
@ -202,7 +202,10 @@ void FGLRenderer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep)
|
||||||
(r_deathcamera && camera->health <= 0))
|
(r_deathcamera && camera->health <= 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
P_BobWeapon (player, &player->psprites[ps_weapon], &ofsx, &ofsy);
|
fixed_t ox, oy;
|
||||||
|
P_BobWeapon (player, &player->psprites[ps_weapon], &ox, &oy);
|
||||||
|
ofsx = FIXED2FLOAT(ox);
|
||||||
|
ofsy = FIXED2FLOAT(oy);
|
||||||
|
|
||||||
// check for fullbright
|
// check for fullbright
|
||||||
if (player->fixedcolormap==NOFIXEDCOLORMAP)
|
if (player->fixedcolormap==NOFIXEDCOLORMAP)
|
||||||
|
@ -250,7 +253,7 @@ void FGLRenderer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep)
|
||||||
|
|
||||||
lightlevel = (1.0 - min_L) * 255;
|
lightlevel = (1.0 - min_L) * 255;
|
||||||
}
|
}
|
||||||
lightlevel = gl_CheckSpriteGlow(viewsector, lightlevel, playermo->X(), playermo->Y(), playermo->Z());
|
lightlevel = gl_CheckSpriteGlow(viewsector, lightlevel, playermo->_f_X(), playermo->_f_Y(), playermo->_f_Z());
|
||||||
|
|
||||||
// calculate colormap for weapon sprites
|
// calculate colormap for weapon sprites
|
||||||
if (viewsector->e->XFloor.ffloors.Size() && !glset.nocoloredspritelighting)
|
if (viewsector->e->XFloor.ffloors.Size() && !glset.nocoloredspritelighting)
|
||||||
|
|
|
@ -33,7 +33,9 @@
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "gl/system/gl_system.h"
|
||||||
#include "gl/stereo3d/gl_stereo3d.h"
|
#include "gl/stereo3d/gl_stereo3d.h"
|
||||||
|
#include "gl/renderer/gl_renderer.h"
|
||||||
#include "vectors.h" // RAD2DEG
|
#include "vectors.h" // RAD2DEG
|
||||||
#include "doomtype.h" // M_PI
|
#include "doomtype.h" // M_PI
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "vectors.h" // RAD2DEG
|
#include "vectors.h" // RAD2DEG
|
||||||
#include "doomtype.h" // M_PI
|
#include "doomtype.h" // M_PI
|
||||||
#include "gl/system/gl_cvars.h"
|
#include "gl/system/gl_cvars.h"
|
||||||
|
#include "gl/renderer/gl_renderer.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
EXTERN_CVAR(Float, vr_screendist)
|
EXTERN_CVAR(Float, vr_screendist)
|
||||||
|
|
|
@ -185,7 +185,7 @@ void CheckBench()
|
||||||
|
|
||||||
compose.Format("Map %s: \"%s\",\nx = %1.4f, y = %1.4f, z = %1.4f, angle = %1.4f, pitch = %1.4f\n",
|
compose.Format("Map %s: \"%s\",\nx = %1.4f, y = %1.4f, z = %1.4f, angle = %1.4f, pitch = %1.4f\n",
|
||||||
level.MapName.GetChars(), level.LevelName.GetChars(), FIXED2FLOAT(viewx), FIXED2FLOAT(viewy), FIXED2FLOAT(viewz),
|
level.MapName.GetChars(), level.LevelName.GetChars(), FIXED2FLOAT(viewx), FIXED2FLOAT(viewy), FIXED2FLOAT(viewz),
|
||||||
ANGLE_TO_FLOAT(viewangle), ANGLE_TO_FLOAT(viewpitch));
|
ANGLE2FLOAT(viewangle), ANGLE2FLOAT(viewpitch));
|
||||||
|
|
||||||
AppendRenderStats(compose);
|
AppendRenderStats(compose);
|
||||||
AppendRenderTimes(compose);
|
AppendRenderTimes(compose);
|
||||||
|
|
|
@ -3,7 +3,5 @@
|
||||||
#define __GLC_CONVERT
|
#define __GLC_CONVERT
|
||||||
|
|
||||||
#include "m_fixed.h"
|
#include "m_fixed.h"
|
||||||
#define ANGLE_TO_FLOAT(ang) ((float)((ang) * 180. / ANGLE_180))
|
|
||||||
#define FLOAT_TO_ANGLE(ang) xs_RoundToUInt((ang) / 180. * ANGLE_180)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue