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