diff options
author | chai <chaifix@163.com> | 2019-02-25 09:07:37 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-02-25 09:07:37 +0800 |
commit | 684f71790401727cc45f4dad1822ddae46305072 (patch) | |
tree | 75733807914fa799521d1d6a8a450982fdef9124 /Source/Asura.Engine/Graphics/Shader.h | |
parent | c97d8eb7f0900cb6895acb2e5bdce1044931b91a (diff) |
+widgets
Diffstat (limited to 'Source/Asura.Engine/Graphics/Shader.h')
-rw-r--r-- | Source/Asura.Engine/Graphics/Shader.h | 90 |
1 files changed, 68 insertions, 22 deletions
diff --git a/Source/Asura.Engine/Graphics/Shader.h b/Source/Asura.Engine/Graphics/Shader.h index e22fc66..02d9f46 100644 --- a/Source/Asura.Engine/Graphics/Shader.h +++ b/Source/Asura.Engine/Graphics/Shader.h @@ -1,62 +1,108 @@ #ifndef __ASURA_ENGINE_SHADER_H__ #define __ASURA_ENGINE_SHADER_H__ -#include "luax/luax.h" +#include <map> +#include <string> -#include "Map.h" +#include "luax/luax.h" #include "StringMap.hpp" #include "Object.h" #include "Color.h" #include "Manager.hpp" +#include "Texture.h" +#include "Math/Vector2.h" +#include "Math/Vector3.h" +#include "Math/Vector4.h" +#include "GL.h" namespace AsuraEngine { namespace Graphics { - class Material; - /// - /// һshaderһڲʼ乲ijShaderuniformsͶݣֻuniforms location + /// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩuniformsuseɫķ༭ÿ + /// shaderͨshaderҵuniforms¶frameworkmaterialá /// - class Shader + class Shader : virtual public Object { public: Shader(); ~Shader(); + + /// + /// ӴshaderʱȼǷϴλuniforms location map + /// + void Load(const std::string& vertexShader, const std::string& fragmentShader); - private: + /// + /// shaderΪ + /// + void Use(); - friend class Material; + /// + /// shaderΪǻ + /// + void UnUse(); /// - /// shaderuniformsIDӳ䡣 + /// һϵuniformsķ /// - static StringMap<int> sUniformsID; + void SetUniformFloat(const std::string& uniform, float value); + void SetUniformTexture(const std::string& uniform, const Texture& texture); + void SetUniformVector2(const std::string& uniform, const Math::Vector2& vec2); + void SetUniformVector3(const std::string& uniform, const Math::Vector3& vec3); + void SetUniformVector4(const std::string& uniform, const Math::Vector4& vec4); /// - /// uniformID + /// Ѿ֪uniform location£ֵ /// - static int GetUniformID(const String& name); + void SetUniformFloat(uint loc, float value); + void SetUniformTexture(uint loc, const Texture& texture); + void SetUniformVector2(uint loc, const Math::Vector2& vec2); + void SetUniformVector3(uint loc, const Math::Vector3& vec3); + void SetUniformVector4(uint loc, const Math::Vector4& vec4); +/* /// - /// ñ - /// vec2 Asura_Time xֵΪ뵱ǰʼʱ䣬yֵΪһ֡ʱ - /// vec2 Asura_RenderTargetSize RTĴСΪλ - /// Texture Asura_MainTexture + /// עܷframeworkʵ֣㣬shadereditorҲõ + /// ջunifrom location±shaderµuniform location /// - void SetBuiltInUniforms(); + void ClearUniformLocation(); +*/ + /// + /// program id + /// + GLint GetNativeHandle(); + + uint GetUniformLocation(const std::string& uniform); + + private: /// - /// ӳuniforms IDlocation + /// ñ + /// vec2 Asura_Time xֵΪ뵱ǰʼʱ䣬yֵΪһ֡ʱ + /// vec2 Asura_RenderTargetSize RTĴСΪλ + /// Texture Asura_MainTexture /// - Map<int, int> mLocations; + void SetBuiltInUniforms(); - }; + // OpenGLɫʶprogram id + GLuint mPID; + //// Uniformlocations + //StringMap<uint> mUniformLocation; - class ShaderManager final : public Manager - { + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + + LUAX_DECL_FACTORY(SimShader); + + LUAX_DECL_METHOD(l_SetBuiltInUniforms); + LUAX_DECL_METHOD(l_SetUniformFloat); + LUAX_DECL_METHOD(l_SetUniformTexture); + LUAX_DECL_METHOD(l_SetUniformVector2); + LUAX_DECL_METHOD(l_SetUniformVector3); + LUAX_DECL_METHOD(l_SetUniformVector4); }; |