#pragma once #include #include "Shading/Program.hpp" namespace MC::GFX { class Resources { public: enum class Program: USize { Terrain, Clouds, ImageViewer, BlockOutline, }; constexpr static USize ProgramCount = 4; void initialize(); Shading::Program const& program(Program id) const; private: struct ProgramMetadata { Program id; Char const* vertex; Char const* fragment; }; static inline std::array const m_program_metadata = {{ {Program::Terrain, Assets::Shaders::terrain::vertex, Assets::Shaders::terrain::fragment}, {Program::Clouds, Assets::Shaders::clouds::vertex, Assets::Shaders::clouds::fragment}, {Program::ImageViewer, Assets::Shaders::image_viewer::vertex, Assets::Shaders::image_viewer::fragment}, {Program::BlockOutline, Assets::Shaders::block_outline::vertex, Assets::Shaders::block_outline::fragment}, }}; Bool m_initialized = false; std::array m_programs = {}; static Shading::Program create_program(ProgramMetadata const& metadata); }; }