#pragma once #include "opengl/shader_program_variable.hpp" #include #include "util/enum_bitfield_operators.hpp" namespace shader_program::uniforms::mesh { 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 = zgl::shader_program_variable({ GL_FLOAT_MAT4, 0 }, "mvp_matrix"); constexpr inline auto model_matrix = zgl::shader_program_variable({ GL_FLOAT_MAT4, 1 }, "model_matrix"); constexpr inline auto point_size = zgl::shader_program_variable({ GL_FLOAT, 2 }, "point_size"); constexpr inline auto tex = zgl::shader_program_variable({ GL_SAMPLER_2D, 3 }, "tex"); constexpr inline auto color = zgl::shader_program_variable({ GL_FLOAT_VEC4, 4 }, "color"); constexpr inline auto view_pos = zgl::shader_program_variable({ GL_FLOAT_VEC3, 5 }, "view_pos"); constexpr inline auto point_light_direction = zgl::shader_program_variable({ GL_FLOAT_VEC3, 6 }, "point_light_direction"); constexpr inline auto point_light_color = zgl::shader_program_variable({ GL_FLOAT_VEC3, 7 }, "point_light_color"); constexpr inline auto ambient_light_color = zgl::shader_program_variable({ GL_FLOAT_VEC3, 8 }, "ambient_light_color"); constexpr inline auto ambient_filter = zgl::shader_program_variable({ GL_FLOAT_VEC3, 9 }, "ambient_filter"); constexpr inline auto diffuse_filter = zgl::shader_program_variable({ GL_FLOAT_VEC3, 10 }, "diffuse_filter"); constexpr inline auto specular_filter = zgl::shader_program_variable({ GL_FLOAT_VEC3, 11 }, "specular_filter"); constexpr inline auto shininess = zgl::shader_program_variable({ GL_FLOAT, 12 }, "shininess"); 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(shader_program::uniforms::mesh::flags)