mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-02-07 07:21:01 +00:00
- better handling of texture clamp state.
Free combination of clamping with all texture modes still missing in GLES and Softpoly renderers!
This commit is contained in:
parent
3acc5a2723
commit
a0043ec09d
5 changed files with 21 additions and 7 deletions
|
@ -127,7 +127,8 @@ bool FGLRenderState::ApplyShader()
|
||||||
|
|
||||||
ShaderFlavourData flavour;
|
ShaderFlavourData flavour;
|
||||||
|
|
||||||
flavour.textureMode = (mTextureMode == TM_NORMAL && mTempTM == TM_OPAQUE ? TM_OPAQUE : mTextureMode);
|
flavour.textureMode = (mTextureMode == TM_NORMAL && mTempTM == TM_OPAQUE ? TM_OPAQUE : mTextureMode) & 0xff;
|
||||||
|
if (mTextureClamp && flavour.textureMode == TM_NORMAL) flavour.textureMode = 5; // fixme. Clamp can now be combined with all modes.
|
||||||
|
|
||||||
if (flavour.textureMode == -1)
|
if (flavour.textureMode == -1)
|
||||||
flavour.textureMode = 0;
|
flavour.textureMode = 0;
|
||||||
|
|
|
@ -219,6 +219,7 @@ protected:
|
||||||
int mLightIndex;
|
int mLightIndex;
|
||||||
int mSpecialEffect;
|
int mSpecialEffect;
|
||||||
int mTextureMode;
|
int mTextureMode;
|
||||||
|
int mTextureClamp;
|
||||||
int mTextureModeFlags;
|
int mTextureModeFlags;
|
||||||
int mSoftLight;
|
int mSoftLight;
|
||||||
float mLightParms[4];
|
float mLightParms[4];
|
||||||
|
@ -259,6 +260,7 @@ public:
|
||||||
mFogColor = 0xffffffff;
|
mFogColor = 0xffffffff;
|
||||||
mStreamData.uFogColor = mFogColor;
|
mStreamData.uFogColor = mFogColor;
|
||||||
mTextureMode = -1;
|
mTextureMode = -1;
|
||||||
|
mTextureClamp = 0;
|
||||||
mTextureModeFlags = 0;
|
mTextureModeFlags = 0;
|
||||||
mStreamData.uDesaturationFactor = 0.0f;
|
mStreamData.uDesaturationFactor = 0.0f;
|
||||||
mAlphaThreshold = 0.5f;
|
mAlphaThreshold = 0.5f;
|
||||||
|
@ -344,12 +346,18 @@ public:
|
||||||
mStreamData.uDesaturationFactor = 0.0f;
|
mStreamData.uDesaturationFactor = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetTextureClamp(bool on)
|
||||||
|
{
|
||||||
|
if (on) mTextureClamp = TM_CLAMPY;
|
||||||
|
else mTextureClamp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void SetTextureMode(int mode)
|
void SetTextureMode(int mode)
|
||||||
{
|
{
|
||||||
mTextureMode = mode;
|
mTextureMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetTextureMode(FRenderStyle style, bool clampy = false)
|
void SetTextureMode(FRenderStyle style)
|
||||||
{
|
{
|
||||||
if (style.Flags & STYLEF_RedIsAlpha)
|
if (style.Flags & STYLEF_RedIsAlpha)
|
||||||
{
|
{
|
||||||
|
@ -363,7 +371,6 @@ public:
|
||||||
{
|
{
|
||||||
SetTextureMode(TM_INVERSE);
|
SetTextureMode(TM_INVERSE);
|
||||||
}
|
}
|
||||||
if (clampy) mTextureMode |= TM_CLAMPY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetTextureMode()
|
int GetTextureMode()
|
||||||
|
|
|
@ -380,7 +380,11 @@ static void ProcessMaterial(int x0, int x1, PolyTriangleThreadData* thread)
|
||||||
{
|
{
|
||||||
auto constants = thread->PushConstants;
|
auto constants = thread->PushConstants;
|
||||||
|
|
||||||
switch (constants->uTextureMode)
|
if (constants->uTextureMode == TM_CLAMPY)
|
||||||
|
{
|
||||||
|
FuncNormal_ClampY(x0, x1, thread);
|
||||||
|
}
|
||||||
|
else switch (constants->uTextureMode & 0xff)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case TM_NORMAL:
|
case TM_NORMAL:
|
||||||
|
@ -389,7 +393,6 @@ static void ProcessMaterial(int x0, int x1, PolyTriangleThreadData* thread)
|
||||||
case TM_OPAQUE: FuncNormal_Opaque(x0, x1, thread); break;
|
case TM_OPAQUE: FuncNormal_Opaque(x0, x1, thread); break;
|
||||||
case TM_INVERSE: FuncNormal_Inverse(x0, x1, thread); break;
|
case TM_INVERSE: FuncNormal_Inverse(x0, x1, thread); break;
|
||||||
case TM_ALPHATEXTURE: FuncNormal_AlphaTexture(x0, x1, thread); break;
|
case TM_ALPHATEXTURE: FuncNormal_AlphaTexture(x0, x1, thread); break;
|
||||||
case TM_CLAMPY: FuncNormal_ClampY(x0, x1, thread); break;
|
|
||||||
case TM_INVERTOPAQUE: FuncNormal_InvertOpaque(x0, x1, thread); break;
|
case TM_INVERTOPAQUE: FuncNormal_InvertOpaque(x0, x1, thread); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ void HWDecal::DrawDecal(HWDrawInfo *di, FRenderState &state)
|
||||||
state.SetObjectColor(DecalColor);
|
state.SetObjectColor(DecalColor);
|
||||||
|
|
||||||
state.SetLightIndex(dynlightindex);
|
state.SetLightIndex(dynlightindex);
|
||||||
state.SetTextureMode(decal->RenderStyle, true);
|
state.SetTextureMode(decal->RenderStyle);
|
||||||
state.SetRenderStyle(decal->RenderStyle);
|
state.SetRenderStyle(decal->RenderStyle);
|
||||||
state.SetMaterial(texture, UF_Sprite, 0, CLAMP_XY, decal->Translation, -1);
|
state.SetMaterial(texture, UF_Sprite, 0, CLAMP_XY, decal->Translation, -1);
|
||||||
|
|
||||||
|
@ -129,6 +129,7 @@ void HWDrawInfo::DrawDecals(FRenderState &state, TArray<HWDecal *> &decals)
|
||||||
{
|
{
|
||||||
side_t *wall = nullptr;
|
side_t *wall = nullptr;
|
||||||
state.SetDepthMask(false);
|
state.SetDepthMask(false);
|
||||||
|
state.SetTextureClamp(true);
|
||||||
state.SetDepthBias(-1, -128);
|
state.SetDepthBias(-1, -128);
|
||||||
for (auto gldecal : decals)
|
for (auto gldecal : decals)
|
||||||
{
|
{
|
||||||
|
@ -151,6 +152,7 @@ void HWDrawInfo::DrawDecals(FRenderState &state, TArray<HWDecal *> &decals)
|
||||||
state.ClearDepthBias();
|
state.ClearDepthBias();
|
||||||
state.SetTextureMode(TM_NORMAL);
|
state.SetTextureMode(TM_NORMAL);
|
||||||
state.SetDepthMask(true);
|
state.SetDepthMask(true);
|
||||||
|
state.SetTextureClamp(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -210,7 +210,7 @@ void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
||||||
|
|
||||||
if (flags & HWWall::HWF_CLAMPY && (type == RENDERWALL_M2S || type == RENDERWALL_M2SNF))
|
if (flags & HWWall::HWF_CLAMPY && (type == RENDERWALL_M2S || type == RENDERWALL_M2SNF))
|
||||||
{
|
{
|
||||||
state.SetTextureMode(tmode | TM_CLAMPY);
|
state.SetTextureClamp(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == RENDERWALL_M2SNF)
|
if (type == RENDERWALL_M2SNF)
|
||||||
|
@ -300,6 +300,7 @@ void HWWall::RenderTexturedWall(HWDrawInfo *di, FRenderState &state, int rflags)
|
||||||
state.SetObjectColor2(0);
|
state.SetObjectColor2(0);
|
||||||
state.SetAddColor(0);
|
state.SetAddColor(0);
|
||||||
state.SetTextureMode(tmode);
|
state.SetTextureMode(tmode);
|
||||||
|
state.SetTextureClamp(false);
|
||||||
state.EnableGlow(false);
|
state.EnableGlow(false);
|
||||||
state.EnableGradient(false);
|
state.EnableGradient(false);
|
||||||
state.ApplyTextureManipulation(nullptr);
|
state.ApplyTextureManipulation(nullptr);
|
||||||
|
|
Loading…
Reference in a new issue