Ember
A C++ 20 'game engine' built with SDL3 with wide platform support.
shader.h
Go to the documentation of this file.
1 #pragma once
2 #include "core/io/file_system.h"
3 
4 
8 struct UberShader {
9  bool use_outline = false;
10  bool use_shadow = false;
11  glm::vec4 outline_color = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
12  glm::vec4 shadow_color = glm::vec4(0.0f, 0.0f, 0.0f, 0.5f);
13  float outline_width = 1.0f;
14  glm::vec2 shadow_offset = glm::vec2(2.0f, 2.0f);
15 
16  static UberShader none() {
17  return UberShader{};
18  }
19 
20  bool is_none() const {
21  return !use_outline && !use_shadow;
22  }
23 
24  static UberShader outline_only(const glm::vec4& color = glm::vec4(0,0,0,1), float width = 1.0f) {
25  UberShader effects;
26  effects.use_outline = true;
27  effects.outline_color = color;
28  effects.outline_width = width;
29  return effects;
30  }
31 
32  static UberShader shadow_only(const glm::vec4& color = glm::vec4(0,0,0,0.5f),
33  const glm::vec2& offset = glm::vec2(2,2)) {
34  UberShader effects;
35  effects.use_shadow = true;
36  effects.shadow_color = color;
37  effects.shadow_offset = offset;
38  return effects;
39  }
40 
41  static UberShader both(const glm::vec4& outline_col = glm::vec4(0,0,0,1),
42  const glm::vec4& shadow_col = glm::vec4(0,0,0,0.5f),
43  float width = 1.0f, const glm::vec2& offset = glm::vec2(2,2)) {
44  UberShader effects;
45  effects.use_outline = true;
46  effects.use_shadow = true;
47  effects.outline_color = outline_col;
48  effects.shadow_color = shadow_col;
49  effects.outline_width = width;
50  effects.shadow_offset = offset;
51  return effects;
52  }
53 
54 };
55 
67 class Shader {
68 public:
69  Shader() = default;
70 
71  virtual ~Shader() = default;
72 
73  virtual void bind() const = 0;
74 
75  virtual void set_value(const std::string& name, float value) = 0;
76 
77  virtual void set_value(const std::string& name, int value) = 0;
78 
79  virtual void set_value(const std::string& name, const int* values, Uint32 count) = 0;
80 
81  virtual void set_value(const std::string& name, const float* values, Uint32 count) = 0;
82 
83  virtual void set_value(const std::string& name, glm::mat4 value, Uint32 count) = 0;
84 
85  virtual void set_value(const std::string& name, glm::vec2 value, Uint32 count) = 0;
86 
87  virtual void set_value(const std::string& name, glm::vec3 value, Uint32 count) = 0;
88 
89  virtual void set_value(const std::string& name, glm::vec4 value, Uint32 count) = 0;
90 
91  virtual void set_value(const std::string& name, unsigned int value) = 0;
92 
93 
94  virtual void destroy() = 0;
95 
96  virtual unsigned int get_id() const = 0;
97 
98  virtual bool is_valid() const = 0;
99 
100 
101 protected:
102  unsigned int id = 0;
103 
104  std::unordered_map<std::string, unsigned int> _uniforms;
105 };
Shader Abstract class.
Definition: shader.h:67
virtual unsigned int get_id() const =0
virtual void set_value(const std::string &name, glm::vec2 value, Uint32 count)=0
virtual void set_value(const std::string &name, const int *values, Uint32 count)=0
virtual void set_value(const std::string &name, const float *values, Uint32 count)=0
virtual void set_value(const std::string &name, int value)=0
virtual ~Shader()=default
std::unordered_map< std::string, unsigned int > _uniforms
Definition: shader.h:104
virtual void bind() const =0
virtual void set_value(const std::string &name, glm::mat4 value, Uint32 count)=0
virtual void set_value(const std::string &name, glm::vec4 value, Uint32 count)=0
virtual void set_value(const std::string &name, unsigned int value)=0
virtual bool is_valid() const =0
virtual void destroy()=0
virtual void set_value(const std::string &name, glm::vec3 value, Uint32 count)=0
Shader()=default
virtual void set_value(const std::string &name, float value)=0
UberShader shader effects for rendering texts and sprites.
Definition: shader.h:8
bool use_outline
Definition: shader.h:9
bool use_shadow
Definition: shader.h:10
glm::vec4 shadow_color
Definition: shader.h:12
glm::vec2 shadow_offset
Definition: shader.h:14
static UberShader shadow_only(const glm::vec4 &color=glm::vec4(0, 0, 0, 0.5f), const glm::vec2 &offset=glm::vec2(2, 2))
Definition: shader.h:32
static UberShader both(const glm::vec4 &outline_col=glm::vec4(0, 0, 0, 1), const glm::vec4 &shadow_col=glm::vec4(0, 0, 0, 0.5f), float width=1.0f, const glm::vec2 &offset=glm::vec2(2, 2))
Definition: shader.h:41
float outline_width
Definition: shader.h:13
static UberShader none()
Definition: shader.h:16
static UberShader outline_only(const glm::vec4 &color=glm::vec4(0, 0, 0, 1), float width=1.0f)
Definition: shader.h:24
glm::vec4 outline_color
Definition: shader.h:11
bool is_none() const
Definition: shader.h:20