aboutsummaryrefslogtreecommitdiff
path: root/include/RenderBackend
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2017-12-21 22:52:12 +0100
committerdec05eba <dec05eba@protonmail.com>2021-11-18 15:21:48 +0100
commitbfd21732b35a3856b1f72c826816c2857710fcb3 (patch)
tree4a3f19551c744db3e339a64ac1afa2ebe1ec015f /include/RenderBackend
parentca92d8c90f7103db6d7cae4cef49b278d804b474 (diff)
Added shader program
Diffstat (limited to 'include/RenderBackend')
-rw-r--r--include/RenderBackend/OpenGL/PixelShader.hpp14
-rw-r--r--include/RenderBackend/OpenGL/ShaderProgram.hpp34
-rw-r--r--include/RenderBackend/OpenGL/ShaderVec.hpp8
-rw-r--r--include/RenderBackend/OpenGL/VertexShader.hpp2
4 files changed, 40 insertions, 18 deletions
diff --git a/include/RenderBackend/OpenGL/PixelShader.hpp b/include/RenderBackend/OpenGL/PixelShader.hpp
index 3d33155..b869a8f 100644
--- a/include/RenderBackend/OpenGL/PixelShader.hpp
+++ b/include/RenderBackend/OpenGL/PixelShader.hpp
@@ -45,27 +45,15 @@ namespace amalgine
public:
PixelShader();
- const std::string& getOutputAttributeName(i32 attributeIndex);
- ShaderOutputVec4 defineOutputVec4(const std::string &name);
void defineMain(PixelShaderMainFunc mainFunc);
void assign(const ShaderOutputVec4 &lhsVariable, const ShaderVec4 &rhsVariable);
- std::string build();
+ std::string build() const;
private:
void writeHeader(const std::string &code);
void writeBody(const std::string &code);
-
- /*
- * Throws PixelShaderTooManyAttributes if too many pixel attributes are defined for the platform.
- * Throws PixelShaderAttributeAlreadyDefined if a pixel attribute with the same name has already been defined.
- */
- i32 defineOutputVariable(const std::string &variableName, const char *typeName);
private:
std::string header;
std::string body;
- int locationCounter;
- i32 maxPixelAttribs; // Could make this static
- std::unordered_map<std::string, i32> pixelAttributes;
- std::vector<std::string> pixelAttributeNames;
bool mainFuncDefined;
};
}
diff --git a/include/RenderBackend/OpenGL/ShaderProgram.hpp b/include/RenderBackend/OpenGL/ShaderProgram.hpp
new file mode 100644
index 0000000..efeae5b
--- /dev/null
+++ b/include/RenderBackend/OpenGL/ShaderProgram.hpp
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "VertexShader.hpp"
+#include "PixelShader.hpp"
+#include "../../Result.hpp"
+#include "../../types.hpp"
+#include <vector>
+
+namespace amalgine
+{
+ class ShaderProgram
+ {
+ public:
+ ShaderProgram();
+
+ const std::string& getOutputAttributeName(i32 attributeIndex);
+ ShaderOutputVec4 defineOutputVec4(const std::string &name);
+ //Result<std::string> addVertexShader(const VertexShader &vertexShader);
+ //Result<std::string> addPixelShader(const PixelShader &pixelShader);
+ //void build();
+ private:
+ /*
+ * Throws PixelShaderTooManyAttributes if too many pixel attributes are defined for the platform.
+ * Throws PixelShaderAttributeAlreadyDefined if a pixel attribute with the same name has already been defined.
+ */
+ i32 defineOutputVariable(const std::string &variableName, const char *typeName);
+ private:
+ int locationCounter;
+ i32 maxPixelAttribs; // Could make this static
+ std::unordered_map<std::string, i32> pixelAttributes;
+ std::vector<std::string> pixelAttributeNames;
+ std::vector<u32> shaderIds;
+ };
+}
diff --git a/include/RenderBackend/OpenGL/ShaderVec.hpp b/include/RenderBackend/OpenGL/ShaderVec.hpp
index 10e628c..0c0a88a 100644
--- a/include/RenderBackend/OpenGL/ShaderVec.hpp
+++ b/include/RenderBackend/OpenGL/ShaderVec.hpp
@@ -6,7 +6,7 @@
namespace amalgine
{
class VertexShader;
- class PixelShader;
+ class ShaderProgram;
class ShaderInputVec2
{
@@ -62,20 +62,20 @@ namespace amalgine
class ShaderOutputVec4
{
- friend class PixelShader;
+ friend class ShaderProgram;
public:
const std::string& getName() const;
void operator=(const ShaderVec4 &shaderVec4);
private:
- ShaderOutputVec4(PixelShader *_pixelShader, i32 _attributeIndex) :
+ ShaderOutputVec4(ShaderProgram *_pixelShader, i32 _attributeIndex) :
pixelShader(_pixelShader),
attributeIndex(_attributeIndex)
{
}
private:
- PixelShader *pixelShader;
+ ShaderProgram *shaderProgram;
i32 attributeIndex;
};
}
diff --git a/include/RenderBackend/OpenGL/VertexShader.hpp b/include/RenderBackend/OpenGL/VertexShader.hpp
index ec8be22..3239be2 100644
--- a/include/RenderBackend/OpenGL/VertexShader.hpp
+++ b/include/RenderBackend/OpenGL/VertexShader.hpp
@@ -48,7 +48,7 @@ namespace amalgine
const std::string& getInputAttributeName(i32 attributeIndex);
ShaderInputVec2 defineInputVec2(const std::string &name);
void defineMain(VertexShaderMainFunc mainFunc);
- std::string build();
+ std::string build() const;
private:
void writeHeader(const std::string &code);
void writeBody(const std::string &code);