#pragma once #include #include "assets/dynamic_data_stores/dynamic_shader_source_store.hpp" #include "opengl/shader_program_lookup.hpp" #include "opengl/handles/shader_handle.hpp" #include "opengl/handles/shader_program_handle.hpp" #include "../metadata/shader_source_metadata.hpp" #include "shading/shader_program_requirements.hpp" namespace zgl { class shader_program_compiler { public: // compile shader programs for given requirements // cache shader programs with their capabilities // store sstream for creating defines // register shader source code // store define types for these shaders as bitmap void register_shader_sources( const dynamic_shader_source_store& shader_sources ); void compile_shader_programs( const dynamic_shader_source_store& shader_sources, std::span requirements, std::vector& shader_handles ); // create metadata for all sources // get ś protected: private: std::vector shader_lookup; std::vector shader_program_lookup; }; }