-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevolver.mm
105 lines (105 loc) · 3.63 KB
/
evolver.mm
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<map version="0.7.1">
<node TEXT="Evolver">
<node TEXT="Use cases" POSITION="left">
<node TEXT="Particle system" FOLDED="true">
<node TEXT="Does strategy track particle state?"/>
</node>
<node TEXT="Checkpoint" FOLDED="true">
<node TEXT="Good question..."/>
</node>
<node TEXT="Ordinary object with multiple materials" FOLDED="true">
<node TEXT="Composed of multiple chunks of geometry / materials"/>
</node>
<node TEXT="Subgraph that gets rendered
to texture (Billboard?)"/>
</node>
<node TEXT="Assumptions" POSITION="right">
<node TEXT="A particular rendering strategy can
be very tied to hardware" STYLE="fork">
<edge WIDTH="thin"/>
<font NAME="SansSerif" SIZE="12"/>
</node>
</node>
<node TEXT="Goals" POSITION="right">
<node TEXT="Shader / texture sorting
ought to penetrate objects"/>
<node TEXT="Some way of controlling all object
parameters via animator(?)"/>
</node>
<node TEXT="Concepts" POSITION="right">
<node TEXT="resource">
<node TEXT="Things allocated on the device"/>
<node TEXT="Not "parameters""/>
<node TEXT="When do they get allocated / deallocated?">
<node TEXT="When object is required / present"/>
</node>
</node>
<node TEXT="effect">
<node TEXT="Collection of strategies"/>
<node TEXT="Not a type in itself, just a name"/>
<node TEXT="Standardizes the set of resources required"/>
</node>
<node TEXT="strategy"/>
<node TEXT="state_set">
<node TEXT="Exist within device"/>
<node TEXT="Must be created to set states in device"/>
<node TEXT="Provides operator< to sort in the best way for device"/>
<node TEXT="Once created can make state switching more efficient"/>
<node TEXT="Where is state_set stored between strategy::render calls?">
<node TEXT="strategy"/>
<node TEXT="resource_set"/>
<node TEXT="stored in primitive?"/>
<node TEXT="alternatively stored in strategy instance"/>
</node>
</node>
<node TEXT="primitive">
<node TEXT="strategy"/>
<node TEXT="resources"/>
<node TEXT="state set"/>
</node>
<node TEXT="primitive set">
<node TEXT="The closest we get to a scene graph"/>
<node TEXT="Maintains everything that is to be rendered"/>
<node TEXT="Defers rendering to enable sorting"/>
<node TEXT="Does strategy handle primitive insertion?">
<edge WIDTH="thin"/>
<font NAME="SansSerif" SIZE="12"/>
</node>
<node TEXT="How do we manage primitive set membership?">
<node TEXT=""stale" flag"/>
</node>
</node>
<node TEXT="Vertex program"/>
</node>
<node TEXT="Problems" POSITION="left">
<node TEXT="Multi-device rendering">
<node TEXT="Doesn't occur in practice..."/>
<node TEXT="Should be possible with current design"/>
</node>
<node TEXT="How are non-resource parameters communicated to strategy?"/>
<node TEXT="How to disconnect vertex program
management from device?">
<node TEXT="Separate facility loads source code">
<node TEXT="Possibly user-provided"/>
</node>
<node TEXT="Make each syntax / version a feature?">
<node TEXT="Alternative:
shader provides all variants">
<node TEXT="Probably not practical
- too many versions"/>
</node>
<node TEXT="Shader provides some variants">
<node TEXT="Strategy requests appropriate variant"/>
</node>
</node>
<node TEXT="Device may need to know how what state the VP holds
(for optimization purposes)"/>
</node>
<node TEXT="One interface per vertex program?">
<node TEXT="would make it easier to set arguments"/>
<node TEXT="Must wrap state_set calls">
<node TEXT="Unless the handling is within the device"/>
</node>
</node>
</node>
<node TEXT="Scene graph?" POSITION="left">
<node TEXT="Out of scope"/>
<node TEXT="We only need primitive set"/>
<node TEXT="What of folded billboards?"/>
<node TEXT="Occlusion culling?"/>
<node TEXT="Where does octree fit in?"/>
</node>
</node>
</map>