/
GameShader.py
78 lines (69 loc) · 2.81 KB
/
GameShader.py
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
76
77
78
#!/usr/bin/env python
#@section License
#
#Copyright (C) 2013 ssss
#This file is a part of the GameEditor.
#
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
from GameResource import *
class GameShader(GameResource):
defaults={"id":-1,"name":"noname","vertex":"","fragment":"","type":"GLSL","precompile":False}
def __init__(self, gameFile, id):
GameResource.__init__(self, gameFile, id)
self.setMember("name","shader_"+str(id))
def ReadEgm(self, entry, z):
stream=z.open(entry+".ey", "r")
y=YamlParser()
r=y.parseStream(stream)
self.setMember("name", os.path.split(entry)[1])
self.setMember("vertex", z.open(os.path.split(entry)[0]+"/"+r.getMstr("vertex"), "r").read().decode())
self.setMember("fragment", z.open(os.path.split(entry)[0]+"/"+r.getMstr("fragment"), "r").read().decode())
self.setMember("type", r.getMstr("type"))
self.setMember("precompile", r.getMbool("precompile"))
def ReadGmx(self, gmkfile, gmxdir, name):
self.setMember("name", os.path.splitext(name)[0])
shader=open(os.path.join(gmxdir, name),"r").read()
vertex,fragment=shader.split("//######################_==_YOYO_SHADER_MARKER_==_######################@~//")
self.setMember("vertex", vertex)
self.setMember("fragment", fragment)
def WriteGmxShader(self, gmxPath):
vertex=self.getMember("vertex")
fragment=self.getMember("fragment")
shader=vertex+"//######################_==_YOYO_SHADER_MARKER_==_######################@~//"+fragment
writeFile=open(gmxPath,"w")
writeFile.write(shader)#.decode())
writeFile.close()
def WriteGGG(self):
stri="@shader "+self.getMember("name")+" {\n"
for key in ["name","id","type","precompile"]:
if not self.ifDefault(key):
stri+="\t"+key+"="+str(self.getMember(key))+"\n"
stri+="\t@vertex {\n"
for x in self.getMember("vertex").split("\n"):
stri+="\t\t"+x+"\n"
stri+="\t}\t@fragment {\n"
for x in self.getMember("fragment").split("\n"):
stri+="\t\t"+x+"\n"
stri+="\t}\n"
stri+="}\n"
return stri
def WriteESShader(self):
obj=ESShader()
obj.name=self.getMember("name").encode()
obj.id=self.getMember("id")
obj.vertex=self.getMember("vertex").encode()
obj.fragment=self.getMember("fragment").encode()
obj.type=self.getMember("type").encode()
obj.precompile=self.getMember("precompile")
return obj