#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, asset(), asset() }, { Program::Clouds, asset(), asset() }, { Program::ImageViewer, asset(), asset() }, { Program::BlockOutline, asset(), asset() }, }}; Bool m_initialized = false; std::array m_programs = {}; static Shading::Program create_program(ProgramMetadata const& metadata); }; }