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

Side by Side Diff: third_party/gles2_book/Chapter_11/Stencil_Test/Stencil_Test.c

Issue 7530011: Fixed Stencil test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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
« no previous file with comments | « no previous file | third_party/gles2_book/README.chromium » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 24 matching lines...) Expand all
35 "void main() \n" 35 "void main() \n"
36 "{ \n" 36 "{ \n"
37 " gl_FragColor = u_color; \n" 37 " gl_FragColor = u_color; \n"
38 "} \n"; 38 "} \n";
39 39
40 GLfloat vVertices[] = { 40 GLfloat vVertices[] = {
41 -0.75f, 0.25f, 0.50f, // Quad #0 41 -0.75f, 0.25f, 0.50f, // Quad #0
42 -0.25f, 0.25f, 0.50f, 42 -0.25f, 0.25f, 0.50f,
43 -0.25f, 0.75f, 0.50f, 43 -0.25f, 0.75f, 0.50f,
44 -0.75f, 0.75f, 0.50f, 44 -0.75f, 0.75f, 0.50f,
45 0.25f, 0.25f, 0.90f, // Quad #1 45 0.25f, 0.25f, 0.50f, // Quad #1
46 0.75f, 0.25f, 0.90f, 46 0.75f, 0.25f, 0.50f,
47 0.75f, 0.75f, 0.90f, 47 0.75f, 0.75f, 0.50f,
48 0.25f, 0.75f, 0.90f, 48 0.25f, 0.75f, 0.50f,
49 -0.75f, -0.75f, 0.50f, // Quad #2 49 -0.75f, -0.75f, 0.50f, // Quad #2
50 -0.25f, -0.75f, 0.50f, 50 -0.25f, -0.75f, 0.50f,
51 -0.25f, -0.25f, 0.50f, 51 -0.25f, -0.25f, 0.50f,
52 -0.75f, -0.25f, 0.50f, 52 -0.75f, -0.25f, 0.50f,
53 0.25f, -0.75f, 0.50f, // Quad #3 53 0.25f, -0.75f, 0.50f, // Quad #3
54 0.75f, -0.75f, 0.50f, 54 0.75f, -0.75f, 0.50f,
55 0.75f, -0.25f, 0.50f, 55 0.75f, -0.25f, 0.50f,
56 0.25f, -0.25f, 0.50f, 56 0.25f, -0.25f, 0.50f,
57 -1.00f, -1.00f, 0.00f, // Big Quad 57 -1.00f, -1.00f, 0.00f, // Big Quad
58 1.00f, -1.00f, 0.00f, 58 1.00f, -1.00f, 0.00f,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 int i; 111 int i;
112 GLubyte *offset = NULL; 112 GLubyte *offset = NULL;
113 113
114 STUserData *userData = esContext->userData; 114 STUserData *userData = esContext->userData;
115 115
116 #define NumTests 4 116 #define NumTests 4
117 GLfloat colors[NumTests][4] = { 117 GLfloat colors[NumTests][4] = {
118 { 1.0f, 0.0f, 0.0f, 1.0f }, 118 { 1.0f, 0.0f, 0.0f, 1.0f },
119 { 0.0f, 1.0f, 0.0f, 1.0f }, 119 { 0.0f, 1.0f, 0.0f, 1.0f },
120 { 0.0f, 0.0f, 1.0f, 1.0f }, 120 { 0.0f, 0.0f, 1.0f, 1.0f },
121 { 1.0f, 1.0f, 0.0f, 0.0f } 121 { 1.0f, 1.0f, 0.0f, 1.0f }
122 }; 122 };
123 123
124 GLint numStencilBits = 0;
125 GLuint stencilValues[NumTests] = { 124 GLuint stencilValues[NumTests] = {
126 0x7, // Result of test 0 125 0x7, // Result of test 0
127 0x0, // Result of test 1 126 0x0, // Result of test 1
128 0x2, // Result of test 2 127 0x2, // Result of test 2
129 0xff // Result of test 3. We need to fill this 128 0xfe // Result of test 3
130 // value in a run-time
131 }; 129 };
132 130
133 // Set the viewport 131 // Set the viewport
134 glViewport ( 0, 0, esContext->width, esContext->height ); 132 glViewport ( 0, 0, esContext->width, esContext->height );
135 133
136 // Clear the color, depth, and stencil buffers. At this 134 // Clear the color, depth, and stencil buffers. At this
137 // point, the stencil buffer will be 0x1 for all pixels 135 // point, the stencil buffer will be 0x1 for all pixels
138 glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ) ; 136 glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ) ;
139 137
140 // Use the program object 138 // Use the program object
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 // ( 0x2 & 0x1 ) == ( 0x1 & 0x1 ) 205 // ( 0x2 & 0x1 ) == ( 0x1 & 0x1 )
208 // 206 //
209 // The stencil value here will be set to ~((2^s-1) & 0x1), 207 // The stencil value here will be set to ~((2^s-1) & 0x1),
210 // (with the 0x1 being from the stencil clear value), 208 // (with the 0x1 being from the stencil clear value),
211 // where 's' is the number of bits in the stencil buffer 209 // where 's' is the number of bits in the stencil buffer
212 // 210 //
213 glStencilFunc( GL_EQUAL, 0x2, 0x1 ); 211 glStencilFunc( GL_EQUAL, 0x2, 0x1 );
214 glStencilOp( GL_INVERT, GL_KEEP, GL_KEEP ); 212 glStencilOp( GL_INVERT, GL_KEEP, GL_KEEP );
215 offset += 6; 213 offset += 6;
216 glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, offset ); 214 glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, offset );
217
218 // Since we don't know at compile time how many stecil bits are present,
219 // we'll query, and update the value correct value in the
220 // stencilValues arrays for the fourth tests. We'll use this value
221 // later in rendering.
222 glGetIntegerv( GL_STENCIL_BITS, &numStencilBits );
223
224 stencilValues[3] = ~(((1 << numStencilBits) - 1) & 0x1) & 0xff;
225 215
226 // Use the stencil buffer for controlling where rendering will 216 // Use the stencil buffer for controlling where rendering will
227 // occur. We diable writing to the stencil buffer so we 217 // occur. We diable writing to the stencil buffer so we
228 // can test against them without modifying the values we 218 // can test against them without modifying the values we
229 // generated. 219 // generated.
230 glStencilMask( 0x0 ); 220 glStencilMask( 0x0 );
231 offset += 6; 221 offset += 6;
232 for ( i = 0; i < NumTests; ++i ) 222 for ( i = 0; i < NumTests; ++i )
233 { 223 {
234 glStencilFunc( GL_EQUAL, stencilValues[i], 0xff ); 224 glStencilFunc( GL_EQUAL, stencilValues[i], 0xff );
235 glUniform4fv( userData->colorLoc, 1, colors[i] ); 225 glUniform4fv( userData->colorLoc, 1, colors[i] );
236 glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, offset ); 226 glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, offset );
237 } 227 }
238 } 228 }
239 229
240 /// 230 ///
241 // Cleanup 231 // Cleanup
242 // 232 //
243 void stShutDown ( ESContext *esContext ) 233 void stShutDown ( ESContext *esContext )
244 { 234 {
245 STUserData *userData = esContext->userData; 235 STUserData *userData = esContext->userData;
246 236
247 // Delete program object 237 // Delete program object
248 glDeleteProgram ( userData->programObject ); 238 glDeleteProgram ( userData->programObject );
249 239
250 // Delete vertex buffer objects 240 // Delete vertex buffer objects
251 glDeleteBuffers ( 2, userData->vboIds ); 241 glDeleteBuffers ( 2, userData->vboIds );
252 } 242 }
OLDNEW
« no previous file with comments | « no previous file | third_party/gles2_book/README.chromium » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698