Index: third_party/gles_book_examples/Chapter_8/Simple_VertexShader/Simple_VertexShader.c |
=================================================================== |
--- third_party/gles_book_examples/Chapter_8/Simple_VertexShader/Simple_VertexShader.c (revision 35873) |
+++ third_party/gles_book_examples/Chapter_8/Simple_VertexShader/Simple_VertexShader.c (working copy) |
@@ -1,151 +0,0 @@ |
-// |
-// Book: OpenGL(R) ES 2.0 Programming Guide |
-// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner |
-// ISBN-10: 0321502795 |
-// ISBN-13: 9780321502797 |
-// Publisher: Addison-Wesley Professional |
-// URLs: http://safari.informit.com/9780321563835 |
-// http://www.opengles-book.com |
-// |
- |
-// Simple_VertexShader.c |
-// |
-// This is a simple example that draws a rotating cube in perspective |
-// using a vertex shader to transform the object |
-// |
- |
-#include "Simple_VertexShader.h" |
-#include <stdlib.h> |
- |
-/// |
-// Initialize the shader and program object |
-// |
-int svsInit ( ESContext *esContext ) |
-{ |
- SVSUserData *userData = esContext->userData; |
- GLbyte vShaderStr[] = |
- "uniform mat4 u_mvpMatrix; \n" |
- "attribute vec4 a_position; \n" |
- "void main() \n" |
- "{ \n" |
- " gl_Position = u_mvpMatrix * a_position; \n" |
- "} \n"; |
- |
- // TODO(alokp): Shaders containing "precision" do not compile. |
- GLbyte fShaderStr[] = |
- "//precision mediump float; \n" |
- "void main() \n" |
- "{ \n" |
- " gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); \n" |
- "} \n"; |
- |
- // Load the shaders and get a linked program object |
- userData->programObject = esLoadProgram ( vShaderStr, fShaderStr ); |
- |
- // Get the attribute locations |
- userData->positionLoc = glGetAttribLocation ( userData->programObject, "a_position" ); |
- |
- // Get the uniform locations |
- userData->mvpLoc = glGetUniformLocation( userData->programObject, "u_mvpMatrix" ); |
- |
- // Generate the vertex data |
- userData->numIndices = esGenCube( 1.0, &userData->vertices, |
- NULL, NULL, &userData->indices ); |
- |
- // Starting rotation angle for the cube |
- userData->angle = 45.0f; |
- |
- glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ); |
- return TRUE; |
-} |
- |
-/// |
-// Update MVP matrix based on time |
-// |
-void svsUpdate ( ESContext *esContext, float deltaTime ) |
-{ |
- SVSUserData *userData = (SVSUserData*) esContext->userData; |
- ESMatrix perspective; |
- ESMatrix modelview; |
- float aspect; |
- |
- // Compute a rotation angle based on time to rotate the cube |
- userData->angle += ( deltaTime * 40.0f ); |
- if( userData->angle >= 360.0f ) |
- userData->angle -= 360.0f; |
- |
- // Compute the window aspect ratio |
- aspect = (GLfloat) esContext->width / (GLfloat) esContext->height; |
- |
- // Generate a perspective matrix with a 60 degree FOV |
- esMatrixLoadIdentity( &perspective ); |
- esPerspective( &perspective, 60.0f, aspect, 1.0f, 20.0f ); |
- |
- // Generate a model view matrix to rotate/translate the cube |
- esMatrixLoadIdentity( &modelview ); |
- |
- // Translate away from the viewer |
- esTranslate( &modelview, 0.0, 0.0, -2.0 ); |
- |
- // Rotate the cube |
- esRotate( &modelview, userData->angle, 1.0, 0.0, 1.0 ); |
- |
- // Compute the final MVP by multiplying the |
- // modevleiw and perspective matrices together |
- esMatrixMultiply( &userData->mvpMatrix, &modelview, &perspective ); |
-} |
- |
-/// |
-// Draw a triangle using the shader pair created in Init() |
-// |
-void svsDraw ( ESContext *esContext ) |
-{ |
- SVSUserData *userData = esContext->userData; |
- |
- // Set the viewport |
- glViewport ( 0, 0, esContext->width, esContext->height ); |
- |
- |
- // Clear the color buffer |
- glClear ( GL_COLOR_BUFFER_BIT ); |
- |
- // Use the program object |
- glUseProgram ( userData->programObject ); |
- |
- // Load the vertex position |
- glVertexAttribPointer ( userData->positionLoc, 3, GL_FLOAT, |
- GL_FALSE, 3 * sizeof(GLfloat), userData->vertices ); |
- |
- glEnableVertexAttribArray ( userData->positionLoc ); |
- |
- |
- // Load the MVP matrix |
- glUniformMatrix4fv( userData->mvpLoc, 1, GL_FALSE, (GLfloat*) &userData->mvpMatrix.m[0][0] ); |
- |
- // Draw the cube |
- glDrawElements ( GL_TRIANGLES, userData->numIndices, GL_UNSIGNED_INT, userData->indices ); |
- |
- // TODO(alokp): glFlush should not be necessary with SwapBuffers. |
- glFlush(); |
-} |
- |
-/// |
-// Cleanup |
-// |
-void svsShutDown ( ESContext *esContext ) |
-{ |
- SVSUserData *userData = esContext->userData; |
- |
- if ( userData->vertices != NULL ) |
- { |
- free ( userData->vertices ); |
- } |
- |
- if ( userData->indices != NULL ) |
- { |
- free ( userData->indices ); |
- } |
- |
- // Delete program object |
- glDeleteProgram ( userData->programObject ); |
-} |