|
1
|
|
|
from ed2d import idgen |
|
2
|
|
|
|
|
3
|
|
|
class View(object): |
|
4
|
|
|
|
|
5
|
|
|
def __init__(self): |
|
6
|
|
|
|
|
7
|
|
|
self.sids = idgen.IdGenerator() |
|
8
|
|
|
self.programs = [] |
|
9
|
|
|
self.uniforms = [] |
|
10
|
|
|
self.uniformIds = [] |
|
11
|
|
|
|
|
12
|
|
|
self.pids = idgen.IdGenerator() |
|
13
|
|
|
self.projections = [] |
|
14
|
|
|
self.projNames = [] |
|
15
|
|
|
self.progPerProj = [] |
|
16
|
|
|
|
|
17
|
|
|
def if_projection(self, name): |
|
18
|
|
|
return name in self.projNames |
|
19
|
|
|
|
|
20
|
|
|
def new_projection(self, name, projection): |
|
21
|
|
|
pid = self.pids.gen_id() |
|
22
|
|
|
|
|
23
|
|
|
idgen.set_uid_list(self.projNames, pid, name) |
|
24
|
|
|
idgen.set_uid_list(self.projections, pid, projection) |
|
25
|
|
|
idgen.set_uid_list(self.progPerProj, pid, []) |
|
26
|
|
|
|
|
27
|
|
|
def set_projection(self, name, projection): |
|
28
|
|
|
pid = self.projNames.index(name) |
|
29
|
|
|
sids = self.progPerProj[pid] |
|
30
|
|
|
|
|
31
|
|
|
self.projections[pid] = projection |
|
32
|
|
|
|
|
33
|
|
|
for i in sids: |
|
34
|
|
|
program = self.programs[i-1] |
|
35
|
|
|
program.use() |
|
36
|
|
|
uniformId = self.uniformIds[i-1] |
|
37
|
|
|
program.set_uniform_matrix(uniformId, projection) |
|
38
|
|
|
|
|
39
|
|
|
def create_uniforms(self, name): |
|
40
|
|
|
pid = self.projNames.index(name) |
|
41
|
|
|
sids = self.progPerProj[pid] |
|
42
|
|
|
projection = self.projections[pid] |
|
43
|
|
|
|
|
44
|
|
|
for i in sids: |
|
45
|
|
|
program = self.programs[i-1] |
|
46
|
|
|
program.use() |
|
47
|
|
|
|
|
48
|
|
|
uniformId = program.new_uniform(name.encode('utf-8')) |
|
49
|
|
|
program.set_uniform_matrix(uniformId, projection) |
|
50
|
|
|
self.uniformIds[i-1] = uniformId |
|
51
|
|
|
|
|
52
|
|
|
|
|
53
|
|
|
def register_shader(self, projName, program): |
|
54
|
|
|
pid = self.projNames.index(projName) |
|
55
|
|
|
sid = self.sids.gen_id() |
|
56
|
|
|
print (sid) |
|
57
|
|
|
|
|
58
|
|
|
self.progPerProj[pid].append(sid) |
|
59
|
|
|
|
|
60
|
|
|
idgen.set_uid_list(self.programs, sid, program) |
|
61
|
|
|
idgen.set_uid_list(self.uniformIds, sid, []) |
|
62
|
|
|
|
|
63
|
|
|
self.create_uniforms(projName) |
|
64
|
|
|
|