summary refs log tree commit diff
path: root/src/GFX/Resources.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GFX/Resources.hpp')
-rw-r--r--src/GFX/Resources.hpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/GFX/Resources.hpp b/src/GFX/Resources.hpp
new file mode 100644
index 0000000..4206e33
--- /dev/null
+++ b/src/GFX/Resources.hpp
@@ -0,0 +1,38 @@
+#pragma once
+
+#include <array>
+#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<ProgramMetadata, ProgramCount> 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<Shading::Program, ProgramCount> m_programs = {};
+
+    static Shading::Program create_program(ProgramMetadata const& metadata);
+};
+}