From ca92d8c90f7103db6d7cae4cef49b278d804b474 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 20 Dec 2017 20:55:05 +0100 Subject: Create shader using c++ code --- include/RenderBackend/OpenGL/ShaderVec.hpp | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 include/RenderBackend/OpenGL/ShaderVec.hpp (limited to 'include/RenderBackend/OpenGL/ShaderVec.hpp') diff --git a/include/RenderBackend/OpenGL/ShaderVec.hpp b/include/RenderBackend/OpenGL/ShaderVec.hpp new file mode 100644 index 0000000..10e628c --- /dev/null +++ b/include/RenderBackend/OpenGL/ShaderVec.hpp @@ -0,0 +1,81 @@ +#pragma once + +#include "../../types.hpp" +#include + +namespace amalgine +{ + class VertexShader; + class PixelShader; + + class ShaderInputVec2 + { + friend class VertexShader; + public: + const std::string& getName() const; + private: + ShaderInputVec2(VertexShader *_vertexShader, i32 _attributeIndex) : + vertexShader(_vertexShader), + attributeIndex(_attributeIndex) + { + + } + private: + VertexShader *vertexShader; + i32 attributeIndex; + }; + + class ShaderVec4 + { + public: + ShaderVec4(f32 x = 0.0f, f32 y = 0.0f, f32 z = 0.0f, f32 w = 0.0f) + { + result = "vec4("; + result += std::to_string(x); + result += ", "; + result += std::to_string(y); + result += ", "; + result += std::to_string(z); + result += ", "; + result += std::to_string(w); + result += ")"; + } + + ShaderVec4(const ShaderInputVec2 &vec2, f32 z = 0.0f, f32 w = 0.0f) + { + result = "vec4("; + result += vec2.getName(); + result += ", "; + result += std::to_string(z); + result += ", "; + result += std::to_string(w); + result += ")"; + } + + const std::string& getOutput() const + { + return result; + } + private: + std::string result; + }; + + class ShaderOutputVec4 + { + friend class PixelShader; + public: + const std::string& getName() const; + + void operator=(const ShaderVec4 &shaderVec4); + private: + ShaderOutputVec4(PixelShader *_pixelShader, i32 _attributeIndex) : + pixelShader(_pixelShader), + attributeIndex(_attributeIndex) + { + + } + private: + PixelShader *pixelShader; + i32 attributeIndex; + }; +} -- cgit v1.2.3