#pragma once #include #include #include #include #include "assets/data_stores.hpp" #include "util/string_lookup.hpp" #include "opengl/metadata/shader_source_metadata.hpp" #include "opengl/shading/requirements/shader_requirements.hpp" #include "opengl/metadata/preprocessed_shader_source_metadata.hpp" #include "assets/data_stores/shader_source_store.hpp" #include "opengl/shading/shader_source_set.hpp" namespace zgl { class shader_source_manager { public: using store_type = assets::shader_source_store; using store_id_type = store_type::id_type; using metadata_type = shader_source_metadata; using data_type = char*; using handle_type = const char*; using entry_type = std::pair; using entry_view_type = std::pair; void process(const store_type& shader_sources); void fetch( const assets::shader_source_store& shader_sources, std::span requirements, std::span metadata, std::vector& shader_strings ); protected: static void get_define_strings( assets::model_geometry::types geometry_type, assets::shader_components::flags components, assets::shader_components::flags& component_count, std::vector& defines ); std::vector m_shader_source_lookup; }; }