4 #include <unordered_map>
14 enum ShaderAvailableAuto {
15 SP_AUTO_MODELVIEW_PROJECTION_MATRIX,
17 SP_AUTO_MODELVIEW_MATRIX,
18 SP_AUTO_PROJECTION_MATRIX,
19 SP_AUTO_INVERSE_TRANSPOSE_MODELVIEW_MATRIX,
20 SP_AUTO_MATERIAL_DIFFUSE,
21 SP_AUTO_MATERIAL_SPECULAR,
22 SP_AUTO_MATERIAL_AMBIENT,
23 SP_AUTO_MATERIAL_SHININESS,
24 SP_AUTO_MATERIAL_TEX_MATRIX0,
25 SP_AUTO_MATERIAL_TEX_MATRIX1,
26 SP_AUTO_MATERIAL_TEX_MATRIX2,
27 SP_AUTO_MATERIAL_TEX_MATRIX3,
28 SP_AUTO_MATERIAL_TEX_MATRIX4,
29 SP_AUTO_MATERIAL_TEX_MATRIX5,
30 SP_AUTO_MATERIAL_TEX_MATRIX6,
31 SP_AUTO_MATERIAL_TEX_MATRIX7,
32 SP_AUTO_MATERIAL_ACTIVE_TEXTURE_UNITS,
33 SP_AUTO_MATERIAL_POINT_SIZE,
34 SP_AUTO_LIGHT_GLOBAL_AMBIENT,
35 SP_AUTO_LIGHT_POSITION,
36 SP_AUTO_LIGHT_DIRECTION,
37 SP_AUTO_LIGHT_DIFFUSE,
38 SP_AUTO_LIGHT_SPECULAR,
39 SP_AUTO_LIGHT_AMBIENT,
40 SP_AUTO_LIGHT_CONSTANT_ATTENUATION,
41 SP_AUTO_LIGHT_LINEAR_ATTENUATION,
42 SP_AUTO_LIGHT_QUADRATIC_ATTENUATION,
45 SP_AUTO_LIGHTS_GLOBAL_AMBIENT,
46 SP_AUTO_LIGHTS_POSITION,
47 SP_AUTO_LIGHTS_DIRECTION,
48 SP_AUTO_LIGHTS_DIFFUSE,
49 SP_AUTO_LIGHTS_SPECULAR,
50 SP_AUTO_LIGHTS_AMBIENT,
51 SP_AUTO_LIGHTS_CONSTANT_ATTENUATION,
52 SP_AUTO_LIGHTS_LINEAR_ATTENUATION,
53 SP_AUTO_LIGHTS_QUADRATIC_ATTENUATION,
61 using smlt::ShaderAvailableAuto;
64 struct hash<ShaderAvailableAuto> {
65 size_t operator()(
const ShaderAvailableAuto& a)
const {
66 hash<int32_t> make_hash;
67 return make_hash(int32_t(a));
76 bool uses_auto(ShaderAvailableAuto uniform)
const {
77 return auto_uniforms_.find(uniform) != auto_uniforms_.end();
80 std::string auto_variable_name(ShaderAvailableAuto auto_name)
const {
81 auto it = auto_uniforms_.find(auto_name);
82 if(it == auto_uniforms_.end()) {
83 throw std::logic_error(
"Specified auto is not registered");
89 void register_auto(ShaderAvailableAuto uniform,
const std::string& var_name);
90 const std::unordered_map<ShaderAvailableAuto, std::string>& auto_uniforms()
const {
91 return auto_uniforms_;
95 std::unordered_map<ShaderAvailableAuto, std::string> auto_uniforms_;