1
0
forked from 0ad/0ad

Removes C++ code for conditional defines removed in f29d059617.

Differential Revision: https://code.wildfiregames.com/D4551
This was SVN commit r26661.
This commit is contained in:
Vladislav Belov 2022-03-15 22:13:22 +00:00
parent 7f279c695d
commit 37b30901b3
11 changed files with 10 additions and 192 deletions

View File

@ -159,12 +159,6 @@ variant_diversity = "full"
; Quality level of shader effects (set to 10 to display all effects)
materialmgr.quality = 2.0
; Maximum distance to display parallax effect. Set to 0 to disable parallax.
materialmgr.PARALLAX_DIST.max = 150
; Maximum distance to display high quality parallax effect.
materialmgr.PARALLAX_HQ_DIST.max = 75
; Maximum distance to display very high quality parallax effect. Set to 30 to enable.
materialmgr.PARALLAX_VHQ_DIST.max = 0
;;;;;;;;;;;;;;;;;;;;;;;;
; Color of the sky (in "r g b" format)

View File

@ -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
@ -112,5 +112,4 @@ void CModelDecal::SetTransform(const CMatrix3D& transform)
void CModelDecal::RemoveShadows()
{
m_Decal.m_Material.AddShaderDefine(str_DISABLE_RECEIVE_SHADOWS, str_1);
m_Decal.m_Material.RecomputeCombinedShaderDefines();
}

View File

@ -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
@ -35,13 +35,6 @@ void CMaterial::SetShaderEffect(const CStr& effect)
void CMaterial::AddShaderDefine(CStrIntern key, CStrIntern value)
{
m_ShaderDefines.Add(key, value);
m_CombinedShaderDefines.clear();
}
void CMaterial::AddConditionalDefine(const char* defname, const char* defvalue, int type, std::vector<float> &args)
{
m_ConditionalDefines.Add(defname, defvalue, type, args);
m_CombinedShaderDefines.clear();
}
void CMaterial::AddStaticUniform(const char* key, const CVector4D& value)
@ -66,31 +59,3 @@ void CMaterial::AddRequiredSampler(const CStr& samplerName)
CStrIntern string(samplerName);
m_RequiredSamplers.push_back(string);
}
// Set up m_CombinedShaderDefines so that index i contains m_ShaderDefines, plus
// the extra defines from m_ConditionalDefines[j] for all j where bit j is set in i.
// This lets GetShaderDefines() cheaply return the defines for any combination of conditions.
//
// (This might scale badly if we had a large number of conditional defines per material,
// but currently we don't expect to have many.)
void CMaterial::RecomputeCombinedShaderDefines()
{
m_CombinedShaderDefines.clear();
int size = m_ConditionalDefines.GetSize();
// Loop over all 2^n combinations of flags
for (int i = 0; i < (1 << size); i++)
{
CShaderDefines defs = m_ShaderDefines;
for (int j = 0; j < size; j++)
{
if (i & (1 << j))
{
const CShaderConditionalDefines::CondDefine& def = m_ConditionalDefines.GetItem(j);
defs.Add(def.m_DefName, def.m_DefValue);
}
}
m_CombinedShaderDefines.push_back(defs);
}
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 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
@ -56,15 +56,7 @@ public:
// Must call RecomputeCombinedShaderDefines after this, before rendering with this material
void AddShaderDefine(CStrIntern key, CStrIntern value);
// conditionFlags is a bitmask representing which indexes of the
// GetConditionalDefines() list are currently matching.
// Use 0 if you don't care about conditional defines.
const CShaderDefines& GetShaderDefines(uint32_t conditionFlags) const { return m_CombinedShaderDefines.at(conditionFlags); }
// Must call RecomputeCombinedShaderDefines after this, before rendering with this material
void AddConditionalDefine(const char* defname, const char* defvalue, int type, std::vector<float> &args);
const CShaderConditionalDefines& GetConditionalDefines() const { return m_ConditionalDefines; }
const CShaderDefines& GetShaderDefines() const { return m_ShaderDefines; }
void AddStaticUniform(const char* key, const CVector4D& value);
const CShaderUniforms& GetStaticUniforms() const { return m_StaticUniforms; }
@ -78,9 +70,6 @@ public:
void AddRequiredSampler(const CStr& samplerName);
const std::vector<CStrIntern>& GetRequiredSampler() const { return m_RequiredSamplers; }
// Must be called after all AddShaderDefine and AddConditionalDefine
void RecomputeCombinedShaderDefines();
private:
// This pointer is kept to make it easier for the fixed pipeline to
@ -92,12 +81,10 @@ private:
CStrIntern m_ShaderEffect;
CShaderDefines m_ShaderDefines;
CShaderConditionalDefines m_ConditionalDefines;
std::vector<CShaderDefines> m_CombinedShaderDefines;
CShaderUniforms m_StaticUniforms;
CShaderRenderQueries m_RenderQueries;
bool m_AlphaBlending;
};
#endif
#endif // INCLUDED_MATERIAL

