1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
|