void attach_shader(Shader &shader);
void attach_shader_owned(Shader *shader);
void detach_shader(Shader &shader);
void attach_shader(Shader &shader);
void attach_shader_owned(Shader *shader);
void detach_shader(Shader &shader);
static bool uniform_location_compare(const UniformInfo *, const UniformInfo *);
public:
bool is_linked() const { return linked; }
std::string get_info_log() const;
static bool uniform_location_compare(const UniformInfo *, const UniformInfo *);
public:
bool is_linked() const { return linked; }
std::string get_info_log() const;
const UniformBlockMap &get_uniform_blocks() const { return uniform_blocks; }
const UniformBlockInfo &get_uniform_block_info(const std::string &) const;
const UniformMap &get_uniforms() const { return uniforms; }
const UniformBlockMap &get_uniform_blocks() const { return uniform_blocks; }
const UniformBlockInfo &get_uniform_block_info(const std::string &) const;
const UniformMap &get_uniforms() const { return uniforms; }