3 #include <unordered_map>
7 #include "../../../generic/containers/contiguous_map.h"
8 #include "../property_value.h"
9 #include "core_material.h"
10 #include "material_value_pool.h"
21 bool valid_name(
const char* name);
30 virtual bool set_property_value(MaterialPropertyNameHash hsh,
31 const char* name,
const bool& value) = 0;
32 virtual bool set_property_value(MaterialPropertyNameHash hsh,
33 const char* name,
const float& value) = 0;
34 virtual bool set_property_value(MaterialPropertyNameHash hsh,
35 const char* name,
const int32_t& value) = 0;
36 virtual bool set_property_value(MaterialPropertyNameHash hsh,
37 const char* name,
const Vec2& value) = 0;
38 virtual bool set_property_value(MaterialPropertyNameHash hsh,
39 const char* name,
const Vec3& value) = 0;
40 virtual bool set_property_value(MaterialPropertyNameHash hsh,
41 const char* name,
const Vec4& value) = 0;
42 virtual bool set_property_value(MaterialPropertyNameHash hsh,
43 const char* name,
const Mat3& value) = 0;
44 virtual bool set_property_value(MaterialPropertyNameHash hsh,
45 const char* name,
const Mat4& value) = 0;
46 virtual bool set_property_value(MaterialPropertyNameHash hsh,
48 const TexturePtr& value) = 0;
50 virtual bool property_value(
const MaterialPropertyNameHash hsh,
51 const bool*& out)
const = 0;
52 virtual bool property_value(
const MaterialPropertyNameHash hsh,
53 const float*& out)
const = 0;
54 virtual bool property_value(
const MaterialPropertyNameHash hsh,
55 const int32_t*& out)
const = 0;
56 virtual bool property_value(
const MaterialPropertyNameHash hsh,
57 const Vec2*& out)
const = 0;
58 virtual bool property_value(
const MaterialPropertyNameHash hsh,
59 const Vec3*& out)
const = 0;
60 virtual bool property_value(
const MaterialPropertyNameHash hsh,
61 const Vec4*& out)
const = 0;
62 virtual bool property_value(
const MaterialPropertyNameHash hsh,
63 const Mat3*& out)
const = 0;
64 virtual bool property_value(
const MaterialPropertyNameHash hsh,
65 const Mat4*& out)
const = 0;
66 virtual bool property_value(
const MaterialPropertyNameHash hsh,
67 const TexturePtr*& out)
const = 0;
69 virtual bool set_property_value(MaterialPropertyNameHash hsh,
70 const char* name,
const Color& value) {
71 return set_property_value(
73 reinterpret_cast<const Vec4&
>(
77 virtual bool property_value(
const MaterialPropertyNameHash hsh,
78 const Color*& out)
const {
79 return property_value(
80 hsh,
reinterpret_cast<const Vec4*&
>(out));
85 void set_property_value(
const std::string& str,
const T& v) {
86 MaterialPropertyNameHash hsh = material_property_hash(str.c_str());
87 set_property_value(hsh, str.c_str(), v);
91 void set_property_value(
const char* name,
const T& v) {
92 MaterialPropertyNameHash hsh = material_property_hash(name);
93 set_property_value(hsh, name, v);
97 bool property_value(
const std::string& str,
const T*& out)
const {
98 return property_value(str.c_str(), out);
102 bool property_value(
const char* name,
const T*& out)
const {
103 auto hsh = material_property_hash(name);
104 return property_value(hsh, out);
107 bool clear_override(
const char* name) {
108 return on_clear_override(material_property_hash(name));
111 bool clear_override(MaterialPropertyNameHash hsh) {
112 return on_clear_override(hsh);
115 bool check_existance(
const char* property_name)
const {
116 return on_check_existence(material_property_hash(property_name));
119 virtual bool property_type(
const char* property_name,
120 MaterialPropertyType* type)
const = 0;
122 virtual bool on_check_existence(MaterialPropertyNameHash hsh)
const = 0;
125 virtual void on_override(MaterialPropertyNameHash hsh,
const char* name,
126 MaterialPropertyType type) {
132 virtual bool on_clear_override(MaterialPropertyNameHash hsh) = 0;