CG_Labs  2020.0
ShaderProgramManager.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <glad/glad.h>
4 #include <GLFW/glfw3.h>
5 
6 #include <map>
7 #include <string>
8 #include <utility>
9 #include <vector>
10 
11 #include <cstdint>
12 
13 enum class ShaderType : std::uint32_t {
14  vertex = GL_VERTEX_SHADER,
15  tess_eval = GL_TESS_EVALUATION_SHADER,
16  tess_ctrl = GL_TESS_CONTROL_SHADER,
17  geometry = GL_GEOMETRY_SHADER,
18  fragment = GL_FRAGMENT_SHADER,
19  compute = GL_COMPUTE_SHADER
20 };
21 
23 {
24 public:
25  using ProgramData = std::map<ShaderType, std::string>;
26  struct SelectedProgram {
27  bool was_selection_changed = false;
28  GLuint const* program = nullptr;
29  char const* name = nullptr;
30  };
32  void CreateAndRegisterProgram(char const* const program_name, ProgramData const& program_data, GLuint& program);
33  void CreateAndRegisterComputeProgram(char const* const program_name, std::string const& filename, GLuint& program);
34  bool ReloadAllPrograms();
35  SelectedProgram SelectProgram(std::string const& label, std::int32_t& program_index);
36 
37 private:
38  void ProcessProgram(ProgramData const& program_data, GLuint& program);
39  using ProgramEntry = std::pair<GLuint&, ProgramData>;
40  std::vector<ProgramEntry> program_entries;
41  std::vector<char const*> program_names;
42 };
ShaderType::compute
@ compute
ShaderProgramManager::ProgramEntry
std::pair< GLuint &, ProgramData > ProgramEntry
Definition: ShaderProgramManager.hpp:39
ShaderProgramManager::ProgramData
std::map< ShaderType, std::string > ProgramData
Definition: ShaderProgramManager.hpp:25
ShaderProgramManager::ProcessProgram
void ProcessProgram(ProgramData const &program_data, GLuint &program)
Definition: ShaderProgramManager.cpp:81
ShaderProgramManager::program_names
std::vector< char const * > program_names
Definition: ShaderProgramManager.hpp:41
ShaderType::vertex
@ vertex
ShaderType::tess_ctrl
@ tess_ctrl
ShaderProgramManager::program_entries
std::vector< ProgramEntry > program_entries
Definition: ShaderProgramManager.hpp:40
ShaderProgramManager::~ShaderProgramManager
~ShaderProgramManager()
Definition: ShaderProgramManager.cpp:13
ShaderType::geometry
@ geometry
ShaderProgramManager::CreateAndRegisterComputeProgram
void CreateAndRegisterComputeProgram(char const *const program_name, std::string const &filename, GLuint &program)
Definition: ShaderProgramManager.cpp:40
ShaderProgramManager::SelectedProgram
Definition: ShaderProgramManager.hpp:26
ShaderProgramManager::SelectedProgram::was_selection_changed
bool was_selection_changed
Definition: ShaderProgramManager.hpp:27
ShaderType::tess_eval
@ tess_eval
ShaderProgramManager
Definition: ShaderProgramManager.hpp:23
ShaderType::fragment
@ fragment
ShaderProgramManager::SelectProgram
SelectedProgram SelectProgram(std::string const &label, std::int32_t &program_index)
Definition: ShaderProgramManager.cpp:67
ShaderProgramManager::CreateAndRegisterProgram
void CreateAndRegisterProgram(char const *const program_name, ProgramData const &program_data, GLuint &program)
Definition: ShaderProgramManager.cpp:23
ShaderProgramManager::SelectedProgram::program
GLuint const * program
Definition: ShaderProgramManager.hpp:28
ShaderProgramManager::ReloadAllPrograms
bool ReloadAllPrograms()
Definition: ShaderProgramManager.cpp:53
ShaderProgramManager::SelectedProgram::name
char const * name
Definition: ShaderProgramManager.hpp:29
ShaderType
ShaderType
Definition: ShaderProgramManager.hpp:13