mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-27 14:22:13 +00:00
- moved ViewActor variable into FRenderViewpoint.
This commit is contained in:
parent
87dfa34f1f
commit
eddb179e36
6 changed files with 20 additions and 25 deletions
|
@ -93,7 +93,6 @@ public:
|
||||||
int mMirrorCount;
|
int mMirrorCount;
|
||||||
int mPlaneMirrorCount;
|
int mPlaneMirrorCount;
|
||||||
float mCurrentFoV;
|
float mCurrentFoV;
|
||||||
AActor *mViewActor;
|
|
||||||
FShaderManager *mShaderManager;
|
FShaderManager *mShaderManager;
|
||||||
FSamplerManager *mSamplerManager;
|
FSamplerManager *mSamplerManager;
|
||||||
unsigned int mFBID;
|
unsigned int mFBID;
|
||||||
|
|
|
@ -267,14 +267,13 @@ bool GLPortal::Start(bool usestencil, bool doquery, FDrawInfo **pDi)
|
||||||
|
|
||||||
// save viewpoint
|
// save viewpoint
|
||||||
savedviewpoint = r_viewpoint;
|
savedviewpoint = r_viewpoint;
|
||||||
savedviewactor=GLRenderer->mViewActor;
|
|
||||||
savedvisibility = r_viewpoint.camera ? r_viewpoint.camera->renderflags & RF_MAYBEINVISIBLE : ActorRenderFlags::FromInt(0);
|
savedvisibility = r_viewpoint.camera ? r_viewpoint.camera->renderflags & RF_MAYBEINVISIBLE : ActorRenderFlags::FromInt(0);
|
||||||
|
|
||||||
|
|
||||||
PrevPortal = GLRenderer->mCurrentPortal;
|
PrevPortal = GLRenderer->mCurrentPortal;
|
||||||
GLRenderer->mCurrentPortal = this;
|
GLRenderer->mCurrentPortal = this;
|
||||||
|
|
||||||
if (PrevPortal != NULL) PrevPortal->PushState();
|
if (PrevPortal != nullptr) PrevPortal->PushState();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +316,7 @@ void GLPortal::End(bool usestencil)
|
||||||
bool needdepth = NeedDepthBuffer();
|
bool needdepth = NeedDepthBuffer();
|
||||||
|
|
||||||
Clocker c(PortalAll);
|
Clocker c(PortalAll);
|
||||||
if (PrevPortal != NULL) PrevPortal->PopState();
|
if (PrevPortal != nullptr) PrevPortal->PopState();
|
||||||
GLRenderer->mCurrentPortal = PrevPortal;
|
GLRenderer->mCurrentPortal = PrevPortal;
|
||||||
|
|
||||||
if (usestencil)
|
if (usestencil)
|
||||||
|
@ -326,7 +325,6 @@ void GLPortal::End(bool usestencil)
|
||||||
|
|
||||||
// Restore the old view
|
// Restore the old view
|
||||||
r_viewpoint = savedviewpoint;
|
r_viewpoint = savedviewpoint;
|
||||||
GLRenderer->mViewActor=savedviewactor;
|
|
||||||
if (r_viewpoint.camera != nullptr) r_viewpoint.camera->renderflags = (r_viewpoint.camera->renderflags & ~RF_MAYBEINVISIBLE) | savedvisibility;
|
if (r_viewpoint.camera != nullptr) r_viewpoint.camera->renderflags = (r_viewpoint.camera->renderflags & ~RF_MAYBEINVISIBLE) | savedvisibility;
|
||||||
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1));
|
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1));
|
||||||
|
|
||||||
|
@ -381,7 +379,6 @@ void GLPortal::End(bool usestencil)
|
||||||
}
|
}
|
||||||
// Restore the old view
|
// Restore the old view
|
||||||
r_viewpoint = savedviewpoint;
|
r_viewpoint = savedviewpoint;
|
||||||
GLRenderer->mViewActor=savedviewactor;
|
|
||||||
if (r_viewpoint.camera != nullptr) r_viewpoint.camera->renderflags |= savedvisibility;
|
if (r_viewpoint.camera != nullptr) r_viewpoint.camera->renderflags |= savedvisibility;
|
||||||
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
||||||
|
|
||||||
|
@ -458,7 +455,7 @@ void GLPortal::EndFrame()
|
||||||
|
|
||||||
// Only use occlusion query if there are more than 2 portals.
|
// Only use occlusion query if there are more than 2 portals.
|
||||||
// Otherwise there's too much overhead.
|
// Otherwise there's too much overhead.
|
||||||
// (And don't forget to consider the separating NULL pointers!)
|
// (And don't forget to consider the separating nullptr pointers!)
|
||||||
bool usequery = portals.Size() > 2 + (unsigned)renderdepth;
|
bool usequery = portals.Size() > 2 + (unsigned)renderdepth;
|
||||||
|
|
||||||
while (portals.Pop(p) && p)
|
while (portals.Pop(p) && p)
|
||||||
|
@ -494,13 +491,13 @@ void GLPortal::EndFrame()
|
||||||
bool GLPortal::RenderFirstSkyPortal(int recursion)
|
bool GLPortal::RenderFirstSkyPortal(int recursion)
|
||||||
{
|
{
|
||||||
GLPortal * p;
|
GLPortal * p;
|
||||||
GLPortal * best = NULL;
|
GLPortal * best = nullptr;
|
||||||
unsigned bestindex=0;
|
unsigned bestindex=0;
|
||||||
|
|
||||||
// Find the one with the highest amount of lines.
|
// Find the one with the highest amount of lines.
|
||||||
// Normally this is also the one that saves the largest amount
|
// Normally this is also the one that saves the largest amount
|
||||||
// of time by drawing it before the scene itself.
|
// of time by drawing it before the scene itself.
|
||||||
for(int i = portals.Size()-1; i >= 0 && portals[i] != NULL; --i)
|
for(int i = portals.Size()-1; i >= 0 && portals[i] != nullptr; --i)
|
||||||
{
|
{
|
||||||
p=portals[i];
|
p=portals[i];
|
||||||
if (p->lines.Size() > 0 && p->IsSky())
|
if (p->lines.Size() > 0 && p->IsSky())
|
||||||
|
@ -538,7 +535,7 @@ GLPortal * GLPortal::FindPortal(const void * src)
|
||||||
int i=portals.Size()-1;
|
int i=portals.Size()-1;
|
||||||
|
|
||||||
while (i>=0 && portals[i] && portals[i]->GetSource()!=src) i--;
|
while (i>=0 && portals[i] && portals[i]->GetSource()!=src) i--;
|
||||||
return i>=0? portals[i]:NULL;
|
return i>=0? portals[i]:nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -587,7 +584,7 @@ void GLSkyboxPortal::DrawContents(FDrawInfo *di)
|
||||||
if (r_viewpoint.Pos.Z < floorh + 4) r_viewpoint.Pos.Z = floorh + 4;
|
if (r_viewpoint.Pos.Z < floorh + 4) r_viewpoint.Pos.Z = floorh + 4;
|
||||||
if (r_viewpoint.Pos.Z > ceilh - 4) r_viewpoint.Pos.Z = ceilh - 4;
|
if (r_viewpoint.Pos.Z > ceilh - 4) r_viewpoint.Pos.Z = ceilh - 4;
|
||||||
|
|
||||||
GLRenderer->mViewActor = origin;
|
r_viewpoint.ViewActor = origin;
|
||||||
|
|
||||||
inskybox = true;
|
inskybox = true;
|
||||||
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1));
|
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1));
|
||||||
|
@ -625,7 +622,7 @@ void GLSkyboxPortal::DrawContents(FDrawInfo *di)
|
||||||
|
|
||||||
GLSectorStackPortal *FSectorPortalGroup::GetRenderState()
|
GLSectorStackPortal *FSectorPortalGroup::GetRenderState()
|
||||||
{
|
{
|
||||||
if (glportal == NULL) glportal = new GLSectorStackPortal(this);
|
if (glportal == nullptr) glportal = new GLSectorStackPortal(this);
|
||||||
return glportal;
|
return glportal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,9 +630,9 @@ GLSectorStackPortal *FSectorPortalGroup::GetRenderState()
|
||||||
|
|
||||||
GLSectorStackPortal::~GLSectorStackPortal()
|
GLSectorStackPortal::~GLSectorStackPortal()
|
||||||
{
|
{
|
||||||
if (origin != NULL && origin->glportal == this)
|
if (origin != nullptr && origin->glportal == this)
|
||||||
{
|
{
|
||||||
origin->glportal = NULL;
|
origin->glportal = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -692,7 +689,7 @@ void GLSectorStackPortal::DrawContents(FDrawInfo *di)
|
||||||
|
|
||||||
r_viewpoint.Pos += origin->mDisplacement;
|
r_viewpoint.Pos += origin->mDisplacement;
|
||||||
r_viewpoint.ActorPos += origin->mDisplacement;
|
r_viewpoint.ActorPos += origin->mDisplacement;
|
||||||
GLRenderer->mViewActor = NULL;
|
r_viewpoint.ViewActor = nullptr;
|
||||||
|
|
||||||
// avoid recursions!
|
// avoid recursions!
|
||||||
if (origin->plane != -1) screen->instack[origin->plane]++;
|
if (origin->plane != -1) screen->instack[origin->plane]++;
|
||||||
|
@ -748,7 +745,7 @@ void GLPlaneMirrorPortal::DrawContents(FDrawInfo *di)
|
||||||
|
|
||||||
double planez = origin->ZatPoint(r_viewpoint.Pos);
|
double planez = origin->ZatPoint(r_viewpoint.Pos);
|
||||||
r_viewpoint.Pos.Z = 2 * planez - r_viewpoint.Pos.Z;
|
r_viewpoint.Pos.Z = 2 * planez - r_viewpoint.Pos.Z;
|
||||||
GLRenderer->mViewActor = NULL;
|
r_viewpoint.ViewActor = nullptr;
|
||||||
PlaneMirrorMode = origin->fC() < 0 ? -1 : 1;
|
PlaneMirrorMode = origin->fC() < 0 ? -1 : 1;
|
||||||
|
|
||||||
PlaneMirrorFlag++;
|
PlaneMirrorFlag++;
|
||||||
|
@ -919,7 +916,7 @@ void GLMirrorPortal::DrawContents(FDrawInfo *di)
|
||||||
}
|
}
|
||||||
r_viewpoint.Angles.Yaw = linedef->Delta().Angle() * 2. - StartAngle;
|
r_viewpoint.Angles.Yaw = linedef->Delta().Angle() * 2. - StartAngle;
|
||||||
|
|
||||||
GLRenderer->mViewActor = NULL;
|
r_viewpoint.ViewActor = nullptr;
|
||||||
|
|
||||||
MirrorFlag++;
|
MirrorFlag++;
|
||||||
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
||||||
|
@ -998,7 +995,7 @@ void GLLineToLinePortal::DrawContents(FDrawInfo *di)
|
||||||
di->CurrentMapSections.Set(sub->mapsection);
|
di->CurrentMapSections.Set(sub->mapsection);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLRenderer->mViewActor = nullptr;
|
r_viewpoint.ViewActor = nullptr;
|
||||||
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag&1), !!(PlaneMirrorFlag&1));
|
||||||
|
|
||||||
ClearClipper(di);
|
ClearClipper(di);
|
||||||
|
|
|
@ -236,7 +236,6 @@ void GLSceneDrawer::CreateScene(FDrawInfo *di)
|
||||||
validcount++; // used for processing sidedefs only once by the renderer.
|
validcount++; // used for processing sidedefs only once by the renderer.
|
||||||
|
|
||||||
di->mAngles = GLRenderer->mAngles;
|
di->mAngles = GLRenderer->mAngles;
|
||||||
di->mViewActor = GLRenderer->mViewActor;
|
|
||||||
di->mShadowMap = &GLRenderer->mShadowMap;
|
di->mShadowMap = &GLRenderer->mShadowMap;
|
||||||
|
|
||||||
di->RenderBSPNode (level.HeadNode());
|
di->RenderBSPNode (level.HeadNode());
|
||||||
|
@ -633,14 +632,14 @@ sector_t * GLSceneDrawer::RenderViewpoint (AActor * camera, IntRect * bounds, fl
|
||||||
GLRenderer->mAngles.Pitch = (float)RAD2DEG(asin(angy / alen));
|
GLRenderer->mAngles.Pitch = (float)RAD2DEG(asin(angy / alen));
|
||||||
GLRenderer->mAngles.Roll.Degrees = r_viewpoint.Angles.Roll.Degrees;
|
GLRenderer->mAngles.Roll.Degrees = r_viewpoint.Angles.Roll.Degrees;
|
||||||
|
|
||||||
if (camera->player && camera->player-players==consoleplayer &&
|
if (camera->player && camera->player - players == consoleplayer &&
|
||||||
((camera->player->cheats & CF_CHASECAM) || (r_deathcamera && camera->health <= 0)) && camera==camera->player->mo)
|
((camera->player->cheats & CF_CHASECAM) || (r_deathcamera && camera->health <= 0)) && camera == camera->player->mo)
|
||||||
{
|
{
|
||||||
GLRenderer->mViewActor=NULL;
|
r_viewpoint.ViewActor = nullptr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GLRenderer->mViewActor=camera;
|
r_viewpoint.ViewActor = camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'viewsector' will not survive the rendering so it cannot be used anymore below.
|
// 'viewsector' will not survive the rendering so it cannot be used anymore below.
|
||||||
|
|
|
@ -84,7 +84,6 @@ struct HWDrawInfo
|
||||||
std::atomic<int> spriteindex;
|
std::atomic<int> spriteindex;
|
||||||
IPortal *mClipPortal;
|
IPortal *mClipPortal;
|
||||||
FRotator mAngles;
|
FRotator mAngles;
|
||||||
AActor *mViewActor;
|
|
||||||
IShadowMap *mShadowMap;
|
IShadowMap *mShadowMap;
|
||||||
Clipper *mClipper;
|
Clipper *mClipper;
|
||||||
|
|
||||||
|
|
|
@ -461,7 +461,7 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t
|
||||||
// don't draw first frame of a player missile
|
// don't draw first frame of a player missile
|
||||||
if (thing->flags&MF_MISSILE)
|
if (thing->flags&MF_MISSILE)
|
||||||
{
|
{
|
||||||
if (!(thing->flags7 & MF7_FLYCHEAT) && thing->target == di->mViewActor && di->mViewActor != nullptr)
|
if (!(thing->flags7 & MF7_FLYCHEAT) && thing->target == vp.ViewActor && vp.ViewActor != nullptr)
|
||||||
{
|
{
|
||||||
double speed = thing->Vel.Length();
|
double speed = thing->Vel.Length();
|
||||||
if (speed >= thing->target->radius / 2)
|
if (speed >= thing->target->radius / 2)
|
||||||
|
|
|
@ -22,6 +22,7 @@ struct FRenderViewpoint
|
||||||
DVector3 ActorPos; // Camera actor's position
|
DVector3 ActorPos; // Camera actor's position
|
||||||
DRotator Angles; // Camera angles
|
DRotator Angles; // Camera angles
|
||||||
DVector2 ViewVector; // HWR only: direction the camera is facing.
|
DVector2 ViewVector; // HWR only: direction the camera is facing.
|
||||||
|
AActor *ViewActor; // either the same as camera or nullptr
|
||||||
|
|
||||||
DVector3 Path[2]; // View path for portal calculations
|
DVector3 Path[2]; // View path for portal calculations
|
||||||
double Cos; // cos(Angles.Yaw)
|
double Cos; // cos(Angles.Yaw)
|
||||||
|
|
Loading…
Reference in a new issue