include/glshader_glm.hpp
7d100c97
 #ifndef GLSHADER_GLM_HPP_
 #define GLSHADER_GLM_HPP_
 
 
 #include <GL/glew.h>
 
 #include <glm/glm.hpp>
 #include <glm/gtc/type_ptr.hpp>
 
 #include <glshader.hpp>
 
 
 #define GLSHADER_UNIFORM_GLM_N_(N, GLM_TYPE, SUFFIX) \
     GLSHADER_UNIFORM( \
         glm::GLM_TYPE##N, \
         glUniform##N##SUFFIX##v( \
             location, 1, glm::value_ptr(value) \
         ); \
     )
 
 #define GLSHADER_UNIFORM_GLM_N_BOOL_(N) \
     GLSHADER_UNIFORM( \
         glm::bvec##N, \
         GLint int_value[N]; \
         for (auto i = 0; i < N; ++i) \
             int_value[i] = value[i]; \
         glUniform##N##iv( \
             location, 1, &int_value[0] \
         ); \
     )
 
 #define GLSHADER_UNIFORM_GLM_MATRIX_N_(N) \
     GLSHADER_UNIFORM( \
         glm::mat##N, \
         glUniformMatrix##N##fv( \
             location, 1, GL_FALSE, glm::value_ptr(value) \
         ); \
     )
 
 #define GLSHADER_UNIFORM_GLM_MATRIX_N_M_(N, M) \
     GLSHADER_UNIFORM( \
         glm::mat##N##x##M, \
         glUniformMatrix##N##x##M##fv( \
             location, 1, GL_FALSE, glm::value_ptr(value) \
         ); \
     )
 
 GLSHADER_UNIFORM_GLM_N_BOOL_(2)
 GLSHADER_UNIFORM_GLM_N_BOOL_(3)
 GLSHADER_UNIFORM_GLM_N_BOOL_(4)
 GLSHADER_UNIFORM_GLM_N_(2, ivec, i)
 GLSHADER_UNIFORM_GLM_N_(3, ivec, i)
 GLSHADER_UNIFORM_GLM_N_(4, ivec, i)
 GLSHADER_UNIFORM_GLM_N_(2, uvec, ui)
 GLSHADER_UNIFORM_GLM_N_(3, uvec, ui)
 GLSHADER_UNIFORM_GLM_N_(4, uvec, ui)
 GLSHADER_UNIFORM_GLM_N_(2, vec, f)
 GLSHADER_UNIFORM_GLM_N_(3, vec, f)
 GLSHADER_UNIFORM_GLM_N_(4, vec, f)
 
 GLSHADER_UNIFORM_GLM_MATRIX_N_(2)
 GLSHADER_UNIFORM_GLM_MATRIX_N_(3)
 GLSHADER_UNIFORM_GLM_MATRIX_N_(4)
 
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(2, 3)
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(2, 4)
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(3, 2)
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(3, 4)
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(4, 2)
 GLSHADER_UNIFORM_GLM_MATRIX_N_M_(4, 3)
 
 
 #endif // GLSHADER_GLM_HPP_