mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 04:20:45 +00:00
- consolidated the SetLightAndFog code fragments.
This commit is contained in:
parent
8ebd1a9ebc
commit
2e191f2742
4 changed files with 57 additions and 99 deletions
|
@ -12,6 +12,8 @@
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "gamecontrol.h"
|
#include "gamecontrol.h"
|
||||||
|
#include "hw_renderstate.h"
|
||||||
|
#include "hw_cvars.h"
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(disable:4244)
|
#pragma warning(disable:4244)
|
||||||
|
@ -194,7 +196,6 @@ public:
|
||||||
void SetupLights(HWDrawInfo *di, FDynLightData &lightdata);
|
void SetupLights(HWDrawInfo *di, FDynLightData &lightdata);
|
||||||
|
|
||||||
void MakeVertices(HWDrawInfo *di, bool nosplit);
|
void MakeVertices(HWDrawInfo *di, bool nosplit);
|
||||||
void SetLightAndFog(FRenderState& state);
|
|
||||||
|
|
||||||
void SkyPlane(HWDrawInfo *di, sectortype *sector, int plane, bool allowmirror);
|
void SkyPlane(HWDrawInfo *di, sectortype *sector, int plane, bool allowmirror);
|
||||||
void SkyLine(HWDrawInfo *di, sectortype *sec, walltype *line);
|
void SkyLine(HWDrawInfo *di, sectortype *sec, walltype *line);
|
||||||
|
@ -390,3 +391,39 @@ inline void SetSpriteTranslucency(const spritetype* sprite, float& alpha, FRende
|
||||||
}
|
}
|
||||||
alpha *= 1.f - spriteext[sprite->owner].alpha;
|
alpha *= 1.f - spriteext[sprite->owner].alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
extern PalEntry GlobalMapFog;
|
||||||
|
extern float GlobalFogDensity;
|
||||||
|
|
||||||
|
__forceinline void SetLightAndFog(FRenderState& state, PalEntry fade, int palette, int shade, int visibility, float alpha, bool setcolor = true)
|
||||||
|
{
|
||||||
|
// Fog must be done before the texture so that the texture selector can override it.
|
||||||
|
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
||||||
|
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
||||||
|
shade = clamp(shade, 0, numshades - 1);
|
||||||
|
// Disable brightmaps if non-black fog is used.
|
||||||
|
if (ShadeDiv >= 1 / 1000.f && foggy)
|
||||||
|
{
|
||||||
|
state.EnableFog(1);
|
||||||
|
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
||||||
|
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
||||||
|
state.SetSoftLightLevel(255);
|
||||||
|
state.SetLightParms(128.f, 1 / 1000.f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
state.EnableFog(0);
|
||||||
|
state.SetFog(0, 0);
|
||||||
|
state.SetSoftLightLevel(gl_fogmode != 0 && ShadeDiv >= 1 / 1000.f ? 255 - Scale(shade, 255, numshades) : 255);
|
||||||
|
state.SetLightParms(visibility, ShadeDiv / (numshades - 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
// The shade rgb from the tint is ignored here.
|
||||||
|
state.SetColor(globalr * (1 / 255.f), globalg * (1 / 255.f), globalb * (1 / 255.f), alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,6 @@
|
||||||
CVAR(Int, gl_breaksec, -1, 0)
|
CVAR(Int, gl_breaksec, -1, 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern PalEntry GlobalMapFog;
|
|
||||||
extern float GlobalFogDensity;
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -170,28 +167,7 @@ void HWFlat::DrawFlat(HWDrawInfo *di, FRenderState &state, bool translucent)
|
||||||
else state.SetNormal({ 0, -1, 0 });
|
else state.SetNormal({ 0, -1, 0 });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fog must be done before the texture so that the texture selector can override it.
|
SetLightAndFog(state, fade, palette, shade, visibility, alpha);
|
||||||
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
|
||||||
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
|
||||||
// Disable brightmaps if non-black fog is used.
|
|
||||||
if (ShadeDiv >= 1 / 1000.f && foggy)
|
|
||||||
{
|
|
||||||
state.EnableFog(1);
|
|
||||||
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
|
||||||
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
|
||||||
state.SetSoftLightLevel(255);
|
|
||||||
state.SetLightParms(128.f, 1 / 1000.f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
state.EnableFog(0);
|
|
||||||
state.SetFog(0, 0);
|
|
||||||
state.SetSoftLightLevel(ShadeDiv >= 1 / 1000.f ? 255 - Scale(shade, 255, numshades) : 255);
|
|
||||||
state.SetLightParms(visibility, ShadeDiv / (numshades - 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
// The shade rgb from the tint is ignored here.
|
|
||||||
state.SetColorAlpha(PalEntry(255, globalr, globalg, globalb), alpha);
|
|
||||||
|
|
||||||
if (translucent)
|
if (translucent)
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,10 +46,6 @@
|
||||||
#include "hw_viewpointbuffer.h"
|
#include "hw_viewpointbuffer.h"
|
||||||
#include "hw_voxels.h"
|
#include "hw_voxels.h"
|
||||||
|
|
||||||
extern PalEntry GlobalMapFog;
|
|
||||||
extern float GlobalFogDensity;
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -114,36 +110,15 @@ void HWSprite::DrawSprite(HWDrawInfo* di, FRenderState& state, bool translucent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fog must be done before the texture so that the texture selector can override it.
|
// Fog must be done before the texture so that the texture selector can override it.
|
||||||
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
|
||||||
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
|
||||||
// Disable brightmaps if non-black fog is used.
|
// Disable brightmaps if non-black fog is used.
|
||||||
int shade = this->shade;
|
int shade = this->shade;
|
||||||
PalEntry color(255, globalr, globalg, globalb);
|
|
||||||
if (this->shade > numshades) // handling of SW's shadow hack using a shade of 127.
|
if (this->shade > numshades) // handling of SW's shadow hack using a shade of 127.
|
||||||
{
|
{
|
||||||
shade = sector[sprite->sectnum].floorshade;
|
shade = sector[sprite->sectnum].floorshade;
|
||||||
color = 0xff000000;
|
state.SetColor(0, 0, 0, alpha);
|
||||||
}
|
|
||||||
shade = clamp(shade, 0, numshades - 1);
|
|
||||||
|
|
||||||
if (ShadeDiv >= 1 / 1000.f && foggy && !foglayer)
|
|
||||||
{
|
|
||||||
state.EnableFog(1);
|
|
||||||
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
|
||||||
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
|
||||||
state.SetSoftLightLevel(255);
|
|
||||||
state.SetLightParms(128.f, 1 / 1000.f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
state.EnableFog(0);
|
|
||||||
state.SetFog(0, 0);
|
|
||||||
state.SetSoftLightLevel(ShadeDiv >= 1 / 1000.f ? 255 - Scale(shade, 255, numshades) : 255);
|
|
||||||
state.SetLightParms(visibility, ShadeDiv / (numshades - 2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The shade rgb from the tint is ignored here.
|
SetLightAndFog(state, fade, palette, shade, visibility, alpha, this->shade <= numshades);
|
||||||
state.SetColorAlpha(color, alpha);
|
|
||||||
|
|
||||||
if (modelframe == 0)
|
if (modelframe == 0)
|
||||||
{
|
{
|
||||||
|
@ -158,15 +133,20 @@ void HWSprite::DrawSprite(HWDrawInfo* di, FRenderState& state, bool translucent)
|
||||||
state.SetLightIndex(-1);
|
state.SetLightIndex(-1);
|
||||||
state.Draw(DT_TriangleStrip, vertexindex, 4);
|
state.Draw(DT_TriangleStrip, vertexindex, 4);
|
||||||
|
|
||||||
if (ShadeDiv >= 1 / 1000.f && foggy && foglayer)
|
if (foglayer)
|
||||||
{
|
{
|
||||||
// If we get here we know that we have colored fog and no fixed colormap.
|
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
||||||
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
||||||
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
if (ShadeDiv >= 1 / 1000.f && foggy)
|
||||||
state.SetTextureMode(TM_FOGLAYER);
|
{
|
||||||
state.SetRenderStyle(STYLE_Translucent);
|
// If we get here we know that we have colored fog and no fixed colormap.
|
||||||
state.Draw(DT_TriangleStrip, vertexindex, 4);
|
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
||||||
state.SetTextureMode(TM_NORMAL);
|
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
||||||
|
state.SetTextureMode(TM_FOGLAYER);
|
||||||
|
state.SetRenderStyle(STYLE_Translucent);
|
||||||
|
state.Draw(DT_TriangleStrip, vertexindex, 4);
|
||||||
|
state.SetTextureMode(TM_NORMAL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -39,9 +39,6 @@
|
||||||
#include "flatvertices.h"
|
#include "flatvertices.h"
|
||||||
#include "glbackend/glbackend.h"
|
#include "glbackend/glbackend.h"
|
||||||
|
|
||||||
extern PalEntry GlobalMapFog;
|
|
||||||
extern float GlobalFogDensity;
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Create vertices for one wall
|
// Create vertices for one wall
|
||||||
|
@ -104,7 +101,7 @@ void HWWall::RenderFogBoundary(HWDrawInfo *di, FRenderState &state)
|
||||||
if (gl_fogmode)// && !di->isFullbrightScene())
|
if (gl_fogmode)// && !di->isFullbrightScene())
|
||||||
{
|
{
|
||||||
state.EnableDrawBufferAttachments(false);
|
state.EnableDrawBufferAttachments(false);
|
||||||
SetLightAndFog(state);
|
SetLightAndFog(state, fade, palette, shade, visibility, alpha);
|
||||||
state.SetEffect(EFF_FOGBOUNDARY);
|
state.SetEffect(EFF_FOGBOUNDARY);
|
||||||
state.AlphaFunc(Alpha_GEqual, 0.f);
|
state.AlphaFunc(Alpha_GEqual, 0.f);
|
||||||
state.SetDepthBias(-1, -128);
|
state.SetDepthBias(-1, -128);
|
||||||
|
@ -115,38 +112,6 @@ void HWWall::RenderFogBoundary(HWDrawInfo *di, FRenderState &state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void HWWall::SetLightAndFog(FRenderState& state)
|
|
||||||
{
|
|
||||||
// Fog must be done before the texture so that the texture selector can override it.
|
|
||||||
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
|
||||||
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
|
||||||
// Disable brightmaps if non-black fog is used.
|
|
||||||
if (ShadeDiv >= 1 / 1000.f && foggy)
|
|
||||||
{
|
|
||||||
state.EnableFog(1);
|
|
||||||
float density = GlobalMapFog ? GlobalFogDensity : 350.f - Scale(numshades - shade, 150, numshades);
|
|
||||||
state.SetFog((GlobalMapFog) ? GlobalMapFog : fade, density * hw_density);
|
|
||||||
state.SetSoftLightLevel(255);
|
|
||||||
state.SetLightParms(128.f, 1 / 1000.f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
state.EnableFog(0);
|
|
||||||
state.SetFog(0, 0);
|
|
||||||
state.SetSoftLightLevel(ShadeDiv >= 1 / 1000.f ? 255 - Scale(shade, 255, numshades) : 255);
|
|
||||||
state.SetLightParms(visibility, ShadeDiv / (numshades - 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
// The shade rgb from the tint is ignored here.
|
|
||||||
state.SetColorAlpha(PalEntry(255, globalr, globalg, globalb), alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -163,7 +128,7 @@ void HWWall::RenderMirrorSurface(HWDrawInfo *di, FRenderState &state)
|
||||||
|
|
||||||
// Use sphere mapping for this
|
// Use sphere mapping for this
|
||||||
state.SetEffect(EFF_SPHEREMAP);
|
state.SetEffect(EFF_SPHEREMAP);
|
||||||
SetLightAndFog(state);
|
SetLightAndFog(state, fade, palette, shade, visibility, alpha, false);
|
||||||
state.SetColor(PalEntry(25, globalr >> 1, globalg >> 1, globalb >> 1));
|
state.SetColor(PalEntry(25, globalr >> 1, globalg >> 1, globalb >> 1));
|
||||||
|
|
||||||
state.SetRenderStyle(STYLE_Add);
|
state.SetRenderStyle(STYLE_Add);
|
||||||
|
@ -190,7 +155,7 @@ void HWWall::RenderMirrorSurface(HWDrawInfo *di, FRenderState &state)
|
||||||
|
|
||||||
void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
||||||
{
|
{
|
||||||
SetLightAndFog(state);
|
SetLightAndFog(state, fade, palette, shade, visibility, alpha);
|
||||||
state.SetMaterial(texture, UF_Texture, 0, sprite == nullptr ? (flags & (HWF_CLAMPX | HWF_CLAMPY)) : CLAMP_XY, TRANSLATION(Translation_Remap + curbasepal, palette), -1);
|
state.SetMaterial(texture, UF_Texture, 0, sprite == nullptr ? (flags & (HWF_CLAMPX | HWF_CLAMPY)) : CLAMP_XY, TRANSLATION(Translation_Remap + curbasepal, palette), -1);
|
||||||
|
|
||||||
int h = (int)texture->GetDisplayHeight();
|
int h = (int)texture->GetDisplayHeight();
|
||||||
|
|
Loading…
Reference in a new issue