Render environment probe at player position
This commit is contained in:
parent
c4c249cd7c
commit
3f01630b8a
10 changed files with 131 additions and 44 deletions
|
|
@ -56,6 +56,7 @@ EXTERN_CVAR(Bool, gl_bandedswlight)
|
|||
EXTERN_CVAR(Bool, lm_dynlights);
|
||||
|
||||
CVAR(Bool, gl_raytrace, false, 0/*CVAR_ARCHIVE | CVAR_GLOBALCONFIG*/)
|
||||
CVAR(Bool, gl_lightprobe, false, 0/*CVAR_ARCHIVE | CVAR_GLOBALCONFIG*/)
|
||||
|
||||
extern bool NoInterpolateView;
|
||||
|
||||
|
|
@ -108,11 +109,11 @@ void CollectLights(FLevelLocals* Level)
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
sector_t* RenderViewpoint(FRenderViewpoint& mainvp, AActor* camera, IntRect* bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen)
|
||||
sector_t* RenderViewpoint(FRenderViewpoint& mainvp, AActor* camera, IntRect* bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen, int side)
|
||||
{
|
||||
auto& RenderState = *screen->RenderState();
|
||||
|
||||
R_SetupFrame(mainvp, r_viewwindow, camera);
|
||||
R_SetupFrame(mainvp, r_viewwindow, camera, side);
|
||||
|
||||
if (mainview && toscreen && !(camera->Level->flags3 & LEVEL3_NOSHADOWMAP) && camera->Level->HasDynamicLights && gl_light_shadows > 0 && !lm_dynlights)
|
||||
{
|
||||
|
|
@ -399,6 +400,22 @@ sector_t* RenderView(player_t* player)
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (gl_lightprobe)
|
||||
{
|
||||
// Render the light probes if not found in a lump
|
||||
// To do: we need light probe actors
|
||||
AActor* lightprobe = player->camera;
|
||||
if (lightprobe)
|
||||
{
|
||||
screen->RenderEnvironmentMap([=](IntRect& bounds, int side)
|
||||
{
|
||||
FRenderViewpoint probevp;
|
||||
RenderViewpoint(probevp, lightprobe, &bounds, 90.0, 1.0f, 1.0f, false, false, side);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
NoInterpolateView = saved_niv;
|
||||
|
||||
// now render the main view
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ private:
|
|||
};
|
||||
|
||||
void CleanSWDrawer();
|
||||
sector_t* RenderViewpoint(FRenderViewpoint& mainvp, AActor* camera, IntRect* bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen);
|
||||
sector_t* RenderViewpoint(FRenderViewpoint& mainvp, AActor* camera, IntRect* bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen, int side = -1);
|
||||
void WriteSavePic(player_t* player, FileWriter* file, int width, int height);
|
||||
sector_t* RenderView(player_t* player);
|
||||
|
||||
|
|
|
|||
|
|
@ -903,7 +903,7 @@ static void R_DoActorTickerAngleChanges(player_t* const player, DRotator& angles
|
|||
EXTERN_CVAR(Float, chase_dist)
|
||||
EXTERN_CVAR(Float, chase_height)
|
||||
|
||||
void R_SetupFrame(FRenderViewpoint& viewPoint, const FViewWindow& viewWindow, AActor* const actor)
|
||||
void R_SetupFrame(FRenderViewpoint& viewPoint, const FViewWindow& viewWindow, AActor* const actor, int side)
|
||||
{
|
||||
viewPoint.TicFrac = I_GetTimeFrac();
|
||||
if (cl_capfps || r_NoInterpolate)
|
||||
|
|
@ -1067,6 +1067,41 @@ void R_SetupFrame(FRenderViewpoint& viewPoint, const FViewWindow& viewWindow, AA
|
|||
|
||||
R_InterpolateView(viewPoint, player, viewPoint.TicFrac, iView);
|
||||
|
||||
if (side != -1) // Cubemap rendering
|
||||
{
|
||||
DRotator cubeside;
|
||||
cubeside.Roll = DAngle::fromDeg(0);
|
||||
switch (side)
|
||||
{
|
||||
default:
|
||||
case 0: // +X
|
||||
cubeside.Yaw = DAngle::fromDeg(0);
|
||||
cubeside.Pitch = DAngle::fromDeg(0);
|
||||
break;
|
||||
case 1: // +Y
|
||||
cubeside.Yaw = DAngle::fromDeg(90);
|
||||
cubeside.Pitch = DAngle::fromDeg(0);
|
||||
break;
|
||||
case 2: // +Z
|
||||
cubeside.Yaw = DAngle::fromDeg(0);
|
||||
cubeside.Pitch = DAngle::fromDeg(90);
|
||||
break;
|
||||
case 3: // -X
|
||||
cubeside.Yaw = DAngle::fromDeg(180);
|
||||
cubeside.Pitch = DAngle::fromDeg(0);
|
||||
break;
|
||||
case 4: // -Y
|
||||
cubeside.Yaw = DAngle::fromDeg(-90);
|
||||
cubeside.Pitch = DAngle::fromDeg(0);
|
||||
break;
|
||||
case 5: // -Z
|
||||
cubeside.Yaw = DAngle::fromDeg(0);
|
||||
cubeside.Pitch = DAngle::fromDeg(-90);
|
||||
break;
|
||||
}
|
||||
viewPoint.Angles = cubeside;
|
||||
}
|
||||
|
||||
viewPoint.SetViewAngle(viewWindow);
|
||||
|
||||
// Keep the view within the sector's floor and ceiling
|
||||
|
|
|
|||
|
|
@ -126,8 +126,7 @@ void R_ClearInterpolationPath();
|
|||
void R_AddInterpolationPoint(const DVector3a &vec);
|
||||
void R_SetViewSize (int blocks);
|
||||
void R_SetFOV (FRenderViewpoint &viewpoint, DAngle fov);
|
||||
void R_SetupFrame(FRenderViewpoint& viewPoint, const FViewWindow& viewWindow, AActor* const camera);
|
||||
void R_SetViewAngle (FRenderViewpoint &viewpoint, const FViewWindow &viewwindow);
|
||||
void R_SetupFrame(FRenderViewpoint& viewPoint, const FViewWindow& viewWindow, AActor* const camera, int side = -1);
|
||||
|
||||
// Called by startup code.
|
||||
void R_Init (void);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue