summaryrefslogtreecommitdiff
path: root/source/modules/asura-framework/scripts/graphics/shader.lua
blob: c4116194a7dff1a95f4bb784634bd61be1f776fe (plain)
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