View File

@ -63,7 +63,6 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
EL(uniform);
EL(renderquery);
EL(required_texture);
EL(conditional_define);
AT(effect);
AT(if);
AT(define);
@ -71,10 +70,6 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
AT(material);
AT(name);
AT(value);
AT(type);
AT(min);
AT(max);
AT(conf);
#undef AT
#undef EL
@ -117,59 +112,6 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
{
material.AddShaderDefine(CStrIntern(attrs.GetNamedItem(at_name)), CStrIntern(attrs.GetNamedItem(at_value)));
}
else if (token == el_conditional_define)
{
std::vector<float> args;
CStr type = attrs.GetNamedItem(at_type).c_str();
int typeID = -1;
if (type == CStr("draw_range"))
{
typeID = DCOND_DISTANCE;
float valmin = -1.0f;
float valmax = -1.0f;
CStr conf = attrs.GetNamedItem(at_conf);
if (!conf.empty())
{
CFG_GET_VAL("materialmgr." + conf + ".min", valmin);
CFG_GET_VAL("materialmgr." + conf + ".max", valmax);
}
else
{
CStr dmin = attrs.GetNamedItem(at_min);
if (!dmin.empty())
valmin = attrs.GetNamedItem(at_min).ToFloat();
CStr dmax = attrs.GetNamedItem(at_max);
if (!dmax.empty())
valmax = attrs.GetNamedItem(at_max).ToFloat();
}
args.push_back(valmin);
args.push_back(valmax);
if (valmin >= 0.0f)
{
std::stringstream sstr;
sstr << valmin;
material.AddShaderDefine(CStrIntern(conf + "_MIN"), CStrIntern(sstr.str()));
}
if (valmax >= 0.0f)
{
std::stringstream sstr;
sstr << valmax;
material.AddShaderDefine(CStrIntern(conf + "_MAX"), CStrIntern(sstr.str()));
}
}
material.AddConditionalDefine(attrs.GetNamedItem(at_name).c_str(),
attrs.GetNamedItem(at_value).c_str(),
typeID, args);
}
else if (token == el_uniform)
{
std::stringstream str(attrs.GetNamedItem(at_value));
@ -189,8 +131,6 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
}
}
material.RecomputeCombinedShaderDefines();
m_Materials[pathname] = material;
return material;
}

View File

@ -530,10 +530,7 @@ void CModel::AddFlagsRec(int flags)
m_Flags |= flags;
if (flags & MODELFLAG_IGNORE_LOS)
{
m_Material.AddShaderDefine(str_IGNORE_LOS, str_1);
m_Material.RecomputeCombinedShaderDefines();
}
for (size_t i = 0; i < m_Props.size(); ++i)
if (m_Props[i].m_Model->ToCModel())
@ -545,7 +542,6 @@ void CModel::RemoveShadowsRec()
m_Flags &= ~MODELFLAG_CASTSHADOWS;
m_Material.AddShaderDefine(str_DISABLE_RECEIVE_SHADOWS, str_1);
m_Material.RecomputeCombinedShaderDefines();
for (size_t i = 0; i < m_Props.size(); ++i)
{

View File

@ -251,18 +251,6 @@ void CShaderRenderQueries::Add(const char* name)
}
}
void CShaderConditionalDefines::Add(const char* defname, const char* defvalue, int type, std::vector<float> &args)
{
CondDefine cd;
cd.m_DefName = CStrIntern(defname);
cd.m_DefValue = CStrIntern(defvalue);
cd.m_CondArgs = args;
cd.m_CondType = type;
m_Defines.push_back(cd);
}
// Explicit instantiations:
template<> CShaderParams<CStrIntern>::InternedItems_t CShaderParams<CStrIntern>::s_InternedItems = CShaderParams<CStrIntern>::InternedItems_t();

