aboutsummaryrefslogtreecommitdiff
path: root/include/RenderBackend/OpenGL/ShaderProgram.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/RenderBackend/OpenGL/ShaderProgram.hpp')
-rw-r--r--include/RenderBackend/OpenGL/ShaderProgram.hpp43
1 files changed, 13 insertions, 30 deletions
diff --git a/include/RenderBackend/OpenGL/ShaderProgram.hpp b/include/RenderBackend/OpenGL/ShaderProgram.hpp
index c8740f8..ca96d0c 100644
--- a/include/RenderBackend/OpenGL/ShaderProgram.hpp
+++ b/include/RenderBackend/OpenGL/ShaderProgram.hpp
@@ -3,44 +3,27 @@
#include "../../Result.hpp"
#include "../../types.hpp"
#include "../../utils.hpp"
-#include "ShaderVec.hpp"
+#include "../../Vec.hpp"
+#include "DeviceMemory.hpp"
#include <vector>
-#include <stdexcept>
+#include <memory>
+
+namespace amalgine {
+ class Shader;
-namespace amalgine
-{
- class CompiledVertexShader;
- class CompiledPixelShader;
-
- class ShaderProgramUsedBeforeBuilt : public std::runtime_error
- {
- public:
- // TODO: Add name to ShaderProgram so we know which shader has issue when
- // an exception is thrown?
- ShaderProgramUsedBeforeBuilt();
- };
-
- class ShaderProgramNonExistingGlobalVariable : public std::runtime_error
- {
- public:
- ShaderProgramNonExistingGlobalVariable(const char *variableName);
- };
-
class ShaderProgram
{
DISABLE_COPY(ShaderProgram)
public:
- ShaderProgram();
~ShaderProgram();
-
- bool setVertexShader(CompiledVertexShader *vertexShader);
- bool setPixelShader(CompiledPixelShader *pixelShader);
-
- Result<bool> build();
+ static Result<std::unique_ptr<ShaderProgram>> build(const std::vector<Shader*> &shaders);
+ int set_uniform(const char *name, const vec3f &value);
+ int set_vertex_input(const char *name, const DeviceMemory &data);
+
void use();
- ShaderProgramGlobalVec3 getGlobalVec3(const char *name);
private:
- u32 shaderProgramId;
- bool built;
+ ShaderProgram(u32 shader_program_id);
+ private:
+ u32 program_id;
};
}