#pragma once #include "GL/glew.h" #include "opengl/shader_program_variable.hpp" #include "opengl/shader_program_variable.hpp" #include "util/uix.hpp" #include namespace zgl { struct shader_program_handle { using attribute_support_type = ztu::u32; using uniform_support_type = ztu::u32; inline void bind() const; static void unbind(); template void set_uniform(const T& value) const; [[nodiscard]] attribute_support_type check_attribute_support(std::span attributes) const; [[nodiscard]] uniform_support_type check_uniform_support(std::span uniforms) const; GLuint program_id{ 0 }; }; } #define INCLUDE_GL_SHADER_PROGRAM_INSTANCE_IMPLEMENTATION #include "opengl/handles/shader_program_handle.ipp" #undef INCLUDE_GL_SHADER_PROGRAM_INSTANCE_IMPLEMENTATION