Repository navigation
Expand file tree
/
Copy pathsoftwaredesign.html
More file actions
226 lines (216 loc) · 9.21 KB
/
Copy pathsoftwaredesign.html
File metadata and controls
226 lines (216 loc) · 9.21 KB
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpenGL Insights</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<style type="text/css">
hr {
width: 630px;
margin-left: 0;
}
td.sectionName a,
td.sectionName a:active,
td.sectionName a:visited {
text-decoration: none;
color: #5482AB;
}
td.sectionName a:hover {
text-decoration: underline;
}
td.sectionName span {
font-family: serif;
}
</style>
</head>
<body>
<div class="page">
<a href="index.html"><img class="title" src="http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/images/strip.png" width="639" height="140" alt="OpenGL Insights" /></a>
<table summary="" border="0" width="630">
<tr align="center" class="sitemap">
<td><a href="cover.html">Cover</a></td>
<td><a href="toc.html">Table of Contents</a></td>
<td><a href="pipeline.html">Pipeline Map</a></td>
<td><a href="tips.html">Tips</a></td>
<td><a href="contributors.html">Contributors</a></td>
<td><a href="reviews.html">Reviews</a></td>
<!--
<td><a href="figures.html">Figures</a></td>
<td><a href="bibliography.html">Bibliography</a></td>
-->
<td><a href="bibtex.html">BibTeX</a></td>
<td><a href="errata.html">Errata</a></td>
<td><a href="https://github.com/OpenGLInsights/OpenGLInsightsCode">Code</a></td>
<td><a href="http://blog.openglinsights.com/">Blog</a></td>
<td><a href="http://www.amazon.com/gp/product/1439893764/ref=as_li_tf_il?ie=UTF8&camp=1789&creative=9325&creativeASIN=1439893764&linkCode=as2&tag=opeins-20">Buy</a></td>
</tr>
</table>
<h1>VII Software Design</h1>
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td colspan="2">
<p>
Developers work with OpenGL at many levels of the software stack. Some developers create OpenGL implementations by writing drivers or, as we will see, using another graphics API; other developers create middleware or engines that simplify the use of OpenGL and raise the level of abstraction; and perhaps the majority of OpenGL developers create actual applications, whether by directly calling OpenGL or by using OpenGL-based engines. In this section, we look at software design at each layer of this stack. We consider implementing OpenGL ES 2.0, engines and applications built on WebGL, making legacy OpenGL code modern, and building cross-platform OpenGL applications.
</p>
<p>
ANGLE, or the Almost Native Graphics Layer Engine, provides an OpenGL ES 2.0 implementation using Direct3D 9. It is used as the default WebGL backend for Chrome and Firefox on Windows. Implementing ANGLE is not nearly as simple as converting OpenGL calls to Direct3D calls; the differences in capabilities of the APIs need to be taken into account. In Chapter 39, "The ANGLE Project: Implementing OpenGL ES 2.0 on Direct3D," Daniel Koch and Nicolas Capens discuss the implementation challenges in ANGLE, provide performance results, and suggest recommended practices.
</p>
<p>
Given how low-level WebGL is compared to other web APIs, it was clear from its start that there would be demand for higher-level 3D engines built on WebGL. Here, we look at two such engines. SceneJS is an open-source 3D engine, based on a scene graph optimized for rendering large numbers of individually pickable and articulated objects. In Chapter 40, "SceneJS: A WebGL-Based Scene Graph Engine," Lindsay Kay presents SceneJS' architecture and how it makes efficient use of JavaScript and WebGL.
</p>
<p>
SpiderGL is another 3D graphics library that uses WebGL. Instead of providing higher-level constructs like a scene graph, SpiderGL provides utilities, data structures, and algorithms to simplify WebGL development but still allows the use of other WebGL code in the same application. In Chapter 41, "Features and Design Choices in SpiderGL," Marco Di Benedetto, Fabio Ganovelli, and Francesco Banterle discuss some design and implementation decisions in SpiderGL including its model representation and allowing seamless interoperability with naive WebGL calls.
</p>
<p>
WebGL is enabling a whole new class of applications. In Chapter 42, "Multimodal Interactive Simulations on the Web," Tansel Halic, Woojin Ahn, and Suvranu De present a framework for visualization, simulation, and hardware integration for multimodal interactive simulations using WebGL. Think practicing surgical procedures using a web browser!
</p>
<p>
Maintaining legacy and modern OpenGL code in the same code base can prove challenging. Jesse Barker and Alexandros Frantzis share their experiences in Chapter 43, "A Subset Approach to Using OpenGL and OpenGL ES." They suggest ways to move to a single modern code base written against both OpenGL and OpenGL ES.
</p>
<p>
In "The Build Syndrome," the final chapter of this section and of the book, Jochem van der Spek and Daniel Dekkers discuss in detail building cross-platform OpenGL applications with C++/Objective-C and CMake.
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="TheANGLEProjectImplementingOpenGLES20onDirect3D">
39. <em>The ANGLE Project: Implementing OpenGL ES 2.0 on Direct3D</em></a>
<br />
<a href="contributors.html#DanielKoch">Daniel Koch</a> and <a href="contributors.html#NicolasCapens">Nicolas Capens</a>
</td>
<td width="15%" align="right" class="tipsAPI">WebGL<br />OpenGL ES</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="http://code.google.com/p/angleproject/">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="SceneJSAWebGLBasedSceneGraphEngine">
40. <em>SceneJS: A WebGL-Based Scene Graph Engine</em></a>
<br />
<a href="contributors.html#LindsayKay">Lindsay Kay</a>
</td>
<td width="15%" align="right" class="tipsAPI">WebGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/xeolabs/scenejs">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="FeaturesAndDesignChoicesinSpiderGL">
41. <em>Features And Design Choices in SpiderGL</em></a>
<br />
<a href="contributors.html#MarcoDiBenedetto">Marco Di Benedetto</a>, <a href="contributors.html#FabioGanovelli">Fabio Ganovelli</a>, and <a href="contributors.html#FrancescoBanterle">Francesco Banterle</a>
</td>
<td width="15%" align="right" class="tipsAPI">WebGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/dibenedetto/SpiderGL">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="MultimodalInteractiveSimulationsontheWeb">
42. <em>Multimodal Interactive Simulations on the Web</em></a>
<br />
<a href="contributors.html#TanselHalic">Tansel Halic</a>, <a href="contributors.html#WoojinAhn">Woojin Ahn</a>, and <a href="contributors.html#SuvranuDe">Suvranu De</a>
</td>
<td width="15%" align="right" class="tipsAPI">WebGL</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="ASubsetApproachtoUsingOpenGLandOpenGLES">
43. <em>A Subset Approach to Using OpenGL and OpenGL ES</em></a>
<br />
<a href="contributors.html#JesseBarker">Jesse Barker</a> and <a href="contributors.html#AlexandrosFrantzis">Alexandros Frantzis</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL<br />OpenGL ES</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
<p>
<a href="https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2043%20A%20Subset%20Approach%20to%20Using%20OpenGL%20and%20OpenGL%20ES">code</a>
</p>
</td>
</tr>
</table>
<hr />
<table summary="" border="0" width="639">
<tr class="spaceUnder">
<td>
<a name="TheBuildSyndrome">
44. <em>The Build Syndrome</em></a>
<br />
<a href="contributors.html#JochemvanderSpek">Jochem van der Spek</a> and <a href="contributors.html#DanielDekkers">Daniel Dekkers</a>
</td>
<td width="15%" align="right" class="tipsAPI">OpenGL<br />OpenGL ES</td>
</tr>
<tr class="spaceUnder">
<td colspan="2">
<p>
...
</p>
</td>
</tr>
</table>
<hr />
<h1>Sections</h1>
<ul>
<li><a href="discovering.html">I Discovering</a></li>
<li><a href="renderingtechniques.html">II Rendering Techniques</a></li>
<li><a href="bendingthepipeline.html">III Bending the Pipeline</a></li>
<li><a href="performance.html">IV Performance</a></li>
<li><a href="transfers.html">V Transfers</a></li>
<li><a href="debuggingandprofiling.html">VI Debugging and Profiling</a></li>
<li>VII Software Design</li>
</ul>
</div>
</body>
</html>