summaryrefslogtreecommitdiff
path: root/Source/modules/asura-framework/scripts/graphics/shader.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Source/modules/asura-framework/scripts/graphics/shader.lua')
-rw-r--r--Source/modules/asura-framework/scripts/graphics/shader.lua75
1 files changed, 75 insertions, 0 deletions
diff --git a/Source/modules/asura-framework/scripts/graphics/shader.lua b/Source/modules/asura-framework/scripts/graphics/shader.lua
new file mode 100644
index 0000000..c411619
--- /dev/null
+++ b/Source/modules/asura-framework/scripts/graphics/shader.lua
@@ -0,0 +1,75 @@
+AsuraEngine.Shader = AsuraEngine.Asset.Extend("Shader")
+
+local helper = AsuraEngine.Framework.Require("graphics/shaderHelper")
+
+local Shader = AsuraEngine.Shader
+
+function Shader.Ctor(self)
+ self.simShader = nil
+ self.uniforms = {} -- 映射uniform name到location
+end
+
+--编译shader
+function Shader.Load(self, vert, frag)
+ self.uniforms = {}
+ if self.simShader == nil then
+ self.simShader = AsuraEngine.SimShader.New(vert, frag)
+ else
+ self.simShader:Load(vert, frag)
+ end
+ if self.simShader == nil then
+ --shader编译错误
+ return
+ end
+ --在编译的时候就获得所有的uniform和loc
+ local uniforms = helper.GetUniforms(vert, frag)
+ if uniforms == nil then
+ return
+ end
+ for _, uniform in uniforms do
+ self.uniforms[uniform] = self.simShader:GetUniformLocation(uniform)
+ end
+end
+
+function Shader.GetUniformLocation(self, name)
+ if self.uniforms then
+ local id = self.uniforms[name]
+ return id
+ end
+ return 0
+end
+
+function Shader.SendVec2(self, name, vec2)
+ local id = self:GetUniformLocation(name)
+ self.simShader:SendUniformVector2(name, vec2)
+end
+
+function Shader.SendVec3(self, name, vec3)
+
+end
+
+function Shader.SendVec4(self, name, vec4)
+
+end
+
+function Shader.SendTexture(self, name, tex)
+
+end
+
+function Shader.SendFloat(self, name, number)
+
+end
+
+function Shader.SendInteger(self, name, integer)
+
+end
+
+function Shader.SendColor(self, name, color)
+
+end
+
+function Shader.SendMat44(self, name, mat44)
+
+end
+
+return Shader \ No newline at end of file