View File

@ -206,29 +206,4 @@ private:
std::vector<RenderQuery> m_Items;
};
enum DEFINE_CONDITION_TYPES
{
DCOND_DISTANCE
};
class CShaderConditionalDefines
{
public:
struct CondDefine
{
CStrIntern m_DefName;
CStrIntern m_DefValue;
int m_CondType;
std::vector<float> m_CondArgs;
};
void Add(const char* defname, const char* defvalue, int type, std::vector<float> &args);
size_t GetSize() const { return m_Defines.size(); }
const CondDefine& GetItem(size_t i) const { return m_Defines[i]; }
private:
std::vector<CondDefine> m_Defines;
};
#endif // INCLUDED_SHADERDEFINES

View File

@ -116,7 +116,7 @@ void CDecalRData::RenderDecals(
}
CShaderDefines defines = contextDecal;
defines.SetMany(material.GetShaderDefines(0));
defines.SetMany(material.GetShaderDefines());
CShaderTechniquePtr techBase = g_Renderer.GetShaderManager().LoadEffect(
material.GetShaderEffect(), defines);
if (!techBase)

View File

@ -430,34 +430,8 @@ void ShaderModelRenderer::Render(
for (size_t i = 0; i < m->submissions[cullGroup].size(); ++i)
{
CModel* model = m->submissions[cullGroup][i];
uint32_t condFlags = 0;
const CShaderConditionalDefines& condefs = model->GetMaterial().GetConditionalDefines();
for (size_t j = 0; j < condefs.GetSize(); ++j)
{
const CShaderConditionalDefines::CondDefine& item = condefs.GetItem(j);
int type = item.m_CondType;
switch (type)
{
case DCOND_DISTANCE:
{
CVector3D modelpos = model->GetTransform().GetTranslation();
float dist = worldToCam.Transform(modelpos).Z;
float dmin = item.m_CondArgs[0];
float dmax = item.m_CondArgs[1];
if ((dmin < 0 || dist >= dmin) && (dmax < 0 || dist < dmax))
condFlags |= (1 << j);
break;
}
}
}
CShaderDefines defs = model->GetMaterial().GetShaderDefines(condFlags);
SMRMaterialBucketKey key(model->GetMaterial().GetShaderEffect(), defs);
const CShaderDefines& defines = model->GetMaterial().GetShaderDefines();
SMRMaterialBucketKey key(model->GetMaterial().GetShaderEffect(), defines);
MaterialBuckets_t::iterator it = materialBuckets.find(key);
if (it == materialBuckets.end())

View File

@ -741,7 +741,7 @@ void CPatchRData::RenderBases(
continue;
}
CShaderDefines defines = context;
defines.SetMany(material.GetShaderDefines(0));
defines.SetMany(material.GetShaderDefines());
CShaderTechniquePtr techBase = g_Renderer.GetShaderManager().LoadEffect(
material.GetShaderEffect(), defines);
@ -954,7 +954,7 @@ void CPatchRData::RenderBlends(
if (!bestTex->GetMaterial().GetSamplers().empty())
{
CShaderDefines defines = contextBlend;
defines.SetMany(bestTex->GetMaterial().GetShaderDefines(0));
defines.SetMany(bestTex->GetMaterial().GetShaderDefines());
layer.m_ShaderTech = g_Renderer.GetShaderManager().LoadEffect(
bestTex->GetMaterial().GetShaderEffect(), defines);
}