11       const std::vector<VertexAttribute>& attributes,
 
   16     void bind() 
const override;
 
   18     void unbind() 
const override;
 
   23     static GLenum to_gl_type(
DataType type);
 
   33     void bind() 
const override;
 
   35     void upload(
const void* data, 
size_t size) 
override;
 
   37     size_t size() 
const override;
 
   45     size_t _buffer_size        = 0;
 
   46     GLenum _target             = GL_ARRAY_BUFFER;
 
   53     std::vector<Uint32> color_attachments;
 
   54     uint32_t depth_attachment = 0;
 
   67     void resize(
unsigned int width, 
unsigned int height) 
override;
 
   87     OpenglShader(
const std::string& vertex, 
const std::string& fragment);
 
   91     void set_value(
const std::string& name, 
float value) 
override;
 
   93     void set_value(
const std::string& name, 
int value) 
override;
 
   95     void set_value(
const std::string& name, Uint32 value) 
override;
 
   97     void set_value(
const std::string& name, glm::mat4 value, Uint32 count) 
override;
 
   99     void set_value(
const std::string& name, 
const int* value, Uint32 count) 
override;
 
  101     void set_value(
const std::string& name, 
const float* value, Uint32 count) 
override;
 
  103     void set_value(
const std::string& name, glm::vec2 value, Uint32 count) 
override;
 
  105     void set_value(
const std::string& name, glm::vec3 value, Uint32 count) 
override;
 
  107     void set_value(
const std::string& name, glm::vec4 value, Uint32 count) 
override;
 
  109     void set_value(
const std::string& name, 
const glm::mat4* values, Uint32 count) 
override;
 
  113     unsigned int get_id() 
const override;
 
  118     Uint32 get_uniform_location(
const std::string& name);
 
  120     Uint32 compile_shader(Uint32 type, 
const char* source);
 
  124 template <
typename T>
 
  126     unsigned int location = get_uniform_location(name);
 
  127     if (location == -1) {
 
  128         printf(
"Shader variable not found: %s\n", name.c_str());
 
  132     if constexpr (std::is_same_v<T, float>) {
 
  134         glGetUniformfv(
id, location, &value);
 
  136     } 
else if constexpr (std::is_same_v<T, int>) {
 
  138         glGetUniformiv(
id, location, &value);
 
  140     } 
else if constexpr (std::is_same_v<T, glm::vec2>) {
 
  142         glGetUniformfv(
id, location, data);
 
  143         return glm::vec2(data[0], data[1]);
 
  144     } 
else if constexpr (std::is_same_v<T, glm::vec3>) {
 
  146         glGetUniformfv(
id, location, data);
 
  147         return glm::vec3(data[0], data[1], data[2]);
 
  148     } 
else if constexpr (std::is_same_v<T, glm::vec4>) {
 
  150         glGetUniformfv(
id, location, data);
 
  151         return glm::vec4(data[0], data[1], data[2], data[3]);
 
  152     } 
else if constexpr (std::is_same_v<T, glm::mat4>) {
 
  154         glGetUniformfv(
id, location, data);
 
  155         return glm::make_mat4(data);
 
  157         printf(
"Unsupported type: %s\n", 
typeid(T).name());
 
GpuBufferType
GpuBuffer Abstract class.
Definition: base_struct.h:29
DataType
Definition: base_struct.h:60
Definition: base_struct.h:113
GpuBuffer Abstract class.
Definition: base_struct.h:46
Definition: base_struct.h:76
Definition: ogl_struct.h:50
void unbind() override
Definition: ogl_struct.cpp:345
void cleanup()
Definition: ogl_struct.cpp:367
Uint32 get_color_attachment_id(size_t index=0) const override
Definition: ogl_struct.cpp:355
void bind() override
Definition: ogl_struct.cpp:340
void invalidate() override
Definition: ogl_struct.cpp:263
~OpenGLFramebuffer() override
Definition: ogl_struct.cpp:258
void resize(unsigned int width, unsigned int height) override
Definition: ogl_struct.cpp:349
const FramebufferSpecification & get_specification() const override
Definition: ogl_struct.cpp:363
Uint32 get_depth_attachment_id() const override
Definition: ogl_struct.cpp:359
OpenGLFramebuffer(const FramebufferSpecification &spec)
Definition: ogl_struct.cpp:253
Definition: ogl_struct.h:26
OpenglGpuBuffer(GpuBufferType type)
Definition: ogl_struct.cpp:201
size_t size() const override
Definition: ogl_struct.cpp:245
~OpenglGpuBuffer() override
Definition: ogl_struct.cpp:231
void upload(const void *data, size_t size) override
Definition: ogl_struct.cpp:239
GpuBufferType type() const override
Definition: ogl_struct.cpp:249
void bind() const override
Definition: ogl_struct.cpp:235
Definition: ogl_struct.h:5
void bind() const override
Definition: ogl_struct.cpp:178
OpenglGpuVertexLayout(const GpuBuffer *vertex_buffer, const GpuBuffer *index_buffer, const std::vector< VertexAttribute > &attributes, uint32_t stride)
Definition: ogl_struct.cpp:146
~OpenglGpuVertexLayout() override
Definition: ogl_struct.cpp:173
void unbind() const override
Definition: ogl_struct.cpp:182
Definition: ogl_struct.h:79
~OpenglShader() override
Definition: ogl_struct.cpp:378
void activate() const override
Definition: ogl_struct.cpp:137
void destroy() override
Definition: ogl_struct.cpp:141
T get_value(const std::string &name)
Definition: ogl_struct.h:125
void set_value(const std::string &name, float value) override
Definition: ogl_struct.cpp:387
bool is_valid() const override
Definition: ogl_struct.cpp:131
unsigned int get_id() const override
Definition: ogl_struct.cpp:382
Shader Abstract class.
Definition: base_struct.h:160
Definition: base_struct.h:105