mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 15:02:01 +00:00
- CreateScene, too.
This commit is contained in:
parent
70f9507f16
commit
5528981a77
8 changed files with 60 additions and 62 deletions
|
@ -819,7 +819,6 @@ set( FASTMATH_SOURCES
|
||||||
textures/hires/hqnx/hq4x.cpp
|
textures/hires/hqnx/hq4x.cpp
|
||||||
textures/hires/xbr/xbrz.cpp
|
textures/hires/xbr/xbrz.cpp
|
||||||
textures/hires/xbr/xbrz_old.cpp
|
textures/hires/xbr/xbrz_old.cpp
|
||||||
gl/scene/gl_drawinfo.cpp
|
|
||||||
gl/scene/gl_scene.cpp
|
gl/scene/gl_scene.cpp
|
||||||
gl_load/gl_load.c
|
gl_load/gl_load.c
|
||||||
hwrenderer/postprocessing/hw_postprocess_cvars.cpp
|
hwrenderer/postprocessing/hw_postprocess_cvars.cpp
|
||||||
|
|
|
@ -186,7 +186,7 @@ void FGLRenderer::EndOffscreen()
|
||||||
|
|
||||||
void FGLRenderer::UpdateShadowMap()
|
void FGLRenderer::UpdateShadowMap()
|
||||||
{
|
{
|
||||||
if (mShadowMap.PerformUpdate())
|
if (screen->mShadowMap.PerformUpdate())
|
||||||
{
|
{
|
||||||
FGLDebug::PushGroup("ShadowMap");
|
FGLDebug::PushGroup("ShadowMap");
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ void FGLRenderer::UpdateShadowMap()
|
||||||
|
|
||||||
mBuffers->BindShadowMapTexture(16);
|
mBuffers->BindShadowMapTexture(16);
|
||||||
FGLDebug::PopGroup();
|
FGLDebug::PopGroup();
|
||||||
mShadowMap.FinishUpdate();
|
screen->mShadowMap.FinishUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,8 +66,6 @@ public:
|
||||||
FShadowMapShader *mShadowMapShader = nullptr;
|
FShadowMapShader *mShadowMapShader = nullptr;
|
||||||
FCustomPostProcessShaders *mCustomPostProcessShaders = nullptr;
|
FCustomPostProcessShaders *mCustomPostProcessShaders = nullptr;
|
||||||
|
|
||||||
IShadowMap mShadowMap;
|
|
||||||
|
|
||||||
//FRotator mAngles;
|
//FRotator mAngles;
|
||||||
|
|
||||||
SWSceneDrawer *swdrawer = nullptr;
|
SWSceneDrawer *swdrawer = nullptr;
|
||||||
|
|
|
@ -74,61 +74,6 @@ EXTERN_CVAR (Float, r_visibility)
|
||||||
EXTERN_CVAR (Bool, r_drawvoxels)
|
EXTERN_CVAR (Bool, r_drawvoxels)
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// CreateScene
|
|
||||||
//
|
|
||||||
// creates the draw lists for the current scene
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void FDrawInfo::CreateScene()
|
|
||||||
{
|
|
||||||
const auto &vp = Viewpoint;
|
|
||||||
angle_t a1 = FrustumAngle();
|
|
||||||
mClipper->SafeAddClipRangeRealAngles(vp.Angles.Yaw.BAMs() + a1, vp.Angles.Yaw.BAMs() - a1);
|
|
||||||
|
|
||||||
// reset the portal manager
|
|
||||||
screen->mPortalState->StartFrame();
|
|
||||||
PO_LinkToSubsectors();
|
|
||||||
|
|
||||||
ProcessAll.Clock();
|
|
||||||
|
|
||||||
// clip the scene and fill the drawlists
|
|
||||||
Bsp.Clock();
|
|
||||||
screen->mVertexData->Map();
|
|
||||||
screen->mLights->Map();
|
|
||||||
|
|
||||||
// Give the DrawInfo the viewpoint in fixed point because that's what the nodes are.
|
|
||||||
viewx = FLOAT2FIXED(vp.Pos.X);
|
|
||||||
viewy = FLOAT2FIXED(vp.Pos.Y);
|
|
||||||
|
|
||||||
validcount++; // used for processing sidedefs only once by the renderer.
|
|
||||||
|
|
||||||
mShadowMap = &GLRenderer->mShadowMap;
|
|
||||||
|
|
||||||
RenderBSPNode (level.HeadNode());
|
|
||||||
PreparePlayerSprites(vp.sector, in_area);
|
|
||||||
|
|
||||||
// Process all the sprites on the current portal's back side which touch the portal.
|
|
||||||
if (mCurrentPortal != nullptr) mCurrentPortal->RenderAttached(this);
|
|
||||||
Bsp.Unclock();
|
|
||||||
|
|
||||||
// And now the crappy hacks that have to be done to avoid rendering anomalies.
|
|
||||||
// These cannot be multithreaded when the time comes because all these depend
|
|
||||||
// on the global 'validcount' variable.
|
|
||||||
|
|
||||||
HandleMissingTextures(in_area); // Missing upper/lower textures
|
|
||||||
HandleHackedSubsectors(); // open sector hacks for deep water
|
|
||||||
ProcessSectorStacks(in_area); // merge visplanes of sector stacks
|
|
||||||
PrepareUnhandledMissingTextures();
|
|
||||||
screen->mLights->Unmap();
|
|
||||||
screen->mVertexData->Unmap();
|
|
||||||
|
|
||||||
ProcessAll.Unclock();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// gl_drawscene - this function renders the scene from the current
|
// gl_drawscene - this function renders the scene from the current
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "hw_portal.h"
|
#include "hw_portal.h"
|
||||||
#include "hw_renderstate.h"
|
#include "hw_renderstate.h"
|
||||||
#include "hw_drawinfo.h"
|
#include "hw_drawinfo.h"
|
||||||
|
#include "po_man.h"
|
||||||
#include "hwrenderer/utility/hw_clock.h"
|
#include "hwrenderer/utility/hw_clock.h"
|
||||||
#include "hwrenderer/utility/hw_cvars.h"
|
#include "hwrenderer/utility/hw_cvars.h"
|
||||||
#include "hwrenderer/data/hw_viewpointbuffer.h"
|
#include "hwrenderer/data/hw_viewpointbuffer.h"
|
||||||
|
@ -423,6 +424,59 @@ GLDecal *HWDrawInfo::AddDecal(bool onmirror)
|
||||||
return decal;
|
return decal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// CreateScene
|
||||||
|
//
|
||||||
|
// creates the draw lists for the current scene
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void HWDrawInfo::CreateScene()
|
||||||
|
{
|
||||||
|
const auto &vp = Viewpoint;
|
||||||
|
angle_t a1 = FrustumAngle();
|
||||||
|
mClipper->SafeAddClipRangeRealAngles(vp.Angles.Yaw.BAMs() + a1, vp.Angles.Yaw.BAMs() - a1);
|
||||||
|
|
||||||
|
// reset the portal manager
|
||||||
|
screen->mPortalState->StartFrame();
|
||||||
|
PO_LinkToSubsectors();
|
||||||
|
|
||||||
|
ProcessAll.Clock();
|
||||||
|
|
||||||
|
// clip the scene and fill the drawlists
|
||||||
|
Bsp.Clock();
|
||||||
|
screen->mVertexData->Map();
|
||||||
|
screen->mLights->Map();
|
||||||
|
|
||||||
|
// Give the DrawInfo the viewpoint in fixed point because that's what the nodes are.
|
||||||
|
viewx = FLOAT2FIXED(vp.Pos.X);
|
||||||
|
viewy = FLOAT2FIXED(vp.Pos.Y);
|
||||||
|
|
||||||
|
validcount++; // used for processing sidedefs only once by the renderer.
|
||||||
|
|
||||||
|
RenderBSPNode(level.HeadNode());
|
||||||
|
PreparePlayerSprites(vp.sector, in_area);
|
||||||
|
|
||||||
|
// Process all the sprites on the current portal's back side which touch the portal.
|
||||||
|
if (mCurrentPortal != nullptr) mCurrentPortal->RenderAttached(this);
|
||||||
|
Bsp.Unclock();
|
||||||
|
|
||||||
|
// And now the crappy hacks that have to be done to avoid rendering anomalies.
|
||||||
|
// These cannot be multithreaded when the time comes because all these depend
|
||||||
|
// on the global 'validcount' variable.
|
||||||
|
|
||||||
|
HandleMissingTextures(in_area); // Missing upper/lower textures
|
||||||
|
HandleHackedSubsectors(); // open sector hacks for deep water
|
||||||
|
ProcessSectorStacks(in_area); // merge visplanes of sector stacks
|
||||||
|
PrepareUnhandledMissingTextures();
|
||||||
|
screen->mLights->Unmap();
|
||||||
|
screen->mVertexData->Unmap();
|
||||||
|
|
||||||
|
ProcessAll.Unclock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// RenderScene
|
// RenderScene
|
||||||
|
|
|
@ -184,7 +184,6 @@ struct HWDrawInfo
|
||||||
HWScenePortalBase *mClipPortal;
|
HWScenePortalBase *mClipPortal;
|
||||||
HWPortal *mCurrentPortal;
|
HWPortal *mCurrentPortal;
|
||||||
//FRotator mAngles;
|
//FRotator mAngles;
|
||||||
IShadowMap *mShadowMap;
|
|
||||||
Clipper *mClipper;
|
Clipper *mClipper;
|
||||||
FRenderViewpoint Viewpoint;
|
FRenderViewpoint Viewpoint;
|
||||||
HWViewpointUniforms VPUniforms; // per-viewpoint uniform state
|
HWViewpointUniforms VPUniforms; // per-viewpoint uniform state
|
||||||
|
@ -305,6 +304,7 @@ public:
|
||||||
void SetViewArea();
|
void SetViewArea();
|
||||||
int SetFullbrightFlags(player_t *player);
|
int SetFullbrightFlags(player_t *player);
|
||||||
|
|
||||||
|
void CreateScene();
|
||||||
void RenderScene(FRenderState &state);
|
void RenderScene(FRenderState &state);
|
||||||
void RenderTranslucent(FRenderState &state);
|
void RenderTranslucent(FRenderState &state);
|
||||||
void RenderPortal(HWPortal *p, FRenderState &state, bool usestencil);
|
void RenderPortal(HWPortal *p, FRenderState &state, bool usestencil);
|
||||||
|
|
|
@ -103,7 +103,7 @@ void HWDrawInfo::GetDynSpriteLight(AActor *self, float x, float y, float z, FLig
|
||||||
frac *= (float)smoothstep(light->SpotOuterAngle.Cos(), light->SpotInnerAngle.Cos(), cosDir);
|
frac *= (float)smoothstep(light->SpotOuterAngle.Cos(), light->SpotInnerAngle.Cos(), cosDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frac > 0 && (!light->shadowmapped || mShadowMap->ShadowTest(light, { x, y, z })))
|
if (frac > 0 && (!light->shadowmapped || screen->mShadowMap.ShadowTest(light, { x, y, z })))
|
||||||
{
|
{
|
||||||
lr = light->GetRed() / 255.0f;
|
lr = light->GetRed() / 255.0f;
|
||||||
lg = light->GetGreen() / 255.0f;
|
lg = light->GetGreen() / 255.0f;
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "c_cvars.h"
|
#include "c_cvars.h"
|
||||||
#include "v_colortables.h"
|
#include "v_colortables.h"
|
||||||
#include "v_2ddrawer.h"
|
#include "v_2ddrawer.h"
|
||||||
|
#include "hwrenderer/dynlights/hw_shadowmap.h"
|
||||||
|
|
||||||
struct sector_t;
|
struct sector_t;
|
||||||
class IShaderProgram;
|
class IShaderProgram;
|
||||||
|
@ -383,6 +384,7 @@ public:
|
||||||
FFlatVertexBuffer *mVertexData = nullptr; // Global vertex data
|
FFlatVertexBuffer *mVertexData = nullptr; // Global vertex data
|
||||||
GLViewpointBuffer *mViewpoints = nullptr; // Viewpoint render data.
|
GLViewpointBuffer *mViewpoints = nullptr; // Viewpoint render data.
|
||||||
FLightBuffer *mLights = nullptr; // Dynamic lights
|
FLightBuffer *mLights = nullptr; // Dynamic lights
|
||||||
|
IShadowMap mShadowMap;
|
||||||
|
|
||||||
IntRect mScreenViewport;
|
IntRect mScreenViewport;
|
||||||
IntRect mSceneViewport;
|
IntRect mSceneViewport;
|
||||||
|
|
Loading…
Reference in a new issue