-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathglmtypeadder.cpp
More file actions
129 lines (99 loc) · 8.38 KB
/
glmtypeadder.cpp
File metadata and controls
129 lines (99 loc) · 8.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <fea/entity/glmtypeadder.hpp>
#include <fea/entity/entityfactory.hpp>
#define GLM_FORCE_RADIANS
#include <glm/glm.hpp>
#include <glm/gtc/type_precision.hpp>
namespace fea
{
void addGlmDataTypes(EntityFactory& factory)
{
factory.addDataType("vec2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 2, "Wrong amount of parameters! Expected 2, got " + std::to_string(params.size()) + "!");
return glm::vec2(stof(params[0]), stof(params[1]));
});
factory.addDataType("uvec2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 2, "Wrong amount of parameters! Expected 2, got " + std::to_string(params.size()) + "!");
FEA_ASSERT(params[0].find('-') == std::string::npos && params[1].find('-') == std::string::npos, "Default value for type uvec2 is not allowed to have negative numbers! Given '" + params[0] + "," + params[1] + "'.");
FEA_ASSERT(static_cast<unsigned long>(static_cast<uint32_t>(std::stoul(params[0]))) == std::stoul(params[0]) && static_cast<unsigned long>(static_cast<uint32_t>(std::stoul(params[1]))) == std::stoul(params[1]), "Default value '" + params[0] + "," + params[1] + "' given to attribute of uvec2 is too large!");
return glm::uvec2(static_cast<uint32_t>(std::stoul(params[0])), static_cast<uint32_t>(std::stoul(params[1])));
});
factory.addDataType("ivec2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 2, "Wrong amount of parameters! Expected 2, got " + std::to_string(params.size()) + "!");
return glm::ivec2(static_cast<int32_t>(std::stoi(params[0])), static_cast<int32_t>(std::stoi(params[1])));
});
factory.addDataType("u64vec2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 2, "Wrong amount of parameters! Expected 2, got " + std::to_string(params.size()) + "!");
FEA_ASSERT(params[0].find('-') == std::string::npos && params[1].find('-') == std::string::npos, "Default value for type u64vec2 is not allowed to have negative numbers! Given '" + params[0] + "," + params[1] + "'.");
FEA_ASSERT(static_cast<unsigned long>(static_cast<uint64_t>(std::stoul(params[0]))) == std::stoul(params[0]) && static_cast<unsigned long>(static_cast<uint64_t>(std::stoul(params[1]))) == std::stoul(params[1]), "Default value '" + params[0] + "," + params[1] + "' given to attribute of u64vec2 is too large!");
return glm::u64vec2(static_cast<uint64_t>(std::stoul(params[0])), static_cast<uint64_t>(std::stoul(params[1])));
});
factory.addDataType("i64vec2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 2, "Wrong amount of parameters! Expected 2, got " + std::to_string(params.size()) + "!");
return glm::i64vec2(static_cast<int64_t>(std::stoi(params[0])), static_cast<int64_t>(std::stoi(params[1])));
});
factory.addDataType("vec3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 3, "Wrong amount of parameters! Expected 3, got " + std::to_string(params.size()) + "!");
return glm::vec3(stof(params[0]), stof(params[1]), stof(params[2]));
});
factory.addDataType("uvec3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 3, "Wrong amount of parameters! Expected 3, got " + std::to_string(params.size()) + "!");
FEA_ASSERT(params[0].find('-') == std::string::npos && params[1].find('-') == std::string::npos && params[2].find('-') == std::string::npos, "Default value for type uvec3 is not allowed to have negative numbers! Given '" + params[0] + "," + params[1] + "," + params[2] + "'.");
FEA_ASSERT(static_cast<unsigned long>(static_cast<uint32_t>(std::stoul(params[0]))) == std::stoul(params[0]) && static_cast<unsigned long>(static_cast<uint32_t>(std::stoul(params[1]))) == std::stoul(params[1]) && static_cast<unsigned long>(static_cast<uint32_t>(std::stoul(params[2]))) == std::stoul(params[2]), "Default value '" + params[0] + "," + params[1] + "," + params[2] + "' given to attribute of uvec3 is too large!");
return glm::uvec3(static_cast<uint32_t>(std::stoul(params[0])), static_cast<uint32_t>(std::stoul(params[1])), static_cast<uint32_t>(std::stoul(params[2])));
});
factory.addDataType("ivec3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 3, "Wrong amount of parameters! Expected 3, got " + std::to_string(params.size()) + "!");
return glm::ivec3(static_cast<int32_t>(std::stoi(params[0])), static_cast<int32_t>(std::stoi(params[1])), static_cast<int32_t>(std::stoi(params[2])));
});
factory.addDataType("u64vec3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 3, "Wrong amount of parameters! Expected 3, got " + std::to_string(params.size()) + "!");
FEA_ASSERT(params[0].find('-') == std::string::npos && params[1].find('-') == std::string::npos && params[2].find('-') == std::string::npos, "Default value for type u64vec3 is not allowed to have negative numbers! Given '" + params[0] + "," + params[1] + "," + params[2] + "'.");
FEA_ASSERT(static_cast<unsigned long>(static_cast<uint64_t>(std::stoul(params[0]))) == std::stoul(params[0]) && static_cast<unsigned long>(static_cast<uint64_t>(std::stoul(params[1]))) == std::stoul(params[1]) && static_cast<unsigned long>(static_cast<uint64_t>(std::stoul(params[2]))) == std::stoul(params[2]), "Default value '" + params[0] + "," + params[1] + "," + params[2] + "' given to attribute of u64vec3 is too large!");
return glm::u64vec3(static_cast<uint64_t>(std::stoul(params[0])), static_cast<uint64_t>(std::stoul(params[1])), static_cast<uint64_t>(std::stoul(params[2])));
});
factory.addDataType("i64vec3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 3, "Wrong amount of parameters! Expected 3, got " + std::to_string(params.size()) + "!");
return glm::i64vec3(static_cast<int64_t>(std::stoi(params[0])), static_cast<int64_t>(std::stoi(params[1])), static_cast<int64_t>(std::stoi(params[2])));
});
factory.addDataType("mat2x2", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 4 || params.size() == 1, "Wrong amount of parameters! Expected 1 or 4, got " + std::to_string(params.size()) + "!");
if(params.size() == 1)
FEA_ASSERT(params[0] == "I", "Only one argument given. Expected 'I' but got '" + params[0] + "'!");
if(params[0] == "I")
return glm::mat2x2();
else
return glm::mat2x2(std::stof(params[0]), std::stof(params[1]), std::stof(params[2]), std::stof(params[3]));
});
factory.addDataType("mat3x3", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 9 || params.size() == 1, "Wrong amount of parameters! Expected 1 or 9, got " + std::to_string(params.size()) + "!");
if(params.size() == 1)
FEA_ASSERT(params[0] == "I", "Only one argument given. Expected 'I' but got '" + params[0] + "'!");
if(params[0] == "I")
return glm::mat3x3();
else
return glm::mat3x3(std::stof(params[0]), std::stof(params[1]), std::stof(params[2]), std::stof(params[3]), std::stof(params[4]), std::stof(params[5]), std::stof(params[6]), std::stof(params[7]), std::stof(params[8]));
});
factory.addDataType("mat4x4", [] (const Parameters& params)
{
FEA_ASSERT(params.size() == 16 || params.size() == 1, "Wrong amount of parameters! Expected 1 or 16, got " + std::to_string(params.size()) + "!");
if(params.size() == 1)
FEA_ASSERT(params[0] == "I", "Only one argument given. Expected 'I' but got '" + params[0] + "'!");
if(params[0] == "I")
return glm::mat4x4();
else
return glm::mat4x4(std::stof(params[0]), std::stof(params[1]), std::stof(params[2]), std::stof(params[3]), std::stof(params[4]), std::stof(params[5]), std::stof(params[6]), std::stof(params[7]), std::stof(params[8]), std::stof(params[9]), std::stof(params[10]), std::stof(params[11]), std::stof(params[12]), std::stof(params[13]), std::stof(params[14]), std::stof(params[15]));
});
}
}