Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: third_party/gles2_book/Common/Source/esShapes.c

Issue 543015: Added simple vertex shader demo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // 1 //
2 // Book: OpenGL(R) ES 2.0 Programming Guide 2 // Book: OpenGL(R) ES 2.0 Programming Guide
3 // Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner 3 // Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
4 // ISBN-10: 0321502795 4 // ISBN-10: 0321502795
5 // ISBN-13: 9780321502797 5 // ISBN-13: 9780321502797
6 // Publisher: Addison-Wesley Professional 6 // Publisher: Addison-Wesley Professional
7 // URLs: http://safari.informit.com/9780321563835 7 // URLs: http://safari.informit.com/9780321563835
8 // http://www.opengles-book.com 8 // http://www.opengles-book.com
9 // 9 //
10 10
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 /// the results in the arrays. Generate index list for a TRIANGLE_STRIP 45 /// the results in the arrays. Generate index list for a TRIANGLE_STRIP
46 /// \param numSlices The number of slices in the sphere 46 /// \param numSlices The number of slices in the sphere
47 /// \param vertices If not NULL, will contain array of float3 positions 47 /// \param vertices If not NULL, will contain array of float3 positions
48 /// \param normals If not NULL, will contain array of float3 normals 48 /// \param normals If not NULL, will contain array of float3 normals
49 /// \param texCoords If not NULL, will contain array of float2 texCoords 49 /// \param texCoords If not NULL, will contain array of float2 texCoords
50 /// \param indices If not NULL, will contain the array of indices for the triang le strip 50 /// \param indices If not NULL, will contain the array of indices for the triang le strip
51 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array 51 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
52 /// if it is not NULL ) as a GL_TRIANGLE_STRIP 52 /// if it is not NULL ) as a GL_TRIANGLE_STRIP
53 // 53 //
54 int esGenSphere ( int numSlices, float radius, GLfloat **vertices, GLfloat **nor mals, 54 int esGenSphere ( int numSlices, float radius, GLfloat **vertices, GLfloat **nor mals,
55 GLfloat **texCoords, GLuint **indices ) 55 GLfloat **texCoords, GLushort **indices )
56 { 56 {
57 int i; 57 int i;
58 int j; 58 int j;
59 int numParallels = numSlices / 2; 59 int numParallels = numSlices / 2;
60 int numVertices = ( numParallels + 1 ) * ( numSlices + 1 ); 60 int numVertices = ( numParallels + 1 ) * ( numSlices + 1 );
61 int numIndices = numParallels * numSlices * 6; 61 int numIndices = numParallels * numSlices * 6;
62 float angleStep = (2.0f * ES_PI) / ((float) numSlices); 62 float angleStep = (2.0f * ES_PI) / ((float) numSlices);
63 63
64 // Allocate memory for buffers 64 // Allocate memory for buffers
65 if ( vertices != NULL ) 65 if ( vertices != NULL )
66 *vertices = malloc ( sizeof(GLfloat) * 3 * numVertices ); 66 *vertices = malloc ( sizeof(GLfloat) * 3 * numVertices );
67 67
68 if ( normals != NULL ) 68 if ( normals != NULL )
69 *normals = malloc ( sizeof(GLfloat) * 3 * numVertices ); 69 *normals = malloc ( sizeof(GLfloat) * 3 * numVertices );
70 70
71 if ( texCoords != NULL ) 71 if ( texCoords != NULL )
72 *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices ); 72 *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices );
73 73
74 if ( indices != NULL ) 74 if ( indices != NULL )
75 *indices = malloc ( sizeof(GLuint) * numIndices ); 75 *indices = malloc ( sizeof(GLushort) * numIndices );
76 76
77 for ( i = 0; i < numParallels + 1; i++ ) 77 for ( i = 0; i < numParallels + 1; i++ )
78 { 78 {
79 for ( j = 0; j < numSlices + 1; j++ ) 79 for ( j = 0; j < numSlices + 1; j++ )
80 { 80 {
81 int vertex = ( i * (numSlices + 1) + j ) * 3; 81 int vertex = ( i * (numSlices + 1) + j ) * 3;
82 82
83 if ( vertices ) 83 if ( vertices )
84 { 84 {
85 (*vertices)[vertex + 0] = radius * sinf ( angleStep * (float)i ) * 85 (*vertices)[vertex + 0] = radius * sinf ( angleStep * (float)i ) *
(...skipping 15 matching lines...) Expand all
101 int texIndex = ( i * (numSlices + 1) + j ) * 2; 101 int texIndex = ( i * (numSlices + 1) + j ) * 2;
102 (*texCoords)[texIndex + 0] = (float) j / (float) numSlices; 102 (*texCoords)[texIndex + 0] = (float) j / (float) numSlices;
103 (*texCoords)[texIndex + 1] = ( 1.0f - (float) i ) / (float) (numPara llels - 1 ); 103 (*texCoords)[texIndex + 1] = ( 1.0f - (float) i ) / (float) (numPara llels - 1 );
104 } 104 }
105 } 105 }
106 } 106 }
107 107
108 // Generate the indices 108 // Generate the indices
109 if ( indices != NULL ) 109 if ( indices != NULL )
110 { 110 {
111 GLuint *indexBuf = (*indices); 111 GLushort *indexBuf = (*indices);
112 for ( i = 0; i < numParallels ; i++ ) 112 for ( i = 0; i < numParallels ; i++ )
113 { 113 {
114 for ( j = 0; j < numSlices; j++ ) 114 for ( j = 0; j < numSlices; j++ )
115 { 115 {
116 *indexBuf++ = i * ( numSlices + 1 ) + j; 116 *indexBuf++ = i * ( numSlices + 1 ) + j;
117 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + j; 117 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + j;
118 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 ); 118 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 );
119 119
120 *indexBuf++ = i * ( numSlices + 1 ) + j; 120 *indexBuf++ = i * ( numSlices + 1 ) + j;
121 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 ); 121 *indexBuf++ = ( i + 1 ) * ( numSlices + 1 ) + ( j + 1 );
(...skipping 10 matching lines...) Expand all
132 /// the results in the arrays. Generate index list for a TRIANGLES 132 /// the results in the arrays. Generate index list for a TRIANGLES
133 /// \param scale The size of the cube, use 1.0 for a unit cube. 133 /// \param scale The size of the cube, use 1.0 for a unit cube.
134 /// \param vertices If not NULL, will contain array of float3 positions 134 /// \param vertices If not NULL, will contain array of float3 positions
135 /// \param normals If not NULL, will contain array of float3 normals 135 /// \param normals If not NULL, will contain array of float3 normals
136 /// \param texCoords If not NULL, will contain array of float2 texCoords 136 /// \param texCoords If not NULL, will contain array of float2 texCoords
137 /// \param indices If not NULL, will contain the array of indices for the triang le strip 137 /// \param indices If not NULL, will contain the array of indices for the triang le strip
138 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array 138 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
139 /// if it is not NULL ) as a GL_TRIANGLE_STRIP 139 /// if it is not NULL ) as a GL_TRIANGLE_STRIP
140 // 140 //
141 int esGenCube ( float scale, GLfloat **vertices, GLfloat **normals, 141 int esGenCube ( float scale, GLfloat **vertices, GLfloat **normals,
142 GLfloat **texCoords, GLuint **indices ) 142 GLfloat **texCoords, GLushort **indices )
143 { 143 {
144 int i; 144 int i;
145 int numVertices = 24; 145 int numVertices = 24;
146 int numIndices = 36; 146 int numIndices = 36;
147 147
148 GLfloat cubeVerts[] = 148 GLfloat cubeVerts[] =
149 { 149 {
150 -0.5f, -0.5f, -0.5f, 150 -0.5f, -0.5f, -0.5f,
151 -0.5f, -0.5f, 0.5f, 151 -0.5f, -0.5f, 0.5f,
152 0.5f, -0.5f, 0.5f, 152 0.5f, -0.5f, 0.5f,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 if ( texCoords != NULL ) 249 if ( texCoords != NULL )
250 { 250 {
251 *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices ); 251 *texCoords = malloc ( sizeof(GLfloat) * 2 * numVertices );
252 memcpy( *texCoords, cubeTex, sizeof( cubeTex ) ) ; 252 memcpy( *texCoords, cubeTex, sizeof( cubeTex ) ) ;
253 } 253 }
254 254
255 255
256 // Generate the indices 256 // Generate the indices
257 if ( indices != NULL ) 257 if ( indices != NULL )
258 { 258 {
259 GLuint cubeIndices[] = 259 GLushort cubeIndices[] =
260 { 260 {
261 0, 2, 1, 261 0, 2, 1,
262 0, 3, 2, 262 0, 3, 2,
263 4, 5, 6, 263 4, 5, 6,
264 4, 6, 7, 264 4, 6, 7,
265 8, 9, 10, 265 8, 9, 10,
266 8, 10, 11, 266 8, 10, 11,
267 12, 15, 14, 267 12, 15, 14,
268 12, 14, 13, 268 12, 14, 13,
269 16, 17, 18, 269 16, 17, 18,
270 16, 18, 19, 270 16, 18, 19,
271 20, 23, 22, 271 20, 23, 22,
272 20, 22, 21 272 20, 22, 21
273 }; 273 };
274 274
275 *indices = malloc ( sizeof(GLuint) * numIndices ); 275 *indices = malloc ( sizeof(GLushort) * numIndices );
276 memcpy( *indices, cubeIndices, sizeof( cubeIndices ) ); 276 memcpy( *indices, cubeIndices, sizeof( cubeIndices ) );
277 } 277 }
278 278
279 return numIndices; 279 return numIndices;
280 } 280 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698