#pragma once #include "opengl/shading/uniform_types/uniform.hpp" #include #include "util/enum_bitfield_operators.hpp" namespace zgl::shading::mesh_uniforms { enum class flags : std::uint16_t { none = 0, mvp_matrix = 1 << 0, model_matrix = 1 << 1, point_size = 1 << 2, color = 1 << 3, tex = 1 << 4, view_pos = 1 << 5, point_light_direction = 1 << 6, point_light_color = 1 << 7, ambient_light_color = 1 << 8, ambient_filter = 1 << 9, diffuse_filter = 1 << 10, specular_filter = 1 << 11, shininess = 1 << 12 }; constexpr inline auto mvp_matrix = uniform{ GL_FLOAT_MAT4, 0 }; constexpr inline auto model_matrix = uniform{ GL_FLOAT_MAT4, 1 }; constexpr inline auto point_size = uniform{ GL_FLOAT, 2 }; constexpr inline auto tex = uniform{ GL_SAMPLER_2D, 3 }; constexpr inline auto color = uniform{ GL_FLOAT_VEC4, 4 }; constexpr inline auto view_pos = uniform{ GL_FLOAT_VEC3, 5 }; constexpr inline auto point_light_direction = uniform{ GL_FLOAT_VEC3, 6 }; constexpr inline auto point_light_color = uniform{ GL_FLOAT_VEC3, 7 }; constexpr inline auto ambient_light_color = uniform{ GL_FLOAT_VEC3, 8 }; constexpr inline auto ambient_filter = uniform{ GL_FLOAT_VEC3, 9 }; constexpr inline auto diffuse_filter = uniform{ GL_FLOAT_VEC3, 10 }; constexpr inline auto specular_filter = uniform{ GL_FLOAT_VEC3, 11 }; constexpr inline auto shininess = uniform{ GL_FLOAT, 12 }; constexpr inline auto all = std::array{ mvp_matrix, model_matrix, point_size, color, tex, view_pos, point_light_direction, point_light_color, ambient_light_color, ambient_filter, diffuse_filter, specular_filter, shininess }; constexpr inline auto names = std::array{ "mvp_matrix", "model_matrix", "point_size", "color", "tex", "view_pos", "point_light_direction", "point_light_color", "ambient_light_color", "ambient_filter", "diffuse_filter", "specular_filter", "shininess" }; } DEFINE_ENUM_BITFIELD_OPERATORS(zgl::shading::mesh_uniforms::flags)