mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-15 04:00:53 +00:00
- route everything through the full backend, now completely bypassing the intermediate GLInstance layer.
This commit is contained in:
parent
4cf2493cfd
commit
547ed4e415
12 changed files with 78 additions and 102 deletions
|
@ -981,8 +981,8 @@ int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vec3_t pos = { daposx, daposy, daposz };
|
vec3_t pos = { daposx, daposy, daposz };
|
||||||
if (!testnewinterface) render_drawrooms_(pos, globalcursectnum, daang, dahoriz, rollang, r_fov, false, false);
|
//if (!testnewinterface) render_drawrooms_(pos, globalcursectnum, daang, dahoriz, rollang, r_fov, false, false);
|
||||||
else render_drawrooms(pos, globalcursectnum, daang, dahoriz, rollang, false, false);
|
/*else*/ render_drawrooms(pos, globalcursectnum, daang, dahoriz, rollang, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return inpreparemirror;
|
return inpreparemirror;
|
||||||
|
|
|
@ -190,7 +190,6 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr)
|
||||||
GLInterface.SetDepthFunc(DF_Less);
|
GLInterface.SetDepthFunc(DF_Less);
|
||||||
}
|
}
|
||||||
GLInterface.SetIdentityMatrix(Matrix_Model);
|
GLInterface.SetIdentityMatrix(Matrix_Model);
|
||||||
GLInterface.SetFadeDisable(false);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,10 @@ EXTERN_CVAR(Bool, cl_capfps)
|
||||||
bool NoInterpolateView;
|
bool NoInterpolateView;
|
||||||
|
|
||||||
|
|
||||||
|
PalEntry GlobalMapFog;
|
||||||
|
float GlobalFogDensity;
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
void CollectLights(FLevelLocals* Level)
|
void CollectLights(FLevelLocals* Level)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +271,6 @@ static void CheckTimer(FRenderState &state, uint64_t ShaderStartTime)
|
||||||
|
|
||||||
void render_drawrooms(vec3_t& position, int sectnum, fixed_t q16angle, fixed_t q16horizon, float rollang, bool mirror, bool planemirror)
|
void render_drawrooms(vec3_t& position, int sectnum, fixed_t q16angle, fixed_t q16horizon, float rollang, bool mirror, bool planemirror)
|
||||||
{
|
{
|
||||||
int retsec = 0;
|
|
||||||
auto RenderState = screen->RenderState();
|
auto RenderState = screen->RenderState();
|
||||||
RenderState->SetVertexBuffer(screen->mVertexData);
|
RenderState->SetVertexBuffer(screen->mVertexData);
|
||||||
screen->mVertexData->Reset();
|
screen->mVertexData->Reset();
|
||||||
|
@ -311,7 +314,7 @@ void render_drawrooms(vec3_t& position, int sectnum, fixed_t q16angle, fixed_t q
|
||||||
|
|
||||||
// now render the main view
|
// now render the main view
|
||||||
float fovratio;
|
float fovratio;
|
||||||
float ratio = ActiveRatio(windowxy2.x - windowxy1.x + 1, windowxy2.y - windowxy1.y);
|
float ratio = ActiveRatio(windowxy2.x - windowxy1.x + 1, windowxy2.y - windowxy1.y + 1);
|
||||||
if (ratio >= 1.33f)
|
if (ratio >= 1.33f)
|
||||||
{
|
{
|
||||||
fovratio = 1.33f;
|
fovratio = 1.33f;
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void BunchDrawer::Init(FDrawInfo *_di, Clipper* c, vec2_t& view)
|
void BunchDrawer::Init(HWDrawInfo *_di, Clipper* c, vec2_t& view)
|
||||||
{
|
{
|
||||||
di = _di;
|
di = _di;
|
||||||
clipper = c;
|
clipper = c;
|
||||||
|
@ -230,7 +230,7 @@ void BunchDrawer::ProcessBunch(int bnch)
|
||||||
|
|
||||||
HWWall hwwall;
|
HWWall hwwall;
|
||||||
//Printf("Rendering wall %d\n", i);
|
//Printf("Rendering wall %d\n", i);
|
||||||
hwwall.Process(nullptr, &wall[i], §or[bunch->sectnum], wall[i].nextsector<0? nullptr : §or[wall[i].nextsector]);
|
hwwall.Process(di, &wall[i], §or[bunch->sectnum], wall[i].nextsector<0? nullptr : §or[wall[i].nextsector]);
|
||||||
rendered_lines++;
|
rendered_lines++;
|
||||||
|
|
||||||
SetupWall.Unclock();
|
SetupWall.Unclock();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include "tarray.h"
|
#include "tarray.h"
|
||||||
#include "basics.h"
|
#include "basics.h"
|
||||||
|
|
||||||
class FDrawInfo;
|
struct HWDrawInfo;
|
||||||
class Clipper;
|
class Clipper;
|
||||||
|
|
||||||
struct FBunch
|
struct FBunch
|
||||||
|
@ -17,7 +17,7 @@ struct FBunch
|
||||||
|
|
||||||
class BunchDrawer
|
class BunchDrawer
|
||||||
{
|
{
|
||||||
FDrawInfo *di;
|
HWDrawInfo *di;
|
||||||
Clipper *clipper;
|
Clipper *clipper;
|
||||||
int LastBunch;
|
int LastBunch;
|
||||||
int StartTime;
|
int StartTime;
|
||||||
|
@ -49,6 +49,6 @@ private:
|
||||||
void ProcessSector(int sectnum);
|
void ProcessSector(int sectnum);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Init(FDrawInfo* _di, Clipper* c, vec2_t& view);
|
void Init(HWDrawInfo* _di, Clipper* c, vec2_t& view);
|
||||||
void RenderScene(int viewsector);
|
void RenderScene(int viewsector);
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "hw_vrmodes.h"
|
#include "hw_vrmodes.h"
|
||||||
#include "hw_clipper.h"
|
#include "hw_clipper.h"
|
||||||
#include "v_draw.h"
|
#include "v_draw.h"
|
||||||
|
#include "gamecvars.h"
|
||||||
|
|
||||||
EXTERN_CVAR(Float, r_visibility)
|
EXTERN_CVAR(Float, r_visibility)
|
||||||
CVAR(Bool, gl_bandedswlight, false, CVAR_ARCHIVE)
|
CVAR(Bool, gl_bandedswlight, false, CVAR_ARCHIVE)
|
||||||
|
@ -136,7 +137,7 @@ void HWDrawInfo::StartScene(FRenderViewpoint &parentvp, HWViewpointUniforms *uni
|
||||||
VPUniforms.mViewMatrix.loadIdentity();
|
VPUniforms.mViewMatrix.loadIdentity();
|
||||||
VPUniforms.mNormalViewMatrix.loadIdentity();
|
VPUniforms.mNormalViewMatrix.loadIdentity();
|
||||||
//VPUniforms.mViewHeight = viewheight;
|
//VPUniforms.mViewHeight = viewheight;
|
||||||
VPUniforms.mGlobVis = 1 / 64.f;
|
VPUniforms.mGlobVis = (2 / 65536.f) * g_visibility / r_ambientlight;
|
||||||
VPUniforms.mPalLightLevels = numshades | (static_cast<int>(gl_fogmode) << 8) | (5 << 16);
|
VPUniforms.mPalLightLevels = numshades | (static_cast<int>(gl_fogmode) << 8) | (5 << 16);
|
||||||
|
|
||||||
VPUniforms.mClipLine.X = -10000000.0f;
|
VPUniforms.mClipLine.X = -10000000.0f;
|
||||||
|
@ -184,15 +185,9 @@ HWDrawInfo *HWDrawInfo::EndDrawInfo()
|
||||||
|
|
||||||
void HWDrawInfo::ClearBuffers()
|
void HWDrawInfo::ClearBuffers()
|
||||||
{
|
{
|
||||||
HandledSubsectors.Clear();
|
|
||||||
spriteindex = 0;
|
spriteindex = 0;
|
||||||
|
|
||||||
sector_renderflags.Resize(numsectors);
|
|
||||||
memset(§or_renderflags[0], 0, numsectors * sizeof(sector_renderflags[0]));
|
|
||||||
|
|
||||||
Decals[0].Clear();
|
Decals[0].Clear();
|
||||||
Decals[1].Clear();
|
Decals[1].Clear();
|
||||||
|
|
||||||
mClipPortal = nullptr;
|
mClipPortal = nullptr;
|
||||||
mCurrentPortal = nullptr;
|
mCurrentPortal = nullptr;
|
||||||
}
|
}
|
||||||
|
@ -296,7 +291,7 @@ HWDecal* HWDrawInfo::AddDecal(bool onmirror)
|
||||||
|
|
||||||
void HWDrawInfo::CreateScene()
|
void HWDrawInfo::CreateScene()
|
||||||
{
|
{
|
||||||
const auto &vp = Viewpoint;
|
const auto& vp = Viewpoint;
|
||||||
|
|
||||||
angle_t a1 = FrustumAngle();
|
angle_t a1 = FrustumAngle();
|
||||||
mClipper->SafeAddClipRangeRealAngles(vp.RotAngle + a1, vp.RotAngle - a1);
|
mClipper->SafeAddClipRangeRealAngles(vp.RotAngle + a1, vp.RotAngle - a1);
|
||||||
|
@ -312,7 +307,9 @@ void HWDrawInfo::CreateScene()
|
||||||
screen->mVertexData->Map();
|
screen->mVertexData->Map();
|
||||||
screen->mLights->Map();
|
screen->mLights->Map();
|
||||||
|
|
||||||
//RenderBSP(Level->HeadNode(), drawpsprites);
|
vec2_t view = { int(vp.Pos.X * 16), int(vp.Pos.Y * -16) };
|
||||||
|
mDrawer.Init(this, mClipper, view);
|
||||||
|
mDrawer.RenderScene(vp.SectNum);
|
||||||
|
|
||||||
// And now the crappy hacks that have to be done to avoid rendering anomalies.
|
// 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
|
// These cannot be multithreaded when the time comes because all these depend
|
||||||
|
|
|
@ -105,10 +105,6 @@ struct HWDrawInfo
|
||||||
TArray<HWPortal *> Portals;
|
TArray<HWPortal *> Portals;
|
||||||
TArray<HWDecal *> Decals[2]; // the second slot is for mirrors which get rendered in a separate pass.
|
TArray<HWDecal *> Decals[2]; // the second slot is for mirrors which get rendered in a separate pass.
|
||||||
|
|
||||||
TArray<sectortype *> HandledSubsectors;
|
|
||||||
|
|
||||||
TArray<uint8_t> sector_renderflags;
|
|
||||||
|
|
||||||
// This is needed by the BSP traverser.
|
// This is needed by the BSP traverser.
|
||||||
fixed_t viewx, viewy; // since the nodes are still fixed point, keeping the view position also fixed point for node traversal is faster.
|
fixed_t viewx, viewy; // since the nodes are still fixed point, keeping the view position also fixed point for node traversal is faster.
|
||||||
bool multithread;
|
bool multithread;
|
||||||
|
@ -128,12 +124,6 @@ private:
|
||||||
//void RenderThings(sectortype * sub, sectortype * sector);
|
//void RenderThings(sectortype * sub, sectortype * sector);
|
||||||
//void RenderParticles(sectortype *sub, sectortype *front);
|
//void RenderParticles(sectortype *sub, sectortype *front);
|
||||||
void SetColor(FRenderState &state, int sectorlightlevel, int rellight, bool fullbright, const FColormap &cm, float alpha, bool weapon = false);
|
void SetColor(FRenderState &state, int sectorlightlevel, int rellight, bool fullbright, const FColormap &cm, float alpha, bool weapon = false);
|
||||||
void SetFog(FRenderState &state, int lightlevel, int rellight, bool fullbright, const FColormap *cmap, bool isadditive);
|
|
||||||
void SetShaderLight(FRenderState &state, float level, float olight);
|
|
||||||
int CalcLightLevel(int lightlevel, int rellight, bool weapon, int blendfactor);
|
|
||||||
PalEntry CalcLightColor(int light, PalEntry pe, int blendfactor);
|
|
||||||
float GetFogDensity(int lightlevel, PalEntry fogcolor, int sectorfogdensity, int blendfactor);
|
|
||||||
bool CheckFog(sectortype *frontsector, sectortype *backsector);
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void SetCameraPos(const DVector3 &pos)
|
void SetCameraPos(const DVector3 &pos)
|
||||||
|
|
|
@ -40,7 +40,6 @@ EXTERN_CVAR(Bool, gl_seamless)
|
||||||
|
|
||||||
void HWDrawInfo::AddWall(HWWall *wall)
|
void HWDrawInfo::AddWall(HWWall *wall)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if (wall->flags & HWWall::HWF_TRANSLUCENT)
|
if (wall->flags & HWWall::HWF_TRANSLUCENT)
|
||||||
{
|
{
|
||||||
auto newwall = drawlists[GLDL_TRANSLUCENT].NewWall();
|
auto newwall = drawlists[GLDL_TRANSLUCENT].NewWall();
|
||||||
|
@ -48,7 +47,7 @@ void HWDrawInfo::AddWall(HWWall *wall)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool masked = HWWall::passflag[wall->type] == 1 ? false : (wall->texture && wall->texture->isMasked());
|
bool masked = wall->type != RENDERWALL_M2S ? false : (wall->texture && wall->texture->isMasked());
|
||||||
int list;
|
int list;
|
||||||
|
|
||||||
if (wall->flags & HWWall::HWF_SKYHACK && wall->type == RENDERWALL_M2S)
|
if (wall->flags & HWWall::HWF_SKYHACK && wall->type == RENDERWALL_M2S)
|
||||||
|
@ -62,7 +61,6 @@ void HWDrawInfo::AddWall(HWWall *wall)
|
||||||
auto newwall = drawlists[list].NewWall();
|
auto newwall = drawlists[list].NewWall();
|
||||||
*newwall = *wall;
|
*newwall = *wall;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -154,7 +154,9 @@ public:
|
||||||
|
|
||||||
float ViewDistance;
|
float ViewDistance;
|
||||||
float visibility;
|
float visibility;
|
||||||
short shade, palette, floorpal;
|
short shade, palette;
|
||||||
|
|
||||||
|
PalEntry fade;
|
||||||
|
|
||||||
uint16_t flags;
|
uint16_t flags;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
|
|
|
@ -26,8 +26,7 @@
|
||||||
#include "hw_cvars.h"
|
#include "hw_cvars.h"
|
||||||
#include "hw_clock.h"
|
#include "hw_clock.h"
|
||||||
//#include "hw_lighting.h"
|
//#include "hw_lighting.h"
|
||||||
//#include "hwrenderer/scene/hw_drawinfo.h"
|
#include "hw_drawinfo.h"
|
||||||
//#include "hwrenderer/scene/hw_drawstructs.h"
|
|
||||||
//#include "hwrenderer/scene/hw_portal.h"
|
//#include "hwrenderer/scene/hw_portal.h"
|
||||||
#include "hw_lightbuffer.h"
|
#include "hw_lightbuffer.h"
|
||||||
#include "hw_renderstate.h"
|
#include "hw_renderstate.h"
|
||||||
|
@ -40,6 +39,8 @@
|
||||||
#include "flatvertices.h"
|
#include "flatvertices.h"
|
||||||
#include "glbackend/glbackend.h"
|
#include "glbackend/glbackend.h"
|
||||||
|
|
||||||
|
extern PalEntry GlobalMapFog;
|
||||||
|
extern float GlobalFogDensity;
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
@ -171,11 +172,9 @@ 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)
|
||||||
{
|
{
|
||||||
#if 0
|
//int tmode = state.GetTextureMode();
|
||||||
int tmode = state.GetTextureMode();
|
|
||||||
|
|
||||||
state.SetMaterial(texture, UF_Texture, 0, flags & 3, 0, -1);
|
|
||||||
|
|
||||||
|
state.SetMaterial(texture, UF_Texture, 0, 0/*flags & 3*/, TRANSLATION(Translation_Remap + curbasepal, palette), -1);
|
||||||
|
|
||||||
int32_t size = xs_CRoundToInt(texture->GetDisplayHeight());
|
int32_t size = xs_CRoundToInt(texture->GetDisplayHeight());
|
||||||
int32_t size2;
|
int32_t size2;
|
||||||
|
@ -188,13 +187,48 @@ void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
||||||
state.SetNpotEmulation((1.f * size2) / size, xOffset);
|
state.SetNpotEmulation((1.f * size2) / size, xOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float absalpha = fabsf(alpha);
|
float absalpha = fabsf(alpha);
|
||||||
if (type != RENDERWALL_M2SNF) di->SetFog(state, lightlevel, rel, di->isFullbrightScene(), &Colormap, RenderStyle == STYLE_Add);
|
|
||||||
di->SetColor(state, lightlevel, rel, di->isFullbrightScene(), Colormap, absalpha);
|
// 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);
|
||||||
|
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.SetColor(PalEntry(255, globalr, globalg, globalb));
|
||||||
|
|
||||||
|
int h = texture->GetTexelHeight();
|
||||||
|
int h2 = 1 << sizeToBits(h);
|
||||||
|
if (h2 < h) h2 *= 2;
|
||||||
|
if (h != h2)
|
||||||
|
{
|
||||||
|
float xOffset = 1.f / texture->GetTexelWidth();
|
||||||
|
state.SetNpotEmulation(float(h2) / h, xOffset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
state.SetNpotEmulation(0.f, 0.f);
|
||||||
|
}
|
||||||
|
|
||||||
RenderWall(di, state, rflags);
|
RenderWall(di, state, rflags);
|
||||||
|
|
||||||
state.SetNpotEmulation(0.f, 0.f);
|
state.SetNpotEmulation(0.f, 0.f);
|
||||||
|
/* none of these functions is in use.
|
||||||
state.SetObjectColor(0xffffffff);
|
state.SetObjectColor(0xffffffff);
|
||||||
state.SetObjectColor2(0);
|
state.SetObjectColor2(0);
|
||||||
state.SetAddColor(0);
|
state.SetAddColor(0);
|
||||||
|
@ -202,7 +236,7 @@ void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
||||||
state.EnableGlow(false);
|
state.EnableGlow(false);
|
||||||
state.EnableGradient(false);
|
state.EnableGradient(false);
|
||||||
state.ApplyTextureManipulation(nullptr);
|
state.ApplyTextureManipulation(nullptr);
|
||||||
#endif
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -229,16 +263,16 @@ void HWWall::RenderTranslucentWall(HWDrawInfo *di, FRenderState &state)
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
void HWWall::DrawWall(HWDrawInfo *di, FRenderState &state, bool translucent)
|
void HWWall::DrawWall(HWDrawInfo *di, FRenderState &state, bool translucent)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if (screen->BuffersArePersistent())
|
if (screen->BuffersArePersistent())
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if (di->Level->HasDynamicLights && !di->isFullbrightScene() && texture != nullptr)
|
if (di->Level->HasDynamicLights && !di->isFullbrightScene() && texture != nullptr)
|
||||||
{
|
{
|
||||||
SetupLights(di, lightdata);
|
SetupLights(di, lightdata);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
MakeVertices(di, !!(flags & HWWall::HWF_TRANSLUCENT));
|
MakeVertices(di, !!(flags & HWWall::HWF_TRANSLUCENT));
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
state.SetNormal(glseg.Normal());
|
state.SetNormal(glseg.Normal());
|
||||||
if (!translucent)
|
if (!translucent)
|
||||||
|
@ -379,16 +413,18 @@ void HWWall::PutWall(HWDrawInfo *di, bool translucent)
|
||||||
//ViewDistance = (di->Viewpoint.Pos - (seg->linedef->v1->fPos() + seg->linedef->Delta() / 2)).XY().LengthSquared();
|
//ViewDistance = (di->Viewpoint.Pos - (seg->linedef->v1->fPos() + seg->linedef->Delta() / 2)).XY().LengthSquared();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if (!screen->BuffersArePersistent())
|
if (!screen->BuffersArePersistent())
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if (di->Level->HasDynamicLights && !di->isFullbrightScene() && texture != nullptr)
|
if (di->Level->HasDynamicLights && !di->isFullbrightScene() && texture != nullptr)
|
||||||
{
|
{
|
||||||
SetupLights(di, lightdata);
|
SetupLights(di, lightdata);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
MakeVertices(di, translucent);
|
MakeVertices(di, translucent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
bool hasDecals = type != RENDERWALL_M2S && seg->sidedef->AttachedDecals;
|
bool hasDecals = type != RENDERWALL_M2S && seg->sidedef->AttachedDecals;
|
||||||
if (hasDecals)
|
if (hasDecals)
|
||||||
{
|
{
|
||||||
|
@ -404,56 +440,7 @@ void HWWall::PutWall(HWDrawInfo *di, bool translucent)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if 0
|
|
||||||
di->AddWall(this);
|
di->AddWall(this);
|
||||||
#else
|
|
||||||
// route it through the GLInterface for now for easier testing
|
|
||||||
int palid = TRANSLATION(Translation_Remap + curbasepal, globalpal);
|
|
||||||
GLInterface.SetFade(globalfloorpal);
|
|
||||||
GLInterface.SetTexture(texture, TRANSLATION(Translation_Remap + curbasepal, palette), 0);
|
|
||||||
|
|
||||||
GLInterface.SetShade(shade, numshades);
|
|
||||||
|
|
||||||
int h = texture->GetTexelHeight();
|
|
||||||
int h2 = 1 << sizeToBits(h);
|
|
||||||
if (h2 < h) h2 *= 2;
|
|
||||||
if (h != h2)
|
|
||||||
{
|
|
||||||
float xOffset = 1.f / texture->GetTexelWidth();
|
|
||||||
GLInterface.SetNpotEmulation(float(h2) / h, xOffset);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GLInterface.SetNpotEmulation(0.f, 0.f);
|
|
||||||
}
|
|
||||||
GLInterface.SetTextureMode(TM_OPAQUE);
|
|
||||||
GLInterface.SetVisibility(visibility);
|
|
||||||
|
|
||||||
// The shade rgb from the tint is ignored here.
|
|
||||||
float pc[4];
|
|
||||||
pc[0] = (float)globalr * (1.f / 255.f);
|
|
||||||
pc[1] = (float)globalg * (1.f / 255.f);
|
|
||||||
pc[2] = (float)globalb * (1.f / 255.f);
|
|
||||||
pc[3] = alpha;
|
|
||||||
GLInterface.SetColor(pc[0], pc[1], pc[2], pc[3]);
|
|
||||||
|
|
||||||
auto data = screen->mVertexData->AllocVertices(4);
|
|
||||||
auto vt = data.first;
|
|
||||||
vt[0].SetTexCoord(tcs[LOLFT].u, tcs[LOLFT].v);
|
|
||||||
vt[0].SetVertex(glseg.x1, zbottom[0], glseg.y1);
|
|
||||||
vt[1].SetTexCoord(tcs[UPLFT].u, tcs[UPLFT].v);
|
|
||||||
vt[1].SetVertex(glseg.x1, ztop[0], glseg.y1);
|
|
||||||
vt[2].SetTexCoord(tcs[UPRGT].u, tcs[UPRGT].v);
|
|
||||||
vt[2].SetVertex(glseg.x2, ztop[1], glseg.y2);
|
|
||||||
vt[3].SetTexCoord(tcs[LORGT].u, tcs[LORGT].v);
|
|
||||||
vt[3].SetVertex(glseg.x2, zbottom[1], glseg.y2);
|
|
||||||
|
|
||||||
GLInterface.Draw(DT_TriangleFan, data.second, 4);
|
|
||||||
|
|
||||||
GLInterface.SetNpotEmulation(0.f, 0.f);
|
|
||||||
GLInterface.SetTextureMode(TM_NORMAL);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// make sure that following parts of the same linedef do not get this one's vertex and lighting info.
|
// make sure that following parts of the same linedef do not get this one's vertex and lighting info.
|
||||||
vertcount = 0;
|
vertcount = 0;
|
||||||
dynlightindex = -1;
|
dynlightindex = -1;
|
||||||
|
@ -1000,7 +987,7 @@ void HWWall::Process(HWDrawInfo *di, walltype *wal, sectortype* frontsector, sec
|
||||||
dynlightindex = -1;
|
dynlightindex = -1;
|
||||||
shade = wal->shade;
|
shade = wal->shade;
|
||||||
palette = wal->pal;
|
palette = wal->pal;
|
||||||
floorpal = frontsector->floorpal;
|
fade = lookups.getFade(frontsector->floorpal); // fog is per sector.
|
||||||
visibility = sectorVisibility(frontsector);
|
visibility = sectorVisibility(frontsector);
|
||||||
|
|
||||||
alpha = 1.0f;
|
alpha = 1.0f;
|
||||||
|
|
|
@ -34,6 +34,10 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
|
||||||
#include "dukeactor.h"
|
#include "dukeactor.h"
|
||||||
#include "interpolate.h"
|
#include "interpolate.h"
|
||||||
|
|
||||||
|
// temporary hack to pass along RRRA's global fog. Needs to be done better later.
|
||||||
|
extern PalEntry GlobalMapFog;
|
||||||
|
extern float GlobalFogDensity;
|
||||||
|
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
|
@ -491,6 +495,8 @@ void displayrooms(int snum, double smoothratio)
|
||||||
sect = p->cursectnum;
|
sect = p->cursectnum;
|
||||||
if (sect < 0 || sect >= MAXSECTORS) return;
|
if (sect < 0 || sect >= MAXSECTORS) return;
|
||||||
|
|
||||||
|
GlobalMapFog = fogactive ? 0x999999 : 0;
|
||||||
|
GlobalFogDensity = fogactive ? 350.f : 0.f;
|
||||||
GLInterface.SetMapFog(fogactive != 0);
|
GLInterface.SetMapFog(fogactive != 0);
|
||||||
DoInterpolations(smoothratio / 65536.);
|
DoInterpolations(smoothratio / 65536.);
|
||||||
|
|
||||||
|
|
|
@ -287,12 +287,6 @@ public:
|
||||||
renderState.NPOTEmulation.X = xOffset;
|
renderState.NPOTEmulation.X = xOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetFadeDisable(bool yes)
|
|
||||||
{
|
|
||||||
if (yes) renderState.Flags |= RF_FogDisabled;
|
|
||||||
else renderState.Flags &= ~RF_FogDisabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hack...
|
// Hack...
|
||||||
bool useMapFog = false;
|
bool useMapFog = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue