#pragma once #include #include "assets/dynamic_data_stores/dynamic_shader_source_store.hpp" #include "opengl/shader_program_lookup.hpp" #include "opengl/handles/shader_program_handle.hpp" template 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 find_or_compile_shader_programs( std::span required_capabilities, zgl::shader_program_lookup& shader_program_lookup ); // create metadata for all sources // get protected: private: std::unordered_map shader_capabilities; };