#pragma once #include "shader_manager.hpp" #include "assets/dynamic_data_stores/dynamic_shader_source_store.hpp" #include "opengl/data/shader_program_data.hpp" #include "opengl/shading/requirements/shader_program_requirements.hpp" #include "opengl/metadata/shader_program_metadata.hpp" namespace zgl { class shader_program_manager { using shader_program_lookup_entry_type = std::pair< shader_program_metadata, shader_program_data >; public: void process( const dynamic_shader_source_store& shader_sources ); void get_handles( const dynamic_shader_source_store& shader_sources, std::span requirements, std::span metadata, std::span shader_programs ); protected: std::optional> find_shader_program( const shading::shader_program_requirements& requirements ); bool link_shader_program( const shader_handle_set& shaders ); shader_manager m_shader_manager; std::vector m_shader_program_lookup; private: std::vector m_shader_requirements_buffer; std::vector m_shader_metadata_buffer; std::vector shader_set_buffer; }; }