Simulant  21.12-1292
A portable game engine for Windows, OSX, Linux, Dreamcast, and PSP
core_material.h
1 #pragma once
2 
3 #include "../constants.h"
4 #include "../property_value.h"
5 
6 #include "../../../utils/hash/fnv1.h"
7 
8 namespace smlt {
9 
10 typedef uint32_t MaterialPropertyNameHash;
11 
12 // unsigned constexpr material_property_hash(char const *input) {
13 // return *input ?
14 // static_cast<unsigned int>(*input) + 33 * material_property_hash(input
15 // + 1) : 5381;
16 // }
17 
18 #define material_property_hash(x) smlt::fnv1<uint32_t>::hash(x)
19 
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);
27 
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);
32 
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);
37 
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);
42 
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);
49 
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);
55 
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);
58 
59 inline constexpr bool is_core_property(const MaterialPropertyNameHash hsh) {
60  switch(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:
92  return true;
93  default:
94  return false;
95  }
96 }
97 
98 
99 typedef std::vector<std::pair<std::string, MaterialPropertyType>> PropertyList;
100 
101 const PropertyList &core_properties();
102 
103 bool is_core_property(const char* name);
104 
105 bool core_property_type(const char* name, MaterialPropertyType* type);
106 bool core_property_type(MaterialPropertyNameHash hsh, MaterialPropertyType* type);
107 
108 bool core_material_property_value(const char* name, const Color*& out);
109 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Color*& out);
110 
111 bool core_material_property_value(const char* name, const float *&out);
112 bool core_material_property_value(const MaterialPropertyNameHash hsh, const float*& out);
113 
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);
116 
117 bool core_material_property_value(const char* name, const bool*& out);
118 bool core_material_property_value(const MaterialPropertyNameHash hsh, const bool*& out);
119 
120 bool core_material_property_value(const char* name, const Vec2*& out);
121 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Vec2*& out);
122 
123 bool core_material_property_value(const char* name, const Vec3*& out);
124 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Vec3*& out);
125 
126 bool core_material_property_value(const char* name, const Vec4*& out);
127 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Vec4*& out);
128 
129 bool core_material_property_value(const char* name, const Mat3*& out);
130 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Mat3*& out);
131 
132 bool core_material_property_value(const char* name, const Mat4*& out);
133 bool core_material_property_value(const MaterialPropertyNameHash hsh, const Mat4*& out);
134 
135 bool core_material_property_value(const char* name, const TexturePtr*& out);
136 bool core_material_property_value(const MaterialPropertyNameHash hsh, const TexturePtr*& out);
137 
138 }
smlt
Definition: animation.cpp:25