#pragma once #include "shader_manager.hpp" #include "assets/data_stores/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 { public: using metadata_type = shader_program_metadata; using data_type = shader_program_data; using handle_type = shader_program_handle; using entry_type = std::pair; using entry_view_type = std::pair; void process(const assets::data_stores& stores); void get_handles( const assets::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; }; }