30 template <
typename Base = i_shader_stage>
49 template <
typename Base = i_shader_program>
67 typedef std::map<neolib::string, shader_t> shader_index;
75 void*
handle()
const override;
89 const i_shader&
next_in_stage(
const i_shader& aPreviousShader)
const override;
92 bool dirty()
const override;
97 bool active()
const override;
106 mutable std::optional<void*> iHandle;
108 shader_index iShaderIndex;
109 mutable bool iNeedFullUniformUpdate;
virtual void update_uniforms(const i_rendering_context &aContext)=0
virtual void update_uniform_storage()=0
virtual void update_uniform_locations()=0
bool have_stage(shader_type aStage) const
const i_fragment_shader & fragment_shader() const override
const i_string & name() const override
const stage_t & stage(shader_type aStage) const override
i_shader & add_shader(const neolib::i_ref_ptr< i_shader > &aShader) override
bool need_full_uniform_update() const
void prepare_uniforms(const i_rendering_context &aContext) override
void set_clean() override
neolib::vector< stage_t > stages_t
const i_shader & first_in_stage(shader_type aStage) const override
bool is_first_in_stage(const i_shader &aShader) const override
void * handle() const override
bool is_last_in_stage(const i_shader &aShader) const override
const i_vertex_shader & vertex_shader() const override
bool uniforms_changed() const override
bool created() const override
bool supports(vertex_buffer_type aBufferType) const override
void activate(const i_rendering_context &aContext) override
const stages_t & stages() const override
const i_shader & last_in_stage(shader_type aStage) const override
const i_shader & next_in_stage(const i_shader &aPreviousShader) const override
neolib::ref_ptr< i_shader > shader_t
void instantiate(const i_rendering_context &aContext) override
neolib::ref_ptr< i_shader_stage > stage_t
bool dirty() const override
bool active() const override
neolib::ref_ptr< i_shader > shader_t
neolib::vector< shader_t > shaders_t
shader_type type() const override
shaders_t const & shaders() const override