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 new_projection(self, name, projection): |
18
|
|
|
pid = self.pids.gen_id() |
19
|
|
|
|
20
|
|
|
idgen.set_uid_list(self.projNames, pid, name) |
21
|
|
|
idgen.set_uid_list(self.projections, pid, projection) |
22
|
|
|
idgen.set_uid_list(self.progPerProj, pid, []) |
23
|
|
|
|
24
|
|
|
def set_projection(self, name, projection): |
25
|
|
|
pid = self.projNames.index(name) |
26
|
|
|
sids = self.progPerProj[pid] |
27
|
|
|
|
28
|
|
|
self.projections[pid] = projection |
29
|
|
|
|
30
|
|
|
for i in sids: |
31
|
|
|
program = self.programs[i-1] |
32
|
|
|
program.use() |
33
|
|
|
uniformId = self.uniformIds[i-1] |
34
|
|
|
program.set_uniform_matrix(uniformId, projection) |
35
|
|
|
|
36
|
|
|
def create_uniforms(self, name): |
37
|
|
|
pid = self.projNames.index(name) |
38
|
|
|
sids = self.progPerProj[pid] |
39
|
|
|
projection = self.projections[pid] |
40
|
|
|
|
41
|
|
|
for i in sids: |
42
|
|
|
program = self.programs[i-1] |
43
|
|
|
program.use() |
44
|
|
|
|
45
|
|
|
uniformId = program.new_uniform(name.encode('utf-8')) |
46
|
|
|
program.set_uniform_matrix(uniformId, projection) |
47
|
|
|
self.uniformIds[i-1] = uniformId |
48
|
|
|
|
49
|
|
|
|
50
|
|
|
def register_shader(self, projName, program): |
51
|
|
|
pid = self.projNames.index(projName) |
52
|
|
|
sid = self.sids.gen_id() |
53
|
|
|
print (sid) |
54
|
|
|
|
55
|
|
|
self.progPerProj[pid].append(sid) |
56
|
|
|
|
57
|
|
|
idgen.set_uid_list(self.programs, sid, program) |
58
|
|
|
idgen.set_uid_list(self.uniformIds, sid, []) |
59
|
|
|
|
60
|
|
|
self.create_uniforms(projName) |
61
|
|
|
|