mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
Removes deprecated GL alpha test.
In GL3.0 alpha test mode was deprecated and removed in GL3.3. We should use discard/kill in shaders instead. In shaders alpha test was removed ind3a24c26ba, in FFP it was removed with FFP inb7e6811ea6. Differential Revision: https://code.wildfiregames.com/D4434 This was SVN commit r26211.
This commit is contained in:
parent
fb0a311cc7
commit
5cbd46de94
21 changed files with 28 additions and 120 deletions
|
|
@ -156,9 +156,6 @@ materialmgr.PARALLAX_HQ_DIST.max = 75
|
|||
materialmgr.PARALLAX_VHQ_DIST.max = 0
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; Replace alpha-blending with alpha-testing, for performance experiments
|
||||
forcealphatest = false
|
||||
|
||||
; Color of the sky (in "r g b" format)
|
||||
skycolor = "0 0 0"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_ALPHATEST" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<shader effect="model_transparent"/>
|
||||
</material>
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_ALPHATEST" value="1"/>
|
||||
<define name="USE_PARALLAX_MAP" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
<shader effect="model_transparent"/>
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075"/>
|
||||
</material>
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_ALPHATEST" value="1"/>
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<shader effect="model_transparent"/>
|
||||
</material>
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="alphatest.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<shader effect="model_transparent"/>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans_ao_spec.xml" quality="8"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_PARALLAX" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<alpha_blending/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<alternative material="basic_trans_spec.xml" quality="8"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_PARALLAX" value="1"/>
|
||||
<alternative material="basic_trans_spec.xml" quality="8"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<alpha_blending/>
|
||||
<alternative material="alphatest_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
|
|
|
|||
|
|
@ -38,26 +38,6 @@
|
|||
|
||||
|
||||
|
||||
<technique>
|
||||
<require context="USE_ALPHATEST"/>
|
||||
<require shaders="arb"/>
|
||||
<pass shader="arb/model_common">
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
|
||||
</pass>
|
||||
</technique>
|
||||
|
||||
<technique>
|
||||
<require context="USE_ALPHATEST"/>
|
||||
<require shaders="glsl"/>
|
||||
<pass shader="glsl/model_common">
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
|
||||
</pass>
|
||||
</technique>
|
||||
|
||||
|
||||
|
||||
<technique>
|
||||
<require context="ALPHABLEND_PASS_OPAQUE"/>
|
||||
<require shaders="arb"/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2021 Wildfire Games.
|
||||
/* Copyright (C) 2022 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
|
|
@ -79,7 +79,6 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
|
|||
#undef EL
|
||||
|
||||
CPreprocessorWrapper preprocessor;
|
||||
preprocessor.AddDefine("CFG_FORCE_ALPHATEST", g_RenderingOptions.GetForceAlphaTest() ? "1" : "0");
|
||||
CMaterial material;
|
||||
material.AddStaticUniform("qualityLevel", CVector4D(qualityLevel, 0, 0, 0));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2021 Wildfire Games.
|
||||
/* Copyright (C) 2022 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
|
|
@ -41,6 +41,8 @@
|
|||
# include "ps/XML/RelaxNG.h"
|
||||
#endif
|
||||
|
||||
#include <vector>
|
||||
|
||||
TIMER_ADD_CLIENT(tc_ShaderValidation);
|
||||
|
||||
CShaderManager::CShaderManager()
|
||||
|
|
@ -385,7 +387,6 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
// Define all the elements and attributes used in the XML file
|
||||
#define EL(x) int el_##x = XeroFile.GetElementID(#x)
|
||||
#define AT(x) int at_##x = XeroFile.GetAttributeID(#x)
|
||||
EL(alpha);
|
||||
EL(blend);
|
||||
EL(define);
|
||||
EL(depth);
|
||||
|
|
@ -395,7 +396,6 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
AT(context);
|
||||
AT(dst);
|
||||
AT(func);
|
||||
AT(ref);
|
||||
AT(shader);
|
||||
AT(shaders);
|
||||
AT(src);
|
||||
|
|
@ -429,6 +429,7 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
{
|
||||
XMBAttributeList Attrs = Child.GetAttributes();
|
||||
|
||||
// TODO: require should be an attribute of the tech and not its child.
|
||||
if (Child.GetNodeName() == el_require)
|
||||
{
|
||||
if (Attrs.GetNamedItem(at_shaders) == "arb")
|
||||
|
|
@ -472,7 +473,6 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
});
|
||||
|
||||
CShaderDefines techDefines = baseDefines;
|
||||
|
||||
XERO_ITER_EL(usableTechs[0].first, Child)
|
||||
{
|
||||
if (Child.GetNodeName() == el_define)
|
||||
|
|
@ -483,7 +483,15 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
{
|
||||
tech->SetSortByDistance(true);
|
||||
}
|
||||
else if (Child.GetNodeName() == el_pass)
|
||||
}
|
||||
// We don't want to have a shader context depending on the order of define and
|
||||
// pass tags.
|
||||
// TODO: we might want to implement that in a proper way via splitting passes
|
||||
// and tags in different groups in XML.
|
||||
std::vector<CShaderPass> techPasses;
|
||||
XERO_ITER_EL(usableTechs[0].first, Child)
|
||||
{
|
||||
if (Child.GetNodeName() == el_pass)
|
||||
{
|
||||
CShaderDefines passDefines = techDefines;
|
||||
|
||||
|
|
@ -495,12 +503,6 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
{
|
||||
passDefines.Add(CStrIntern(Element.GetAttributes().GetNamedItem(at_name)), CStrIntern(Element.GetAttributes().GetNamedItem(at_value)));
|
||||
}
|
||||
else if (Element.GetNodeName() == el_alpha)
|
||||
{
|
||||
GLenum func = ParseComparisonFunc(Element.GetAttributes().GetNamedItem(at_func));
|
||||
float ref = Element.GetAttributes().GetNamedItem(at_ref).ToFloat();
|
||||
pass.AlphaFunc(func, ref);
|
||||
}
|
||||
else if (Element.GetNodeName() == el_blend)
|
||||
{
|
||||
GLenum src = ParseBlendFunc(Element.GetAttributes().GetNamedItem(at_src));
|
||||
|
|
@ -520,10 +522,12 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||
// Load the shader program after we've read all the possibly-relevant <define>s
|
||||
pass.SetShader(LoadProgram(Child.GetAttributes().GetNamedItem(at_shader).c_str(), passDefines));
|
||||
|
||||
tech->AddPass(pass);
|
||||
techPasses.emplace_back(std::move(pass));
|
||||
}
|
||||
}
|
||||
|
||||
tech->SetPasses(std::move(techPasses));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,22 +21,12 @@
|
|||
|
||||
#include "graphics/ShaderProgram.h"
|
||||
|
||||
CShaderPass::CShaderPass() :
|
||||
m_HasAlpha(false), m_HasBlend(false), m_HasColorMask(false), m_HasDepthMask(false), m_HasDepthFunc(false)
|
||||
{
|
||||
}
|
||||
CShaderPass::CShaderPass() = default;
|
||||
|
||||
void CShaderPass::Bind()
|
||||
{
|
||||
m_Shader->Bind();
|
||||
|
||||
#if !CONFIG2_GLES
|
||||
if (m_HasAlpha)
|
||||
{
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glAlphaFunc(m_AlphaFunc, m_AlphaRef);
|
||||
}
|
||||
#endif
|
||||
// TODO: maybe emit some warning if GLSL shaders try to use alpha test;
|
||||
// the test should be done inside the shader itself
|
||||
|
||||
|
|
@ -60,11 +50,6 @@ void CShaderPass::Unbind()
|
|||
{
|
||||
m_Shader->Unbind();
|
||||
|
||||
#if !CONFIG2_GLES
|
||||
if (m_HasAlpha)
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
#endif
|
||||
|
||||
if (m_HasBlend)
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
|
|
@ -78,13 +63,6 @@ void CShaderPass::Unbind()
|
|||
glDepthFunc(GL_LEQUAL);
|
||||
}
|
||||
|
||||
void CShaderPass::AlphaFunc(GLenum func, GLclampf ref)
|
||||
{
|
||||
m_HasAlpha = true;
|
||||
m_AlphaFunc = func;
|
||||
m_AlphaRef = ref;
|
||||
}
|
||||
|
||||
void CShaderPass::BlendFunc(GLenum src, GLenum dst)
|
||||
{
|
||||
m_HasBlend = true;
|
||||
|
|
@ -114,14 +92,11 @@ void CShaderPass::DepthFunc(GLenum func)
|
|||
}
|
||||
|
||||
|
||||
CShaderTechnique::CShaderTechnique()
|
||||
: m_SortByDistance(false)
|
||||
{
|
||||
}
|
||||
CShaderTechnique::CShaderTechnique() = default;
|
||||
|
||||
void CShaderTechnique::AddPass(const CShaderPass& pass)
|
||||
void CShaderTechnique::SetPasses(std::vector<CShaderPass>&& passes)
|
||||
{
|
||||
m_Passes.push_back(pass);
|
||||
m_Passes = std::move(passes);
|
||||
}
|
||||
|
||||
int CShaderTechnique::GetNumPasses() const
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ public:
|
|||
void SetShader(const CShaderProgramPtr& shader) { m_Shader = shader; }
|
||||
|
||||
// Add various bits of GL state to the pass:
|
||||
void AlphaFunc(GLenum func, GLclampf ref);
|
||||
void BlendFunc(GLenum src, GLenum dst);
|
||||
void ColorMask(GLboolean r, GLboolean g, GLboolean b, GLboolean a);
|
||||
void DepthMask(GLboolean mask);
|
||||
|
|
@ -60,24 +59,20 @@ public:
|
|||
private:
|
||||
CShaderProgramPtr m_Shader;
|
||||
|
||||
bool m_HasAlpha;
|
||||
GLenum m_AlphaFunc;
|
||||
GLclampf m_AlphaRef;
|
||||
|
||||
bool m_HasBlend;
|
||||
bool m_HasBlend = false;
|
||||
GLenum m_BlendSrc;
|
||||
GLenum m_BlendDst;
|
||||
|
||||
bool m_HasColorMask;
|
||||
bool m_HasColorMask = false;
|
||||
GLboolean m_ColorMaskR;
|
||||
GLboolean m_ColorMaskG;
|
||||
GLboolean m_ColorMaskB;
|
||||
GLboolean m_ColorMaskA;
|
||||
|
||||
bool m_HasDepthMask;
|
||||
bool m_HasDepthMask = false;
|
||||
GLboolean m_DepthMask;
|
||||
|
||||
bool m_HasDepthFunc;
|
||||
bool m_HasDepthFunc = false;
|
||||
GLenum m_DepthFunc;
|
||||
};
|
||||
|
||||
|
|
@ -89,7 +84,7 @@ class CShaderTechnique
|
|||
{
|
||||
public:
|
||||
CShaderTechnique();
|
||||
void AddPass(const CShaderPass& pass);
|
||||
void SetPasses(std::vector<CShaderPass>&& passes);
|
||||
|
||||
int GetNumPasses() const;
|
||||
|
||||
|
|
@ -108,7 +103,7 @@ public:
|
|||
private:
|
||||
std::vector<CShaderPass> m_Passes;
|
||||
|
||||
bool m_SortByDistance;
|
||||
bool m_SortByDistance = false;
|
||||
};
|
||||
|
||||
#endif // INCLUDED_SHADERTECHNIQUE
|
||||
|
|
|
|||
|
|
@ -123,7 +123,6 @@ CRenderingOptions::CRenderingOptions() : m_ConfigHooks(new ConfigHooks())
|
|||
m_Particles = false;
|
||||
m_Silhouettes = false;
|
||||
m_Fog = false;
|
||||
m_ForceAlphaTest = false;
|
||||
m_GPUSkinning = false;
|
||||
m_SmoothLOS = false;
|
||||
m_PostProc = false;
|
||||
|
|
@ -212,7 +211,6 @@ void CRenderingOptions::ReadConfigAndSetupHooks()
|
|||
});
|
||||
m_ConfigHooks->Setup("silhouettes", m_Silhouettes);
|
||||
|
||||
m_ConfigHooks->Setup("forcealphatest", m_ForceAlphaTest);
|
||||
m_ConfigHooks->Setup("gpuskinning", [this]() {
|
||||
bool enabled;
|
||||
CFG_GET_VAL("gpuskinning", enabled);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2021 Wildfire Games.
|
||||
/* Copyright (C) 2022 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
|
|
@ -113,7 +113,6 @@ OPTION_CUSTOM_SETTER(NAME, TYPE); OPTION_GETTER(NAME, TYPE); OPTION_DEF(NAME, TY
|
|||
OPTION(ShadowAlphaFix, bool);
|
||||
OPTION(ARBProgramShadow, bool);
|
||||
OPTION(Particles, bool);
|
||||
OPTION(ForceAlphaTest, bool);
|
||||
OPTION(GPUSkinning, bool);
|
||||
OPTION(Silhouettes, bool);
|
||||
OPTION(SmoothLOS, bool);
|
||||
|
|
|
|||
Loading…
Reference in a new issue