mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 05:21:02 +00:00
- moved the last remaining function from gl_shadowmap.cpp elsewhere so that the file can be deleted.
This commit is contained in:
parent
54f46fdfee
commit
e6efee61b1
7 changed files with 61 additions and 98 deletions
|
@ -700,7 +700,6 @@ file( GLOB HEADER_FILES
|
||||||
hwrenderer/textures/*.h
|
hwrenderer/textures/*.h
|
||||||
hwrenderer/utility/*.h
|
hwrenderer/utility/*.h
|
||||||
gl/*.h
|
gl/*.h
|
||||||
gl/dynlights/*.h
|
|
||||||
gl/models/*.h
|
gl/models/*.h
|
||||||
gl/renderer/*.h
|
gl/renderer/*.h
|
||||||
gl/scene/*.h
|
gl/scene/*.h
|
||||||
|
@ -1037,7 +1036,6 @@ set (PCH_SOURCES
|
||||||
g_statusbar/sbarinfo.cpp
|
g_statusbar/sbarinfo.cpp
|
||||||
g_statusbar/sbar_mugshot.cpp
|
g_statusbar/sbar_mugshot.cpp
|
||||||
g_statusbar/shared_sbar.cpp
|
g_statusbar/shared_sbar.cpp
|
||||||
gl/dynlights/gl_shadowmap.cpp
|
|
||||||
gl/renderer/gl_renderer.cpp
|
gl/renderer/gl_renderer.cpp
|
||||||
gl/renderer/gl_renderstate.cpp
|
gl/renderer/gl_renderstate.cpp
|
||||||
gl/renderer/gl_renderbuffers.cpp
|
gl/renderer/gl_renderbuffers.cpp
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// 1D dynamic shadow maps (OpenGL dependent part)
|
|
||||||
// Copyright(C) 2017 Magnus Norddahl
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
|
||||||
// along with this program. If not, see http://www.gnu.org/licenses/
|
|
||||||
//
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "gl_load/gl_system.h"
|
|
||||||
#include "gl/shaders/gl_shader.h"
|
|
||||||
#include "gl/dynlights/gl_shadowmap.h"
|
|
||||||
#include "gl/system/gl_debug.h"
|
|
||||||
#include "hwrenderer/utility/hw_cvars.h"
|
|
||||||
#include "gl/renderer/gl_renderer.h"
|
|
||||||
#include "gl/renderer/gl_postprocessstate.h"
|
|
||||||
#include "gl/renderer/gl_renderbuffers.h"
|
|
||||||
#include "hwrenderer/postprocessing/hw_shadowmapshader.h"
|
|
||||||
#include "hwrenderer/dynlights/hw_dynlightdata.h"
|
|
||||||
#include "stats.h"
|
|
||||||
|
|
||||||
void FShadowMap::Update()
|
|
||||||
{
|
|
||||||
UpdateCycles.Reset();
|
|
||||||
LightsProcessed = 0;
|
|
||||||
LightsShadowmapped = 0;
|
|
||||||
|
|
||||||
if (!IsEnabled())
|
|
||||||
return;
|
|
||||||
|
|
||||||
UpdateCycles.Clock();
|
|
||||||
|
|
||||||
PerformUpdate();
|
|
||||||
|
|
||||||
FGLDebug::PushGroup("ShadowMap");
|
|
||||||
FGLPostProcessState savedState;
|
|
||||||
|
|
||||||
GLRenderer->mBuffers->BindShadowMapFB();
|
|
||||||
|
|
||||||
GLRenderer->mShadowMapShader->Bind(NOQUEUE);
|
|
||||||
GLRenderer->mShadowMapShader->Uniforms->ShadowmapQuality = gl_shadowmap_quality;
|
|
||||||
GLRenderer->mShadowMapShader->Uniforms.Set();
|
|
||||||
|
|
||||||
glViewport(0, 0, gl_shadowmap_quality, 1024);
|
|
||||||
GLRenderer->RenderScreenQuad();
|
|
||||||
|
|
||||||
const auto &viewport = screen->mScreenViewport;
|
|
||||||
glViewport(viewport.left, viewport.top, viewport.width, viewport.height);
|
|
||||||
|
|
||||||
GLRenderer->mBuffers->BindShadowMapTexture(16);
|
|
||||||
|
|
||||||
FGLDebug::PopGroup();
|
|
||||||
|
|
||||||
UpdateCycles.Unclock();
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "hwrenderer/dynlights/hw_shadowmap.h"
|
|
||||||
|
|
||||||
class IDataBuffer;
|
|
||||||
|
|
||||||
class FShadowMap : public IShadowMap
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// Update shadow map texture
|
|
||||||
void Update() override;
|
|
||||||
};
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include "hwrenderer/data/hw_viewpointbuffer.h"
|
#include "hwrenderer/data/hw_viewpointbuffer.h"
|
||||||
#include "r_videoscale.h"
|
#include "r_videoscale.h"
|
||||||
#include "r_data/models/models.h"
|
#include "r_data/models/models.h"
|
||||||
|
#include "gl/renderer/gl_postprocessstate.h"
|
||||||
|
|
||||||
EXTERN_CVAR(Int, screenblocks)
|
EXTERN_CVAR(Int, screenblocks)
|
||||||
EXTERN_CVAR(Bool, cl_capfps)
|
EXTERN_CVAR(Bool, cl_capfps)
|
||||||
|
@ -177,6 +178,38 @@ void FGLRenderer::EndOffscreen()
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, mOldFBID);
|
glBindFramebuffer(GL_FRAMEBUFFER, mOldFBID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
void FGLRenderer::UpdateShadowMap()
|
||||||
|
{
|
||||||
|
if (mShadowMap.PerformUpdate())
|
||||||
|
{
|
||||||
|
FGLDebug::PushGroup("ShadowMap");
|
||||||
|
|
||||||
|
FGLPostProcessState savedState;
|
||||||
|
|
||||||
|
mBuffers->BindShadowMapFB();
|
||||||
|
|
||||||
|
mShadowMapShader->Bind(NOQUEUE);
|
||||||
|
mShadowMapShader->Uniforms->ShadowmapQuality = gl_shadowmap_quality;
|
||||||
|
mShadowMapShader->Uniforms.Set();
|
||||||
|
|
||||||
|
glViewport(0, 0, gl_shadowmap_quality, 1024);
|
||||||
|
RenderScreenQuad();
|
||||||
|
|
||||||
|
const auto &viewport = screen->mScreenViewport;
|
||||||
|
glViewport(viewport.left, viewport.top, viewport.width, viewport.height);
|
||||||
|
|
||||||
|
mBuffers->BindShadowMapTexture(16);
|
||||||
|
FGLDebug::PopGroup();
|
||||||
|
mShadowMap.FinishUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// renders the view
|
// renders the view
|
||||||
|
@ -230,7 +263,7 @@ sector_t *FGLRenderer::RenderView(player_t* player)
|
||||||
fovratio = ratio;
|
fovratio = ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
mShadowMap.Update();
|
UpdateShadowMap();
|
||||||
retsec = RenderViewpoint(r_viewpoint, player->camera, NULL, r_viewpoint.FieldOfView.Degrees, ratio, fovratio, true, true);
|
retsec = RenderViewpoint(r_viewpoint, player->camera, NULL, r_viewpoint.FieldOfView.Degrees, ratio, fovratio, true, true);
|
||||||
}
|
}
|
||||||
All.Unclock();
|
All.Unclock();
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "r_renderer.h"
|
#include "r_renderer.h"
|
||||||
#include "r_data/matrix.h"
|
#include "r_data/matrix.h"
|
||||||
#include "hwrenderer/scene/hw_portal.h"
|
#include "hwrenderer/scene/hw_portal.h"
|
||||||
#include "gl/dynlights/gl_shadowmap.h"
|
#include "hwrenderer/dynlights/hw_shadowmap.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -65,7 +65,7 @@ public:
|
||||||
FShadowMapShader *mShadowMapShader = nullptr;
|
FShadowMapShader *mShadowMapShader = nullptr;
|
||||||
FCustomPostProcessShaders *mCustomPostProcessShaders = nullptr;
|
FCustomPostProcessShaders *mCustomPostProcessShaders = nullptr;
|
||||||
|
|
||||||
FShadowMap mShadowMap;
|
IShadowMap mShadowMap;
|
||||||
|
|
||||||
//FRotator mAngles;
|
//FRotator mAngles;
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ public:
|
||||||
|
|
||||||
bool StartOffscreen();
|
bool StartOffscreen();
|
||||||
void EndOffscreen();
|
void EndOffscreen();
|
||||||
|
void UpdateShadowMap();
|
||||||
|
|
||||||
void BindToFrameBuffer(FMaterial *mat);
|
void BindToFrameBuffer(FMaterial *mat);
|
||||||
};
|
};
|
||||||
|
|
|
@ -162,13 +162,24 @@ bool IShadowMap::ValidateAABBTree()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IShadowMap::PerformUpdate()
|
bool IShadowMap::PerformUpdate()
|
||||||
{
|
{
|
||||||
|
UpdateCycles.Reset();
|
||||||
|
|
||||||
|
LightsProcessed = 0;
|
||||||
|
LightsShadowmapped = 0;
|
||||||
|
|
||||||
|
if (IsEnabled())
|
||||||
|
{
|
||||||
|
UpdateCycles.Clock();
|
||||||
UploadAABBTree();
|
UploadAABBTree();
|
||||||
UploadLights();
|
UploadLights();
|
||||||
mLightList->BindBase();
|
mLightList->BindBase();
|
||||||
mNodesBuffer->BindBase();
|
mNodesBuffer->BindBase();
|
||||||
mLinesBuffer->BindBase();
|
mLinesBuffer->BindBase();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IShadowMap::UploadLights()
|
void IShadowMap::UploadLights()
|
||||||
|
|
|
@ -15,9 +15,6 @@ public:
|
||||||
IShadowMap() { }
|
IShadowMap() { }
|
||||||
virtual ~IShadowMap();
|
virtual ~IShadowMap();
|
||||||
|
|
||||||
// Update shadow map texture
|
|
||||||
virtual void Update() = 0;
|
|
||||||
|
|
||||||
// Test if a world position is in shadow relative to the specified light and returns false if it is
|
// Test if a world position is in shadow relative to the specified light and returns false if it is
|
||||||
bool ShadowTest(ADynamicLight *light, const DVector3 &pos);
|
bool ShadowTest(ADynamicLight *light, const DVector3 &pos);
|
||||||
|
|
||||||
|
@ -28,10 +25,15 @@ public:
|
||||||
static int LightsProcessed;
|
static int LightsProcessed;
|
||||||
static int LightsShadowmapped;
|
static int LightsShadowmapped;
|
||||||
|
|
||||||
|
bool PerformUpdate();
|
||||||
|
void FinishUpdate()
|
||||||
|
{
|
||||||
|
UpdateCycles.Clock();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void CollectLights();
|
void CollectLights();
|
||||||
bool ValidateAABBTree();
|
bool ValidateAABBTree();
|
||||||
void PerformUpdate();
|
|
||||||
|
|
||||||
// Upload the AABB-tree to the GPU
|
// Upload the AABB-tree to the GPU
|
||||||
void UploadAABBTree();
|
void UploadAABBTree();
|
||||||
|
|
Loading…
Reference in a new issue