2
* Vertex position data describing the old Silicon Graphics logo
4
* (c) Copyright 1993, Silicon Graphics, Inc.
5
* Copyright � 2012 Linaro Limited
7
* This file is part of the glmark2 OpenGL (ES) 2.0 benchmark.
9
* glmark2 is free software: you can redistribute it and/or modify it under the
10
* terms of the GNU General Public License as published by the Free Software
11
* Foundation, either version 3 of the License, or (at your option) any later
14
* glmark2 is distributed in the hope that it will be useful, but WITHOUT ANY
15
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
19
* You should have received a copy of the GNU General Public License along with
20
* glmark2. If not, see <http://www.gnu.org/licenses/>.
27
#include "shader-source.h"
31
using LibMatrix::vec3;
32
using LibMatrix::uvec3;
33
using LibMatrix::vec4;
34
using LibMatrix::Stack4;
35
using LibMatrix::mat4;
37
const unsigned int SGILogo::textureResolution_(32);
38
const string SGILogo::modelviewName_("modelview");
39
const string SGILogo::projectionName_("projection");
40
const string SGILogo::lightPositionName_("light0Position");
41
const string SGILogo::logoColorName_("logoColor");
42
const string SGILogo::vertexAttribName_("vertex");
43
const string SGILogo::normalAttribName_("normal");
44
const string SGILogo::normalMatrixName_("normalMatrix");
46
SGILogo::SGILogo(void) :
47
normalNormalIndex_(0),
48
normalVertexIndex_(0),
50
shadowVertexIndex_(0),
53
drawStyle_(LOGO_NORMAL)
55
// Single cylinder data...
56
singleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
57
singleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 5.000000));
58
singleCylinderVertices_.push_back(vec3(0.707107, 0.707107, 0.000000));
59
singleCylinderVertices_.push_back(vec3(0.707107, 0.707107, 5.000000));
60
singleCylinderVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
61
singleCylinderVertices_.push_back(vec3(0.000000, 1.000000, 5.000000));
62
singleCylinderVertices_.push_back(vec3(-0.707107, 0.707107, 0.000000));
63
singleCylinderVertices_.push_back(vec3(-0.707107, 0.707107, 5.000000));
64
singleCylinderVertices_.push_back(vec3(-1.000000, 0.000000, 0.000000));
65
singleCylinderVertices_.push_back(vec3(-1.000000, 0.000000, 5.000000));
66
singleCylinderVertices_.push_back(vec3(-0.707107, -0.707107, 0.000000));
67
singleCylinderVertices_.push_back(vec3(-0.707107, -0.707107, 5.000000));
68
singleCylinderVertices_.push_back(vec3(0.000000, -1.000000, 0.000000));
69
singleCylinderVertices_.push_back(vec3(0.000000, -1.000000, 5.000000));
70
singleCylinderVertices_.push_back(vec3(0.707107, -0.707107, 0.000000));
71
singleCylinderVertices_.push_back(vec3(0.707107, -0.707107, 5.000000));
72
singleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
73
singleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 5.000000));
75
singleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
76
singleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
77
singleCylinderNormals_.push_back(vec3(0.707107, 0.707107, 0.000000));
78
singleCylinderNormals_.push_back(vec3(0.707107, 0.707107, 0.000000));
79
singleCylinderNormals_.push_back(vec3(0.000000, 1.000000, 0.000000));
80
singleCylinderNormals_.push_back(vec3(0.000000, 1.000000, 0.000000));
81
singleCylinderNormals_.push_back(vec3(-0.707107, 0.707107, 0.000000));
82
singleCylinderNormals_.push_back(vec3(-0.707107, 0.707107, 0.000000));
83
singleCylinderNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
84
singleCylinderNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
85
singleCylinderNormals_.push_back(vec3(-0.707107, -0.707107, 0.000000));
86
singleCylinderNormals_.push_back(vec3(-0.707107, -0.707107, 0.000000));
87
singleCylinderNormals_.push_back(vec3(0.000000, -1.000000, 0.000000));
88
singleCylinderNormals_.push_back(vec3(0.000000, -1.000000, 0.000000));
89
singleCylinderNormals_.push_back(vec3(0.707107, -0.707107, 0.000000));
90
singleCylinderNormals_.push_back(vec3(0.707107, -0.707107, 0.000000));
91
singleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
92
singleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
94
// Double cylinder data...
95
doubleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
96
doubleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 7.000000));
97
doubleCylinderVertices_.push_back(vec3(0.707107, 0.707107, 0.000000));
98
doubleCylinderVertices_.push_back(vec3(0.707107, 0.707107, 7.000000));
99
doubleCylinderVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
100
doubleCylinderVertices_.push_back(vec3(0.000000, 1.000000, 7.000000));
101
doubleCylinderVertices_.push_back(vec3(-0.707107, 0.707107, 0.000000));
102
doubleCylinderVertices_.push_back(vec3(-0.707107, 0.707107, 7.000000));
103
doubleCylinderVertices_.push_back(vec3(-1.000000, 0.000000, 0.000000));
104
doubleCylinderVertices_.push_back(vec3(-1.000000, 0.000000, 7.000000));
105
doubleCylinderVertices_.push_back(vec3(-0.707107, -0.707107, 0.000000));
106
doubleCylinderVertices_.push_back(vec3(-0.707107, -0.707107, 7.000000));
107
doubleCylinderVertices_.push_back(vec3(0.000000, -1.000000, 0.000000));
108
doubleCylinderVertices_.push_back(vec3(0.000000, -1.000000, 7.000000));
109
doubleCylinderVertices_.push_back(vec3(0.707107, -0.707107, 0.000000));
110
doubleCylinderVertices_.push_back(vec3(0.707107, -0.707107, 7.000000));
111
doubleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
112
doubleCylinderVertices_.push_back(vec3(1.000000, 0.000000, 7.000000));
114
doubleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
115
doubleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
116
doubleCylinderNormals_.push_back(vec3(0.707107, 0.707107, 0.000000));
117
doubleCylinderNormals_.push_back(vec3(0.707107, 0.707107, 0.000000));
118
doubleCylinderNormals_.push_back(vec3(0.000000, 1.000000, 0.000000));
119
doubleCylinderNormals_.push_back(vec3(0.000000, 1.000000, 0.000000));
120
doubleCylinderNormals_.push_back(vec3(-0.707107, 0.707107, 0.000000));
121
doubleCylinderNormals_.push_back(vec3(-0.707107, 0.707107, 0.000000));
122
doubleCylinderNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
123
doubleCylinderNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
124
doubleCylinderNormals_.push_back(vec3(-0.707107, -0.707107, 0.000000));
125
doubleCylinderNormals_.push_back(vec3(-0.707107, -0.707107, 0.000000));
126
doubleCylinderNormals_.push_back(vec3(0.000000, -1.000000, 0.000000));
127
doubleCylinderNormals_.push_back(vec3(0.000000, -1.000000, 0.000000));
128
doubleCylinderNormals_.push_back(vec3(0.707107, -0.707107, 0.000000));
129
doubleCylinderNormals_.push_back(vec3(0.707107, -0.707107, 0.000000));
130
doubleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
131
doubleCylinderNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
134
elbowVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
135
elbowVertices_.push_back(vec3(0.707107, 0.707107, 0.000000));
136
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
137
elbowVertices_.push_back(vec3(-0.707107, 0.707107, 0.000000));
138
elbowVertices_.push_back(vec3(-1.000000, 0.000000, 0.000000));
139
elbowVertices_.push_back(vec3(-0.707107, -0.707107, 0.000000));
140
elbowVertices_.push_back(vec3(0.000000, -1.000000, 0.000000));
141
elbowVertices_.push_back(vec3(0.707107, -0.707107, 0.000000));
142
elbowVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
143
elbowVertices_.push_back(vec3(1.000000, 0.034074, 0.258819));
144
elbowVertices_.push_back(vec3(0.707107, 0.717087, 0.075806));
145
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
146
elbowVertices_.push_back(vec3(-0.707107, 0.717087, 0.075806));
147
elbowVertices_.push_back(vec3(-1.000000, 0.034074, 0.258819));
148
elbowVertices_.push_back(vec3(-0.707107, -0.648939, 0.441832));
149
elbowVertices_.push_back(vec3(0.000000, -0.931852, 0.517638));
150
elbowVertices_.push_back(vec3(0.707107, -0.648939, 0.441832));
151
elbowVertices_.push_back(vec3(1.000000, 0.034074, 0.258819));
152
elbowVertices_.push_back(vec3(1.000000, 0.133975, 0.500000));
153
elbowVertices_.push_back(vec3(0.707107, 0.746347, 0.146447));
154
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
155
elbowVertices_.push_back(vec3(-0.707107, 0.746347, 0.146447));
156
elbowVertices_.push_back(vec3(-1.000000, 0.133975, 0.500000));
157
elbowVertices_.push_back(vec3(-0.707107, -0.478398, 0.853553));
158
elbowVertices_.push_back(vec3(0.000000, -0.732051, 1.000000));
159
elbowVertices_.push_back(vec3(0.707107, -0.478398, 0.853553));
160
elbowVertices_.push_back(vec3(1.000000, 0.133975, 0.500000));
161
elbowVertices_.push_back(vec3(1.000000, 0.292893, 0.707107));
162
elbowVertices_.push_back(vec3(0.707107, 0.792893, 0.207107));
163
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
164
elbowVertices_.push_back(vec3(-0.707107, 0.792893, 0.207107));
165
elbowVertices_.push_back(vec3(-1.000000, 0.292893, 0.707107));
166
elbowVertices_.push_back(vec3(-0.707107, -0.207107, 1.207107));
167
elbowVertices_.push_back(vec3(0.000000, -0.414214, 1.414214));
168
elbowVertices_.push_back(vec3(0.707107, -0.207107, 1.207107));
169
elbowVertices_.push_back(vec3(1.000000, 0.292893, 0.707107));
170
elbowVertices_.push_back(vec3(1.000000, 0.500000, 0.866025));
171
elbowVertices_.push_back(vec3(0.707107, 0.853553, 0.253653));
172
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
173
elbowVertices_.push_back(vec3(-0.707107, 0.853553, 0.253653));
174
elbowVertices_.push_back(vec3(-1.000000, 0.500000, 0.866025));
175
elbowVertices_.push_back(vec3(-0.707107, 0.146447, 1.478398));
176
elbowVertices_.push_back(vec3(0.000000, 0.000000, 1.732051));
177
elbowVertices_.push_back(vec3(0.707107, 0.146447, 1.478398));
178
elbowVertices_.push_back(vec3(1.000000, 0.500000, 0.866025));
179
elbowVertices_.push_back(vec3(1.000000, 0.741181, 0.965926));
180
elbowVertices_.push_back(vec3(0.707107, 0.924194, 0.282913));
181
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
182
elbowVertices_.push_back(vec3(-0.707107, 0.924194, 0.282913));
183
elbowVertices_.push_back(vec3(-1.000000, 0.741181, 0.965926));
184
elbowVertices_.push_back(vec3(-0.707107, 0.558168, 1.648939));
185
elbowVertices_.push_back(vec3(0.000000, 0.482362, 1.931852));
186
elbowVertices_.push_back(vec3(0.707107, 0.558168, 1.648939));
187
elbowVertices_.push_back(vec3(1.000000, 0.741181, 0.965926));
188
elbowVertices_.push_back(vec3(1.000000, 1.000000, 1.000000));
189
elbowVertices_.push_back(vec3(0.707107, 1.000000, 0.292893));
190
elbowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
191
elbowVertices_.push_back(vec3(-0.707107, 1.000000, 0.292893));
192
elbowVertices_.push_back(vec3(-1.000000, 1.000000, 1.000000));
193
elbowVertices_.push_back(vec3(-0.707107, 1.000000, 1.707107));
194
elbowVertices_.push_back(vec3(0.000000, 1.000000, 2.000000));
195
elbowVertices_.push_back(vec3(0.707107, 1.000000, 1.707107));
196
elbowVertices_.push_back(vec3(1.000000, 1.000000, 1.000000));
198
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
199
elbowNormals_.push_back(vec3(0.707107, 0.707107, 0.000000));
200
elbowNormals_.push_back(vec3(0.000000, 1.000000, 0.000000));
201
elbowNormals_.push_back(vec3(-0.707107, 0.707107, 0.000000));
202
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
203
elbowNormals_.push_back(vec3(-0.707107, -0.707107, 0.000000));
204
elbowNormals_.push_back(vec3(0.000000, -1.000000, 0.000000));
205
elbowNormals_.push_back(vec3(0.707107, -0.707107, 0.000000));
206
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
207
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
208
elbowNormals_.push_back(vec3(0.707107, 0.683013, -0.183013));
209
elbowNormals_.push_back(vec3(0.000000, 0.965926, -0.258819));
210
elbowNormals_.push_back(vec3(-0.707107, 0.683013, -0.183013));
211
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
212
elbowNormals_.push_back(vec3(-0.707107, -0.683013, 0.183013));
213
elbowNormals_.push_back(vec3(0.000000, -0.965926, 0.258819));
214
elbowNormals_.push_back(vec3(0.707107, -0.683013, 0.183013));
215
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
216
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
217
elbowNormals_.push_back(vec3(0.707107, 0.612372, -0.353553));
218
elbowNormals_.push_back(vec3(0.000000, 0.866025, -0.500000));
219
elbowNormals_.push_back(vec3(-0.707107, 0.612372, -0.353553));
220
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
221
elbowNormals_.push_back(vec3(-0.707107, -0.612372, 0.353553));
222
elbowNormals_.push_back(vec3(0.000000, -0.866025, 0.500000));
223
elbowNormals_.push_back(vec3(0.707107, -0.612372, 0.353553));
224
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
225
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
226
elbowNormals_.push_back(vec3(0.707107, 0.500000, -0.500000));
227
elbowNormals_.push_back(vec3(0.000000, 0.707107, -0.707107));
228
elbowNormals_.push_back(vec3(-0.707107, 0.500000, -0.500000));
229
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
230
elbowNormals_.push_back(vec3(-0.707107, -0.500000, 0.500000));
231
elbowNormals_.push_back(vec3(0.000000, -0.707107, 0.707107));
232
elbowNormals_.push_back(vec3(0.707107, -0.500000, 0.500000));
233
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
234
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
235
elbowNormals_.push_back(vec3(0.707107, 0.353553, -0.612372));
236
elbowNormals_.push_back(vec3(0.000000, 0.500000, -0.866025));
237
elbowNormals_.push_back(vec3(-0.707107, 0.353553, -0.612372));
238
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
239
elbowNormals_.push_back(vec3(-0.707107, -0.353553, 0.612372));
240
elbowNormals_.push_back(vec3(0.000000, -0.500000, 0.866025));
241
elbowNormals_.push_back(vec3(0.707107, -0.353553, 0.612372));
242
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
243
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
244
elbowNormals_.push_back(vec3(0.707107, 0.183013, -0.683013));
245
elbowNormals_.push_back(vec3(0.000000, 0.258819, -0.965926));
246
elbowNormals_.push_back(vec3(-0.707107, 0.183013, -0.683013));
247
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
248
elbowNormals_.push_back(vec3(-0.707107, -0.183013, 0.683013));
249
elbowNormals_.push_back(vec3(0.000000, -0.258819, 0.965926));
250
elbowNormals_.push_back(vec3(0.707107, -0.183013, 0.683013));
251
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
252
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
253
elbowNormals_.push_back(vec3(0.707107, 0.000000, -0.707107));
254
elbowNormals_.push_back(vec3(0.000000, 0.000000, -1.000000));
255
elbowNormals_.push_back(vec3(-0.707107, 0.000000, -0.707107));
256
elbowNormals_.push_back(vec3(-1.000000, 0.000000, 0.000000));
257
elbowNormals_.push_back(vec3(-0.707107, 0.000000, 0.707107));
258
elbowNormals_.push_back(vec3(0.000000, 0.000000, 1.000000));
259
elbowNormals_.push_back(vec3(0.707107, 0.000000, 0.707107));
260
elbowNormals_.push_back(vec3(1.000000, 0.000000, 0.000000));
262
elbowShadowVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
263
elbowShadowVertices_.push_back(vec3(0.707107, 0.707107, 0.000000));
264
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
265
elbowShadowVertices_.push_back(vec3(-0.707107, 0.707107, 0.000000));
266
elbowShadowVertices_.push_back(vec3(-1.000000, 0.000000, 0.000000));
267
elbowShadowVertices_.push_back(vec3(-0.707107, -0.707107, 0.000000));
268
elbowShadowVertices_.push_back(vec3(0.000000, -1.000000, 0.000000));
269
elbowShadowVertices_.push_back(vec3(0.707107, -0.707107, 0.000000));
270
elbowShadowVertices_.push_back(vec3(1.000000, 0.000000, 0.000000));
271
elbowShadowVertices_.push_back(vec3(1.000000, 0.019215, 0.195090));
272
elbowShadowVertices_.push_back(vec3(0.707107, 0.712735, 0.057141));
273
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
274
elbowShadowVertices_.push_back(vec3(-0.707107, 0.712735, 0.057141));
275
elbowShadowVertices_.push_back(vec3(-1.000000, 0.019215, 0.195090));
276
elbowShadowVertices_.push_back(vec3(-0.707107, -0.674305, 0.333040));
277
elbowShadowVertices_.push_back(vec3(0.000000, -0.961571, 0.390181));
278
elbowShadowVertices_.push_back(vec3(0.707107, -0.674305, 0.333040));
279
elbowShadowVertices_.push_back(vec3(1.000000, 0.019215, 0.195090));
280
elbowShadowVertices_.push_back(vec3(1.000000, 0.076120, 0.382683));
281
elbowShadowVertices_.push_back(vec3(0.707107, 0.729402, 0.112085));
282
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
283
elbowShadowVertices_.push_back(vec3(-0.707107, 0.729402, 0.112085));
284
elbowShadowVertices_.push_back(vec3(-1.000000, 0.076120, 0.382683));
285
elbowShadowVertices_.push_back(vec3(-0.707107, -0.577161, 0.653282));
286
elbowShadowVertices_.push_back(vec3(0.000000, -0.847759, 0.765367));
287
elbowShadowVertices_.push_back(vec3(0.707107, -0.577161, 0.653282));
288
elbowShadowVertices_.push_back(vec3(1.000000, 0.076120, 0.382683));
289
elbowShadowVertices_.push_back(vec3(1.000000, 0.168530, 0.555570));
290
elbowShadowVertices_.push_back(vec3(0.707107, 0.756468, 0.162723));
291
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
292
elbowShadowVertices_.push_back(vec3(-0.707107, 0.756468, 0.162723));
293
elbowShadowVertices_.push_back(vec3(-1.000000, 0.168530, 0.555570));
294
elbowShadowVertices_.push_back(vec3(-0.707107, -0.419407, 0.948418));
295
elbowShadowVertices_.push_back(vec3(0.000000, -0.662939, 1.111140));
296
elbowShadowVertices_.push_back(vec3(0.707107, -0.419407, 0.948418));
297
elbowShadowVertices_.push_back(vec3(1.000000, 0.168530, 0.555570));
298
elbowShadowVertices_.push_back(vec3(1.000000, 0.292893, 0.707107));
299
elbowShadowVertices_.push_back(vec3(0.707107, 0.792893, 0.207107));
300
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
301
elbowShadowVertices_.push_back(vec3(-0.707107, 0.792893, 0.207107));
302
elbowShadowVertices_.push_back(vec3(-1.000000, 0.292893, 0.707107));
303
elbowShadowVertices_.push_back(vec3(-0.707107, -0.207107, 1.207107));
304
elbowShadowVertices_.push_back(vec3(0.000000, -0.414214, 1.414214));
305
elbowShadowVertices_.push_back(vec3(0.707107, -0.207107, 1.207107));
306
elbowShadowVertices_.push_back(vec3(1.000000, 0.292893, 0.707107));
307
elbowShadowVertices_.push_back(vec3(1.000000, 0.444430, 0.831470));
308
elbowShadowVertices_.push_back(vec3(0.707107, 0.837277, 0.243532));
309
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
310
elbowShadowVertices_.push_back(vec3(-0.707107, 0.837277, 0.243532));
311
elbowShadowVertices_.push_back(vec3(-1.000000, 0.444430, 0.831470));
312
elbowShadowVertices_.push_back(vec3(-0.707107, 0.051582, 1.419407));
313
elbowShadowVertices_.push_back(vec3(0.000000, -0.111140, 1.662939));
314
elbowShadowVertices_.push_back(vec3(0.707107, 0.051582, 1.419407));
315
elbowShadowVertices_.push_back(vec3(1.000000, 0.444430, 0.831470));
316
elbowShadowVertices_.push_back(vec3(1.000000, 0.617317, 0.923880));
317
elbowShadowVertices_.push_back(vec3(0.707107, 0.887915, 0.270598));
318
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
319
elbowShadowVertices_.push_back(vec3(-0.707107, 0.887915, 0.270598));
320
elbowShadowVertices_.push_back(vec3(-1.000000, 0.617317, 0.923880));
321
elbowShadowVertices_.push_back(vec3(-0.707107, 0.346719, 1.577161));
322
elbowShadowVertices_.push_back(vec3(0.000000, 0.234633, 1.847759));
323
elbowShadowVertices_.push_back(vec3(0.707107, 0.346719, 1.577161));
324
elbowShadowVertices_.push_back(vec3(1.000000, 0.617317, 0.923880));
325
elbowShadowVertices_.push_back(vec3(1.000000, 0.804910, 0.980785));
326
elbowShadowVertices_.push_back(vec3(0.707107, 0.942859, 0.287265));
327
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
328
elbowShadowVertices_.push_back(vec3(-0.707107, 0.942859, 0.287265));
329
elbowShadowVertices_.push_back(vec3(-1.000000, 0.804910, 0.980785));
330
elbowShadowVertices_.push_back(vec3(-0.707107, 0.666960, 1.674305));
331
elbowShadowVertices_.push_back(vec3(0.000000, 0.609819, 1.961571));
332
elbowShadowVertices_.push_back(vec3(0.707107, 0.666960, 1.674305));
333
elbowShadowVertices_.push_back(vec3(1.000000, 0.804910, 0.980785));
334
elbowShadowVertices_.push_back(vec3(1.000000, 1.000000, 1.000000));
335
elbowShadowVertices_.push_back(vec3(0.707107, 1.000000, 0.292893));
336
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 0.000000));
337
elbowShadowVertices_.push_back(vec3(-0.707107, 1.000000, 0.292893));
338
elbowShadowVertices_.push_back(vec3(-1.000000, 1.000000, 1.000000));
339
elbowShadowVertices_.push_back(vec3(-0.707107, 1.000000, 1.707107));
340
elbowShadowVertices_.push_back(vec3(0.000000, 1.000000, 2.000000));
341
elbowShadowVertices_.push_back(vec3(0.707107, 1.000000, 1.707107));
342
elbowShadowVertices_.push_back(vec3(1.000000, 1.000000, 1.000000));
344
// Now that we've setup the vertex data, we can setup the map of how
345
// that data will be laid out in the buffer object.
346
static const unsigned int sv3(sizeof(vec3));
347
dataMap_.scvOffset = 0;
348
dataMap_.scvSize = singleCylinderVertices_.size() * sv3;
349
dataMap_.totalSize = dataMap_.scvSize;
350
dataMap_.scnOffset = dataMap_.scvOffset + dataMap_.scvSize;
351
dataMap_.scnSize = singleCylinderNormals_.size() * sv3;
352
dataMap_.totalSize += dataMap_.scnSize;
353
dataMap_.dcvOffset = dataMap_.scnOffset + dataMap_.scnSize;
354
dataMap_.dcvSize = doubleCylinderVertices_.size() * sv3;
355
dataMap_.totalSize += dataMap_.dcvSize;
356
dataMap_.dcnOffset = dataMap_.dcvOffset + dataMap_.dcvSize;
357
dataMap_.dcnSize = doubleCylinderNormals_.size() * sv3;
358
dataMap_.totalSize += dataMap_.dcnSize;
359
dataMap_.evOffset = dataMap_.dcnOffset + dataMap_.dcnSize;
360
dataMap_.evSize = elbowVertices_.size() * sv3;
361
dataMap_.totalSize += dataMap_.evSize;
362
dataMap_.enOffset = dataMap_.evOffset + dataMap_.evSize;
363
dataMap_.enSize = elbowNormals_.size() * sv3;
364
dataMap_.totalSize += dataMap_.enSize;
365
dataMap_.esvOffset = dataMap_.enOffset + dataMap_.enSize;
366
dataMap_.esvSize = elbowShadowVertices_.size() * sv3;
367
dataMap_.totalSize += dataMap_.esvSize;
370
// The original implementation of both the logo and the lamp represented
371
// the vertex and normal data in a triply-dimensioned array of floats and
372
// all of the calls referenced double-indexed arrays of vector data.
373
// To my mind, this made the code look clunky and overly verbose.
374
// Representing the data as a STL vector of vec3 (itself a 3-float vector
375
// quantity) provides both an efficient container and allows for more
376
// concise looking code. The slightly goofy loops (using the original 2
377
// dimensional indices to compute a single offset into the STL vector) are
378
// a compromise to avoid rearranging the original data.
380
// - jesse 2010/10/04
382
for (unsigned int i = 0; i < 8; i++)
384
for (unsigned int j = 0; j < 9; j++)
386
unsigned int index1(i * 9 + j);
387
unsigned int index2((i + 1) * 9 + j);
388
indexData_.push_back(index1);
389
indexData_.push_back(index2);
393
// Initialize the stipple pattern
394
static const unsigned int patterns[] = { 0xaaaaaaaa, 0x55555555 };
395
for (unsigned int i = 0; i < textureResolution_; i++)
397
for (unsigned int j = 0; j < textureResolution_; j++)
399
// Alternate the pattern every other line.
400
unsigned int curMask(1 << j);
401
unsigned int curPattern(patterns[i % 2]);
402
textureImage_[i][j] = ((curPattern & curMask) >> j) * 255;
411
glDeleteBuffers(2, &bufferObjects_[0]);
418
// Make sure we don't re-initialize...
424
// Initialize shader sources from input files and create programs from them
425
// The program for handling the main object with lighting...
426
string logo_vtx_filename(GLMARK_DATA_PATH"/shaders/ideas-logo.vert");
427
string logo_frg_filename(GLMARK_DATA_PATH"/shaders/ideas-logo.frag");
428
ShaderSource logo_vtx_source(logo_vtx_filename);
429
ShaderSource logo_frg_source(logo_frg_filename);
430
if (!Scene::load_shaders_from_strings(normalProgram_, logo_vtx_source.str(),
431
logo_frg_source.str()))
433
Log::error("No valid program for normal logo rendering\n");
436
normalVertexIndex_ = normalProgram_[vertexAttribName_].location();
437
normalNormalIndex_ = normalProgram_[normalAttribName_].location();
439
// The program for handling the flat object...
440
string logo_flat_vtx_filename(GLMARK_DATA_PATH"/shaders/ideas-logo-flat.vert");
441
string logo_flat_frg_filename(GLMARK_DATA_PATH"/shaders/ideas-logo-flat.frag");
442
ShaderSource logo_flat_vtx_source(logo_flat_vtx_filename);
443
ShaderSource logo_flat_frg_source(logo_flat_frg_filename);
444
if (!Scene::load_shaders_from_strings(flatProgram_, logo_flat_vtx_source.str(),
445
logo_flat_frg_source.str()))
447
Log::error("No valid program for flat logo rendering\n");
450
flatVertexIndex_ = flatProgram_[vertexAttribName_].location();
452
// The program for handling the shadow object with texturing...
453
string logo_shadow_vtx_filename(GLMARK_DATA_PATH"/shaders/ideas-logo-shadow.vert");
454
string logo_shadow_frg_filename(GLMARK_DATA_PATH"/shaders/ideas-logo-shadow.frag");
455
ShaderSource logo_shadow_vtx_source(logo_shadow_vtx_filename);
456
ShaderSource logo_shadow_frg_source(logo_shadow_frg_filename);
457
if (!Scene::load_shaders_from_strings(shadowProgram_, logo_shadow_vtx_source.str(),
458
logo_shadow_frg_source.str()))
460
Log::error("No valid program for shadow logo rendering\n");
463
shadowVertexIndex_ = shadowProgram_[vertexAttribName_].location();
465
// We need 2 buffers for our work here. One for the vertex data.
466
// and one for the index data.
467
glGenBuffers(2, &bufferObjects_[0]);
469
// First, setup the vertex data by binding the first buffer object,
470
// allocating its data store, and filling it in with our vertex data.
471
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects_[0]);
472
glBufferData(GL_ARRAY_BUFFER, dataMap_.totalSize, 0, GL_STATIC_DRAW);
473
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.scvOffset, dataMap_.scvSize,
474
&singleCylinderVertices_.front());
475
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.scnOffset, dataMap_.scnSize,
476
&singleCylinderNormals_.front());
477
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.dcvOffset, dataMap_.dcvSize,
478
&doubleCylinderVertices_.front());
479
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.dcnOffset, dataMap_.dcnSize,
480
&doubleCylinderNormals_.front());
481
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.evOffset, dataMap_.evSize,
482
&elbowVertices_.front());
483
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.enOffset, dataMap_.enSize,
484
&elbowNormals_.front());
485
glBufferSubData(GL_ARRAY_BUFFER, dataMap_.esvOffset, dataMap_.esvSize,
486
&elbowShadowVertices_.front());
488
// Now repeat for our index data.
489
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects_[1]);
490
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData_.size() * sizeof(unsigned short),
491
&indexData_.front(), GL_STATIC_DRAW);
493
// Setup our the texture that the shadow program will use...
494
glGenTextures(1, &textureName_);
495
glBindTexture(GL_TEXTURE_2D, textureName_);
496
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
497
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
498
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
499
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
500
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA,
501
textureResolution_, textureResolution_,
502
0, GL_ALPHA, GL_UNSIGNED_BYTE, textureImage_);
504
// We're ready to go.
509
SGILogo::bendForward(Stack4& ms)
511
ms.translate(0.0, 1.0, 0.0);
512
ms.rotate(90.0, 1.0, 0.0, 0.0);
513
ms.translate(0.0, -1.0, 0.0);
517
SGILogo::bendLeft(Stack4& ms)
519
ms.rotate(-90.0, 0.0, 0.0, 1.0);
520
ms.translate(0.0, 1.0, 0.0);
521
ms.rotate(90.0, 1.0, 0.0, 0.0);
522
ms.translate(0.0, -1.0, 0.0);
526
SGILogo::bendRight(Stack4& ms)
528
ms.rotate(90.0, 0.0, 0.0, 1.0);
529
ms.translate(0.0, 1.0, 0.0);
530
ms.rotate(90.0, 1.0, 0.0, 0.0);
531
ms.translate(0.0, -1.0, 0.0);
535
SGILogo::drawDoubleCylinder(void)
537
glVertexAttribPointer(vertexIndex_, 3, GL_FLOAT, GL_FALSE, 0,
538
reinterpret_cast<const GLvoid*>(dataMap_.dcvOffset));
539
if (drawStyle_ == LOGO_NORMAL)
541
glVertexAttribPointer(normalNormalIndex_, 3, GL_FLOAT, GL_FALSE, 0,
542
reinterpret_cast<const GLvoid*>(dataMap_.dcnOffset));
544
glDrawArrays(GL_TRIANGLE_STRIP, 0, 18);
548
SGILogo::drawSingleCylinder(void)
550
glVertexAttribPointer(vertexIndex_, 3, GL_FLOAT, GL_FALSE, 0,
551
reinterpret_cast<const GLvoid*>(dataMap_.scvOffset));
552
if (drawStyle_ == LOGO_NORMAL)
554
glVertexAttribPointer(normalNormalIndex_, 3, GL_FLOAT, GL_FALSE, 0,
555
reinterpret_cast<const GLvoid*>(dataMap_.scnOffset));
557
glDrawArrays(GL_TRIANGLE_STRIP, 0, 18);
561
SGILogo::drawElbow(void)
563
unsigned int startIdx(0);
564
unsigned int endIdx(6);
565
if (drawStyle_ == LOGO_NORMAL)
567
glVertexAttribPointer(vertexIndex_, 3, GL_FLOAT, GL_FALSE, 0,
568
reinterpret_cast<const GLvoid*>(dataMap_.evOffset));
569
glVertexAttribPointer(normalNormalIndex_, 3, GL_FLOAT, GL_FALSE, 0,
570
reinterpret_cast<const GLvoid*>(dataMap_.enOffset));
575
glVertexAttribPointer(vertexIndex_, 3, GL_FLOAT, GL_FALSE, 0,
576
reinterpret_cast<const GLvoid*>(dataMap_.esvOffset));
579
for (unsigned int i = startIdx; i < endIdx; i++)
581
unsigned int curOffset(i * 18 * sizeof(unsigned short));
582
glDrawElements(GL_TRIANGLE_STRIP, 18, GL_UNSIGNED_SHORT,
583
reinterpret_cast<const GLvoid*>(curOffset));
587
// Generate a normal matrix from a modelview matrix
589
// Since we can't universally handle the normal matrix inside the
590
// vertex shader (inverse() and transpose() built-ins not supported by
591
// GLSL ES, for example), we'll generate it here, and load it as a
594
SGILogo::updateXform(const mat4& mv, Program& program)
596
if (drawStyle_ == LOGO_NORMAL)
598
LibMatrix::mat3 normalMatrix(mv[0][0], mv[1][0], mv[2][0],
599
mv[0][1], mv[1][1], mv[2][1],
600
mv[0][2], mv[1][2], mv[2][2]);
601
normalMatrix.transpose().inverse();
602
program[normalMatrixName_] = normalMatrix;
604
program[modelviewName_] = mv;
608
SGILogo::getProgram()
613
return normalProgram_;
619
return shadowProgram_;
623
return normalProgram_;
627
SGILogo::draw(Stack4& modelview,
629
const vec4& lightPosition,
631
const uvec3& currentColor)
638
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects_[0]);
639
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects_[1]);
641
// Setup the program to use based upon draw style and set it running.
643
vec4 logoColor(currentColor.x() / 255.0, currentColor.y() / 255.0, currentColor.z() / 255.0, 1.0);
644
Program& curProgram = getProgram();
649
curProgram[lightPositionName_] = lightPosition;
650
vertexIndex_ = normalVertexIndex_;
651
glEnableVertexAttribArray(normalNormalIndex_);
654
curProgram[logoColorName_] = logoColor;
655
vertexIndex_ = flatVertexIndex_;
658
vertexIndex_ = shadowVertexIndex_;
662
glEnableVertexAttribArray(vertexIndex_);
663
curProgram[projectionName_] = projection.getCurrent();
664
modelview.translate(5.500000, -3.500000, 4.500000);
665
modelview.translate(0.0, 0.0, -7.000000);
666
updateXform(modelview.getCurrent(), curProgram);
667
drawDoubleCylinder();
668
bendForward(modelview);
669
updateXform(modelview.getCurrent(), curProgram);
671
modelview.translate(0.0, 0.0, -7.000000);
672
updateXform(modelview.getCurrent(), curProgram);
673
drawDoubleCylinder();
674
bendForward(modelview);
675
updateXform(modelview.getCurrent(), curProgram);
677
modelview.translate(0.0, 0.0, -5.000000);
678
updateXform(modelview.getCurrent(), curProgram);
679
drawSingleCylinder();
680
bendRight(modelview);
681
updateXform(modelview.getCurrent(), curProgram);
683
modelview.translate(0.0, 0.0, -7.000000);
684
updateXform(modelview.getCurrent(), curProgram);
685
drawDoubleCylinder();
686
bendForward(modelview);
687
updateXform(modelview.getCurrent(), curProgram);
689
modelview.translate(0.0, 0.0, -7.000000);
690
updateXform(modelview.getCurrent(), curProgram);
691
drawDoubleCylinder();
692
bendForward(modelview);
693
updateXform(modelview.getCurrent(), curProgram);
695
modelview.translate(0.0, 0.0, -5.000000);
696
updateXform(modelview.getCurrent(), curProgram);
697
drawSingleCylinder();
699
updateXform(modelview.getCurrent(), curProgram);
701
modelview.translate(0.0, 0.0, -7.000000);
702
updateXform(modelview.getCurrent(), curProgram);
703
drawDoubleCylinder();
704
bendForward(modelview);
705
updateXform(modelview.getCurrent(), curProgram);
707
modelview.translate(0.0, 0.0, -7.000000);
708
updateXform(modelview.getCurrent(), curProgram);
709
drawDoubleCylinder();
710
bendForward(modelview);
711
updateXform(modelview.getCurrent(), curProgram);
713
modelview.translate(0.0, 0.0, -5.000000);
714
updateXform(modelview.getCurrent(), curProgram);
715
drawSingleCylinder();
716
bendRight(modelview);
717
updateXform(modelview.getCurrent(), curProgram);
719
modelview.translate(0.0, 0.0, -7.000000);
720
updateXform(modelview.getCurrent(), curProgram);
721
drawDoubleCylinder();
722
bendForward(modelview);
723
updateXform(modelview.getCurrent(), curProgram);
725
modelview.translate(0.0, 0.0, -7.000000);
726
updateXform(modelview.getCurrent(), curProgram);
727
drawDoubleCylinder();
728
bendForward(modelview);
729
updateXform(modelview.getCurrent(), curProgram);
731
modelview.translate(0.0, 0.0, -5.000000);
732
updateXform(modelview.getCurrent(), curProgram);
733
drawSingleCylinder();
735
updateXform(modelview.getCurrent(), curProgram);
737
modelview.translate(0.0, 0.0, -7.000000);
738
updateXform(modelview.getCurrent(), curProgram);
739
drawDoubleCylinder();
740
bendForward(modelview);
741
updateXform(modelview.getCurrent(), curProgram);
743
modelview.translate(0.0, 0.0, -7.000000);
744
updateXform(modelview.getCurrent(), curProgram);
745
drawDoubleCylinder();
746
bendForward(modelview);
747
updateXform(modelview.getCurrent(), curProgram);
749
modelview.translate(0.0, 0.0, -5.000000);
750
updateXform(modelview.getCurrent(), curProgram);
751
drawSingleCylinder();
752
bendRight(modelview);
753
updateXform(modelview.getCurrent(), curProgram);
755
modelview.translate(0.0, 0.0, -7.000000);
756
updateXform(modelview.getCurrent(), curProgram);
757
drawDoubleCylinder();
758
bendForward(modelview);
759
updateXform(modelview.getCurrent(), curProgram);
761
modelview.translate(0.0, 0.0, -7.000000);
762
updateXform(modelview.getCurrent(), curProgram);
763
drawDoubleCylinder();
764
bendForward(modelview);
765
updateXform(modelview.getCurrent(), curProgram);
767
modelview.translate(0.0, 0.0, -5.000000);
768
updateXform(modelview.getCurrent(), curProgram);
769
drawSingleCylinder();
771
updateXform(modelview.getCurrent(), curProgram);
773
glDisableVertexAttribArray(vertexIndex_);
777
glDisableVertexAttribArray(normalNormalIndex_);
786
glBindBuffer(GL_ARRAY_BUFFER, 0);
787
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);