Index: binaries/data/mods/public/art/materials/objectcolor.xml
===================================================================
--- binaries/data/mods/public/art/materials/objectcolor.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/objectcolor.xml (working copy)
@@ -2,4 +2,6 @@
+
+
Index: binaries/data/mods/public/art/materials/player_trans_parallax.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_parallax.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_parallax.xml (working copy)
@@ -7,7 +7,6 @@
-
@@ -20,4 +19,8 @@
Third value: Parallax scale.
Fourth value: AO amount. -->
+
+
+
+
Index: binaries/data/mods/public/art/materials/player_trans.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans.xml (working copy)
@@ -2,4 +2,5 @@
+
Index: binaries/data/mods/public/art/materials/trans_wind_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/trans_wind_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/trans_wind_parallax_spec.xml (working copy)
@@ -6,11 +6,13 @@
-
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/terrain_norm.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_norm.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_norm.xml (working copy)
@@ -1,7 +1,7 @@
-
+
Index: binaries/data/mods/public/art/materials/trans_wind.xml
===================================================================
--- binaries/data/mods/public/art/materials/trans_wind.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/trans_wind.xml (working copy)
@@ -4,4 +4,5 @@
+
Index: binaries/data/mods/public/art/materials/player_trans_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_spec.xml (working copy)
@@ -3,7 +3,6 @@
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/player_water.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_water.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_water.xml (working copy)
@@ -13,4 +13,5 @@
+
Index: binaries/data/mods/public/art/materials/terrain_base.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_base.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_base.xml (working copy)
@@ -1,4 +1,5 @@
+
Index: binaries/data/mods/public/art/materials/basic_trans.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans.xml (working copy)
@@ -4,4 +4,6 @@
+
+
Index: binaries/data/mods/public/art/materials/basic_trans_ao_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_ao_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_ao_spec.xml (working copy)
@@ -11,10 +11,8 @@
-->
-
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/basic_trans_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_spec.xml (working copy)
@@ -11,7 +11,6 @@
-->
-
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/objectcolor_specmap.xml
===================================================================
--- binaries/data/mods/public/art/materials/objectcolor_specmap.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/objectcolor_specmap.xml (working copy)
@@ -4,6 +4,8 @@
-
+
+
+
Index: binaries/data/mods/public/art/materials/objectcolor_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/objectcolor_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/objectcolor_spec.xml (working copy)
@@ -7,4 +7,6 @@
+
+
Index: binaries/data/mods/public/art/materials/basic_glow.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_glow.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_glow.xml (working copy)
@@ -5,7 +5,8 @@
-
+
+
Index: binaries/data/mods/public/art/materials/terrain_norm_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_norm_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_norm_spec.xml (working copy)
@@ -1,8 +1,9 @@
-
-
+
+
+
Index: binaries/data/mods/public/art/materials/aura.xml
===================================================================
--- binaries/data/mods/public/art/materials/aura.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/aura.xml (working copy)
@@ -4,8 +4,9 @@
-
+
+
Index: binaries/data/mods/public/art/materials/player_trans_ao.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_ao.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_ao.xml (working copy)
@@ -12,7 +12,6 @@
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/basic_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_spec.xml (working copy)
@@ -5,4 +5,6 @@
+
+
Index: binaries/data/mods/public/art/materials/no_trans_parallax_ao.xml
===================================================================
--- binaries/data/mods/public/art/materials/no_trans_parallax_ao.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/no_trans_parallax_ao.xml (working copy)
@@ -6,11 +6,9 @@
-
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/alphatest_ao_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/alphatest_ao_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/alphatest_ao_parallax_spec.xml (working copy)
@@ -1,9 +1,12 @@
+
+
+
-
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/playercolor_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/playercolor_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/playercolor_spec.xml (working copy)
@@ -7,4 +7,5 @@
+
Index: binaries/data/mods/public/art/materials/blend_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/blend_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/blend_spec.xml (working copy)
@@ -9,4 +9,5 @@
+
Index: binaries/data/mods/public/art/materials/basic_trans_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_parallax_spec.xml (working copy)
@@ -9,9 +9,7 @@
-
-
@@ -22,4 +20,7 @@
Third value: Parallax scale.
Fourth value: AO amount. -->
+
+
+
Index: binaries/data/mods/public/art/materials/alphatest_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/alphatest_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/alphatest_spec.xml (working copy)
@@ -7,4 +7,5 @@
+
Index: binaries/data/mods/public/art/materials/material.rnc
===================================================================
--- binaries/data/mods/public/art/materials/material.rnc (revision 16386)
+++ binaries/data/mods/public/art/materials/material.rnc (working copy)
@@ -39,4 +39,7 @@
element renderquery {
attribute name { text }
}*
+ element required_texture {
+ attribute name { text }
+ }*
}
Index: binaries/data/mods/public/art/materials/basic_trans_ao_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_ao_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_ao_parallax_spec.xml (working copy)
@@ -9,12 +9,9 @@
-
-
-
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/terrain_grass.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_grass.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_grass.xml (working copy)
@@ -5,4 +5,5 @@
+
Index: binaries/data/mods/public/art/materials/material.rng
===================================================================
--- binaries/data/mods/public/art/materials/material.rng (revision 16386)
+++ binaries/data/mods/public/art/materials/material.rng (working copy)
@@ -86,5 +86,10 @@
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/basic_trans_ao.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_ao.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_ao.xml (working copy)
@@ -14,7 +14,6 @@
-
+
+
+
Index: binaries/data/mods/public/art/materials/terrain_triplanar_norm_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_triplanar_norm_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_triplanar_norm_spec.xml (working copy)
@@ -1,9 +1,10 @@
-
-
+
+
+
Index: binaries/data/mods/public/art/materials/basic_trans_wind.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_trans_wind.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_trans_wind.xml (working copy)
@@ -6,4 +6,5 @@
+
Index: binaries/data/mods/public/art/materials/no_trans_ao.xml
===================================================================
--- binaries/data/mods/public/art/materials/no_trans_ao.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/no_trans_ao.xml (working copy)
@@ -11,7 +11,6 @@
-
+
+
+
Index: binaries/data/mods/public/art/materials/alphatest.xml
===================================================================
--- binaries/data/mods/public/art/materials/alphatest.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/alphatest.xml (working copy)
@@ -3,4 +3,6 @@
+
+
Index: binaries/data/mods/public/art/materials/basic_specmap.xml
===================================================================
--- binaries/data/mods/public/art/materials/basic_specmap.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/basic_specmap.xml (working copy)
@@ -10,7 +10,6 @@
no specularity.
COMPATIBILITY: This effect is incompatible with the old "USE_SPECULAR" effect.
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
-
+
+
+
Index: binaries/data/mods/public/art/materials/terrain_triplanar.xml
===================================================================
--- binaries/data/mods/public/art/materials/terrain_triplanar.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/terrain_triplanar.xml (working copy)
@@ -4,4 +4,5 @@
+
Index: binaries/data/mods/public/art/materials/player_trans_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_parallax_spec.xml (working copy)
@@ -7,9 +7,7 @@
-
-
@@ -20,4 +18,9 @@
Third value: Parallax scale.
Fourth value: AO amount. -->
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/rock_bump_spec_ao_test.xml
===================================================================
--- binaries/data/mods/public/art/materials/rock_bump_spec_ao_test.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/rock_bump_spec_ao_test.xml (working copy)
@@ -17,7 +17,6 @@
-
-
-
+
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/player_trans_ao_parallax_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_ao_parallax_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_ao_parallax_spec.xml (working copy)
@@ -7,12 +7,9 @@
-
-
-
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/player_trans_ao_spec.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_ao_spec.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_ao_spec.xml (working copy)
@@ -7,12 +7,9 @@
-
-
-
+
+
+
+
+
+
Index: binaries/data/mods/public/art/materials/player_trans_spec_helmet.xml
===================================================================
--- binaries/data/mods/public/art/materials/player_trans_spec_helmet.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/player_trans_spec_helmet.xml (working copy)
@@ -3,7 +3,6 @@
-
+
+
+
+
Index: binaries/data/mods/public/art/materials/default.xml
===================================================================
--- binaries/data/mods/public/art/materials/default.xml (revision 16386)
+++ binaries/data/mods/public/art/materials/default.xml (working copy)
@@ -1,4 +1,5 @@
+
Index: source/graphics/ObjectBase.h
===================================================================
--- source/graphics/ObjectBase.h (revision 16386)
+++ source/graphics/ObjectBase.h (working copy)
@@ -28,6 +28,7 @@
#include
#include "lib/file/vfs/vfs_path.h"
#include "ps/CStr.h"
+#include "ps/CStrIntern.h"
#include
@@ -70,7 +71,7 @@
struct Samp
{
// identifier name of sampler in GLSL shaders
- CStr m_SamplerName;
+ CStrIntern m_SamplerName;
// path to load from
VfsPath m_SamplerFile;
};
Index: source/graphics/Material.h
===================================================================
--- source/graphics/Material.h (revision 16386)
+++ source/graphics/Material.h (working copy)
@@ -31,7 +31,8 @@
struct TextureSampler
{
- TextureSampler(CStr &n, CTexturePtr t) : Name(n), Sampler(t) {}
+ TextureSampler(const CStr &n, CTexturePtr t) : Name(n), Sampler(t) {}
+ TextureSampler(const CStrIntern &n, CTexturePtr t) : Name(n), Sampler(t) {}
CStrIntern Name;
CTexturePtr Sampler;
@@ -74,6 +75,9 @@
void AddRenderQuery(const char* key);
const CShaderRenderQueries& GetRenderQueries() const { return m_RenderQueries; }
+ void AddRequiredSampler(const CStr& samplerName);
+ const std::vector& GetRequiredSampler() const { return m_RequiredSamplers; }
+
// Must be called after all AddShaderDefine and AddConditionalDefine
void RecomputeCombinedShaderDefines();
@@ -84,6 +88,7 @@
CTexturePtr m_DiffuseTexture;
SamplersVector m_Samplers;
+ std::vector m_RequiredSamplers;
CStrIntern m_ShaderEffect;
CShaderDefines m_ShaderDefines;
Index: source/graphics/ObjectEntry.cpp
===================================================================
--- source/graphics/ObjectEntry.cpp (revision 16386)
+++ source/graphics/ObjectEntry.cpp (working copy)
@@ -149,6 +149,22 @@
model->GetMaterial().AddSampler(CMaterial::TextureSampler(samp->m_SamplerName, texture));
}
+ const std::vector& requiredSamplers = model->GetMaterial().GetRequiredSampler();
+ for (auto it : requiredSamplers)
+ {
+ bool found = false;
+ for (auto sampit : m_Samplers)
+ if (sampit.m_SamplerName == it)
+ {
+ found = true;
+ break;
+ }
+ if (!found)
+ {
+ LOGERROR("Actor %s: required texture sampler %s not found (material %s)", m_ModelName.string8().c_str(), it.string().c_str(), m_Base->m_Material.string8().c_str());
+ }
+ }
+
// calculate initial object space bounds, based on vertex positions
model->CalcStaticObjectBounds();
Index: source/graphics/ObjectBase.cpp
===================================================================
--- source/graphics/ObjectBase.cpp (revision 16386)
+++ source/graphics/ObjectBase.cpp (working copy)
@@ -164,7 +164,7 @@
if (se.Name == at_file)
samp.m_SamplerFile = VfsPath("art/textures/skins") / se.Value.FromUTF8();
else if (se.Name == at_name)
- samp.m_SamplerName = se.Value;
+ samp.m_SamplerName = CStrIntern(se.Value);
}
currentVariant->m_Samplers.push_back(samp);
}
@@ -459,9 +459,9 @@
// Same for samplers, though perhaps not strictly necessary:
for (std::vector::iterator it = var.m_Samplers.begin(); it != var.m_Samplers.end(); ++it)
- variation.samplers.erase(it->m_SamplerName);
+ variation.samplers.erase(it->m_SamplerName.string());
for (std::vector::iterator it = var.m_Samplers.begin(); it != var.m_Samplers.end(); ++it)
- variation.samplers.insert(make_pair(it->m_SamplerName, *it));
+ variation.samplers.insert(make_pair(it->m_SamplerName.string(), *it));
}
return variation;
Index: source/graphics/MaterialManager.cpp
===================================================================
--- source/graphics/MaterialManager.cpp (revision 16386)
+++ source/graphics/MaterialManager.cpp (working copy)
@@ -58,9 +58,11 @@
EL(shader);
EL(uniform);
EL(renderquery);
+ EL(required_texture);
EL(conditional_define);
AT(effect);
AT(if);
+ AT(define);
AT(quality);
AT(material);
AT(name);
@@ -180,7 +182,13 @@
{
material.AddRenderQuery(attrs.GetNamedItem(at_name).c_str());
}
+ else if (token == el_required_texture)
+ {
+ material.AddRequiredSampler(attrs.GetNamedItem(at_name));
+ if (!attrs.GetNamedItem(at_define).empty())
+ material.AddShaderDefine(CStrIntern(attrs.GetNamedItem(at_define)), str_1);
}
+ }
material.RecomputeCombinedShaderDefines();
Index: source/graphics/Material.cpp
===================================================================
--- source/graphics/Material.cpp (revision 16386)
+++ source/graphics/Material.cpp (working copy)
@@ -60,6 +60,13 @@
m_RenderQueries.Add(key);
}
+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.