summaryrefslogtreecommitdiff
path: root/Source/Asura.Engine/Graphics/Shader.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-02-25 09:07:37 +0800
committerchai <chaifix@163.com>2019-02-25 09:07:37 +0800
commit684f71790401727cc45f4dad1822ddae46305072 (patch)
tree75733807914fa799521d1d6a8a450982fdef9124 /Source/Asura.Engine/Graphics/Shader.h
parentc97d8eb7f0900cb6895acb2e5bdce1044931b91a (diff)
+widgets
Diffstat (limited to 'Source/Asura.Engine/Graphics/Shader.h')
-rw-r--r--Source/Asura.Engine/Graphics/Shader.h90
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);
};