summary refs log tree commit diff
path: root/src/GFX/Resources.hpp
blob: 4206e337278fab671fabd85719da1facffcde2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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);
};
}