2
3
4
5
6
7
8
11#ifndef _GLSL_STRUCT_MAT_TRAITS_HPP_
12 #define _GLSL_STRUCT_MAT_TRAITS_HPP_
14 #include <glslstruct/config.hpp>
17_GLSL_STRUCT_ERROR(
"This is only available for c++17 and greater!");
20 #include <glslstruct/type/data/mat_data.hpp>
23 #pragma region DEFAULT_TRAITS
26
27
28
29 template<
class T, glm::length_t C, glm::length_t R, glm::qualifier Q>
30 struct mat_traits<glm::mat<C, R, T, Q> > {
41 static mat_data get_data(
const glm::mat<C, R, T, Q>& value) {
return mat_data(value); }
44 static glm::mat<C, R, T, Q> get_value(
const mat_data& data) {
45 const std::vector<vec_data>& vecs = data.data();
47 glm::mat<C, R, T, Q> value;
48 for (size_t i = 0; i < vecs.size() && i < C; ++i) {
49 value[i] = vecs[i].get<
typename glm::mat<C, R, T, Q>::col_type>();
56
57
58
59 template<
class T, size_t C, size_t R>
60 struct mat_traits<mstd::mat<C, R, T> > {
71 static mat_data get_data(
const mstd::mat<C, R, T>& value) {
return mat_data(value); }
74 static mstd::mat<C, R, T> get_value(
const mat_data& data) {
75 const std::vector<vec_data>& vecs = data.data();
77 mstd::mat<C, R, T> value;
78 for (size_t i = 0; i < vecs.size() && i < C; ++i) {
79 value[i] = vecs[i].get<
typename mstd::mat<C, R, T>::column_type>();
87 #pragma region FUNCTIONS
90 template<utils::glsl_mat T>
92 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
95 return mat_traits<T>::get_columns();
100 template<utils::glsl_mat T>
102 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
105 return mat_traits<T>::get_rows();
110 template<utils::glsl_mat T>
112 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
115 return mat_traits<T>::get_value_type();
120 template<utils::glsl_mat T>
122 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
124 static inline mat_data get_mat_data(
const T& value) {
125 return mat_traits<T>::get_data(value);
130 template<utils::glsl_mat T>
132 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
134 static inline T get_mat_value(
const mat_data& data) {
135 return mat_traits<T>::get_value(data);
139 std::string mat_to_string(ValueType valueType, size_t columns, size_t rows);
143 template<utils::glsl_mat T>
145 template<
class T, std::enable_if_t<utils::is_glsl_mat_v<T>,
bool> =
true>
147 static inline std::string mat_to_string() {
148 return mat_to_string(get_mat_value_type<T>(), get_mat_columns<T>(), get_mat_rows<T>());
#define _GLSL_STRUCT_INLINE17
Definition config.hpp:215
#define _GLSL_STRUCT_HAS_CXX20
check if compiler has c++ version greater or equal to c++20 and if user enabled c++20 features using ...
Definition config.hpp:142
#define _GLSL_STRUCT_HAS_CXX17
check if compiler has c++ version greater or equal to c++17
Definition config.hpp:130
#define _GLSL_STRUCT_CONSTEXPR17
constexpr for c++17 and higher
Definition config.hpp:196