11#ifndef AVARA3D_RENDER_BACKEND_OPENGL_GLSLPROGRAM_H
12#define AVARA3D_RENDER_BACKEND_OPENGL_GLSLPROGRAM_H
20#include "a3d/render/backend/ShaderType.h"
21#include "a3d/render/backend/opengl/GLTypes.h"
30 explicit GLSLProgram(
const std::string& name);
32 GLSLProgram(
const GLSLProgram&) =
delete;
33 GLSLProgram& operator=(
const GLSLProgram&) =
delete;
35 GLSLProgram(GLSLProgram&&) =
delete;
36 GLSLProgram& operator=(GLSLProgram&&) =
delete;
48 void bindAttributeLocation(
unsigned location,
const char* name);
50 void setUniform(
const char* name,
float x,
float y,
float z);
51 void setUniform(
const char* name,
const math::vec2& v);
52 void setUniform(
const char* name,
const math::vec3& v);
53 void setUniform(
const char* name,
const math::vec4& v);
54 void setUniform(
const char* name,
const math::mat3& m);
55 void setUniform(
const char* name,
const math::mat4& m);
56 void setUniform(
const char* name,
bool val);
57 void setUniform(
const char* name,
int val);
58 void setUniform(
const char* name,
unsigned val);
59 void setUniform(
const char* name,
float val);
63 void setUniformBlockBinding(
const char* blockName,
unsigned bindingPoint);
65 void bindTexture(
const char* name,
68 const unsigned& textureID,
71 unsigned getAttributeLocation(
const char* name)
const;
73 const std::string& name()
const;
75 bool isLinked()
const;
80 std::optional<std::string> shaderSource(
const std::string& name, ShaderType type);
82 bool compile(
const std::string& source, ShaderType type);
83 int getUniformLocation(
const char* name);
84 void glID(
unsigned glID);
85 void isLinked(
bool isLinked);
92 std::optional<std::string> _logString;
93 std::string _vertexShaderSource;
94 std::string _fragmentShaderSource;