#include <cstddef> #include <glm/glm.hpp> #include <glbase.hpp> #include <gltraits.hpp> template< typename T, typename Value, std::size_t offset, typename... Members > void vertex_setup( GLTraits::Members<T, GLTraits::Member<Value, offset>, Members...>, GLint location = 0 ) { GLTraits::Value<Value>::vertex_attrib_pointer(location, offset, sizeof(T)); vertex_setup( GLTraits::Members<T, Members...>{}, location + GLTraits::Value<Value>::columns ); } template<typename T> void vertex_setup(GLTraits::Members<T>, GLint) {} int main() { struct Vertex { glm::vec3 position; glm::vec2 tex_coord; glm::mat3 tbn; glm::ivec4 bone_indices; glm::vec4 bone_weights; GLubyte flags; GLdouble unaligned; }; vertex_setup(GLTraits::members<Vertex>()); }