diff options
Diffstat (limited to 'include/RenderBackend/OpenGL/ShaderProgram.hpp')
-rw-r--r-- | include/RenderBackend/OpenGL/ShaderProgram.hpp | 43 |
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; }; } |