3 #include "../constants.h"
4 #include "../property_value.h"
6 #include "../../../utils/hash/fnv1.h"
10 typedef uint32_t MaterialPropertyNameHash;
18 #define material_property_hash(x) smlt::fnv1<uint32_t>::hash(x)
20 constexpr
const MaterialPropertyNameHash DIFFUSE_PROPERTY_HASH =
21 material_property_hash(DIFFUSE_PROPERTY_NAME);
22 constexpr
const MaterialPropertyNameHash AMBIENT_PROPERTY_HASH = material_property_hash(AMBIENT_PROPERTY_NAME);
23 constexpr
const MaterialPropertyNameHash SPECULAR_PROPERTY_HASH = material_property_hash(SPECULAR_PROPERTY_NAME);
24 constexpr
const MaterialPropertyNameHash EMISSION_PROPERTY_HASH = material_property_hash(EMISSION_PROPERTY_NAME);
25 constexpr
const MaterialPropertyNameHash SHININESS_PROPERTY_HASH = material_property_hash(SHININESS_PROPERTY_NAME);
26 constexpr
const MaterialPropertyNameHash POINT_SIZE_PROPERTY_HASH = material_property_hash(POINT_SIZE_PROPERTY_NAME);
28 constexpr
const MaterialPropertyNameHash DEPTH_WRITE_ENABLED_PROPERTY_HASH = material_property_hash(DEPTH_WRITE_ENABLED_PROPERTY_NAME);
29 constexpr
const MaterialPropertyNameHash DEPTH_TEST_ENABLED_PROPERTY_HASH = material_property_hash(DEPTH_TEST_ENABLED_PROPERTY_NAME);
30 constexpr
const MaterialPropertyNameHash LIGHTING_ENABLED_PROPERTY_HASH = material_property_hash(LIGHTING_ENABLED_PROPERTY_NAME);
31 constexpr
const MaterialPropertyNameHash TEXTURES_ENABLED_PROPERTY_HASH = material_property_hash(TEXTURES_ENABLED_PROPERTY_NAME);
33 constexpr
const MaterialPropertyNameHash DIFFUSE_MAP_PROPERTY_HASH = material_property_hash(DIFFUSE_MAP_PROPERTY_NAME);
34 constexpr
const MaterialPropertyNameHash LIGHT_MAP_PROPERTY_HASH = material_property_hash(LIGHT_MAP_PROPERTY_NAME);
35 constexpr
const MaterialPropertyNameHash NORMAL_MAP_PROPERTY_HASH = material_property_hash(NORMAL_MAP_PROPERTY_NAME);
36 constexpr
const MaterialPropertyNameHash SPECULAR_MAP_PROPERTY_HASH = material_property_hash(SPECULAR_MAP_PROPERTY_NAME);
38 constexpr
const MaterialPropertyNameHash DIFFUSE_MAP_MATRIX_PROPERTY_HASH = material_property_hash(DIFFUSE_MAP_MATRIX_PROPERTY_NAME);
39 constexpr
const MaterialPropertyNameHash LIGHT_MAP_MATRIX_PROPERTY_HASH = material_property_hash(LIGHT_MAP_MATRIX_PROPERTY_NAME);
40 constexpr
const MaterialPropertyNameHash NORMAL_MAP_MATRIX_PROPERTY_HASH = material_property_hash(NORMAL_MAP_MATRIX_PROPERTY_NAME);
41 constexpr
const MaterialPropertyNameHash SPECULAR_MAP_MATRIX_PROPERTY_HASH = material_property_hash(SPECULAR_MAP_MATRIX_PROPERTY_NAME);
43 constexpr
const MaterialPropertyNameHash BLEND_FUNC_PROPERTY_HASH = material_property_hash(BLEND_FUNC_PROPERTY_NAME);
44 constexpr
const MaterialPropertyNameHash POLYGON_MODE_PROPERTY_HASH = material_property_hash(POLYGON_MODE_PROPERTY_NAME);
45 constexpr
const MaterialPropertyNameHash SHADE_MODEL_PROPERTY_HASH = material_property_hash(SHADE_MODEL_PROPERTY_NAME);
46 constexpr
const MaterialPropertyNameHash COLOR_MATERIAL_PROPERTY_HASH = material_property_hash(COLOR_MATERIAL_PROPERTY_NAME);
47 constexpr
const MaterialPropertyNameHash CULL_MODE_PROPERTY_HASH = material_property_hash(CULL_MODE_PROPERTY_NAME);
48 constexpr
const MaterialPropertyNameHash DEPTH_FUNC_PROPERTY_HASH = material_property_hash(DEPTH_FUNC_PROPERTY_NAME);
50 constexpr
const MaterialPropertyNameHash FOG_MODE_PROPERTY_HASH = material_property_hash(FOG_MODE_PROPERTY_NAME);
51 constexpr
const MaterialPropertyNameHash FOG_DENSITY_PROPERTY_HASH = material_property_hash(FOG_DENSITY_PROPERTY_NAME);
52 constexpr
const MaterialPropertyNameHash FOG_START_PROPERTY_HASH = material_property_hash(FOG_START_PROPERTY_NAME);
53 constexpr
const MaterialPropertyNameHash FOG_END_PROPERTY_HASH = material_property_hash(FOG_END_PROPERTY_NAME);
54 constexpr
const MaterialPropertyNameHash FOG_COLOR_PROPERTY_HASH = material_property_hash(FOG_COLOR_PROPERTY_NAME);
56 constexpr
const MaterialPropertyNameHash ALPHA_FUNC_PROPERTY_HASH = material_property_hash(ALPHA_FUNC_PROPERTY_NAME);
57 constexpr
const MaterialPropertyNameHash ALPHA_THRESHOLD_PROPERTY_HASH = material_property_hash(ALPHA_THRESHOLD_PROPERTY_NAME);
59 inline constexpr
bool is_core_property(
const MaterialPropertyNameHash hsh) {
61 case DIFFUSE_PROPERTY_HASH:
62 case AMBIENT_PROPERTY_HASH:
63 case EMISSION_PROPERTY_HASH:
64 case SPECULAR_PROPERTY_HASH:
65 case SHININESS_PROPERTY_HASH:
66 case POINT_SIZE_PROPERTY_HASH:
67 case DEPTH_WRITE_ENABLED_PROPERTY_HASH:
68 case DEPTH_TEST_ENABLED_PROPERTY_HASH:
69 case DEPTH_FUNC_PROPERTY_HASH:
70 case LIGHTING_ENABLED_PROPERTY_HASH:
71 case TEXTURES_ENABLED_PROPERTY_HASH:
72 case DIFFUSE_MAP_PROPERTY_HASH:
73 case SPECULAR_MAP_PROPERTY_HASH:
74 case LIGHT_MAP_PROPERTY_HASH:
75 case NORMAL_MAP_PROPERTY_HASH:
76 case DIFFUSE_MAP_MATRIX_PROPERTY_HASH:
77 case SPECULAR_MAP_MATRIX_PROPERTY_HASH:
78 case LIGHT_MAP_MATRIX_PROPERTY_HASH:
79 case NORMAL_MAP_MATRIX_PROPERTY_HASH:
80 case BLEND_FUNC_PROPERTY_HASH:
81 case POLYGON_MODE_PROPERTY_HASH:
82 case SHADE_MODEL_PROPERTY_HASH:
83 case COLOR_MATERIAL_PROPERTY_HASH:
84 case CULL_MODE_PROPERTY_HASH:
85 case FOG_COLOR_PROPERTY_HASH:
86 case FOG_DENSITY_PROPERTY_HASH:
87 case FOG_START_PROPERTY_HASH:
88 case FOG_END_PROPERTY_HASH:
89 case FOG_MODE_PROPERTY_HASH:
90 case ALPHA_FUNC_PROPERTY_HASH:
91 case ALPHA_THRESHOLD_PROPERTY_HASH:
99 typedef std::vector<std::pair<std::string, MaterialPropertyType>> PropertyList;
101 const PropertyList &core_properties();
103 bool is_core_property(
const char* name);
105 bool core_property_type(
const char* name, MaterialPropertyType* type);
106 bool core_property_type(MaterialPropertyNameHash hsh, MaterialPropertyType* type);
108 bool core_material_property_value(
const char* name,
const Color*& out);
109 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Color*& out);
111 bool core_material_property_value(
const char* name,
const float *&out);
112 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const float*& out);
114 bool core_material_property_value(
const char* name,
const int32_t*&);
115 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const int32_t*& out);
117 bool core_material_property_value(
const char* name,
const bool*& out);
118 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const bool*& out);
120 bool core_material_property_value(
const char* name,
const Vec2*& out);
121 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Vec2*& out);
123 bool core_material_property_value(
const char* name,
const Vec3*& out);
124 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Vec3*& out);
126 bool core_material_property_value(
const char* name,
const Vec4*& out);
127 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Vec4*& out);
129 bool core_material_property_value(
const char* name,
const Mat3*& out);
130 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Mat3*& out);
132 bool core_material_property_value(
const char* name,
const Mat4*& out);
133 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const Mat4*& out);
135 bool core_material_property_value(
const char* name,
const TexturePtr*& out);
136 bool core_material_property_value(
const MaterialPropertyNameHash hsh,
const TexturePtr*& out);