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

Side by Side Diff: third_party/gles_book_examples/Chapter_2/Hello_Triangle/Hello_Triangle.c

Issue 543002: Renamed gles_book_examples to gles2_book to make it shorter and more correct.... (Closed) Base URL: svn://svn.chromium.org/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
(Empty)
1 //
2 // Book: OpenGL(R) ES 2.0 Programming Guide
3 // Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
4 // ISBN-10: 0321502795
5 // ISBN-13: 9780321502797
6 // Publisher: Addison-Wesley Professional
7 // URLs: http://safari.informit.com/9780321563835
8 // http://www.opengles-book.com
9 //
10
11 // Hello_Triangle.c
12 //
13 // This is a simple example that draws a single triangle with
14 // a minimal vertex/fragment shader. The purpose of this
15 // example is to demonstrate the basic concepts of
16 // OpenGL ES 2.0 rendering.
17
18 #include "Hello_Triangle.h"
19
20 #include <stdlib.h>
21
22 ///
23 // Initialize the shader and program object
24 //
25 int htInit ( ESContext *esContext )
26 {
27 HTUserData *userData = esContext->userData;
28
29 GLbyte vShaderStr[] =
30 "attribute vec4 vPosition; \n"
31 "void main() \n"
32 "{ \n"
33 " gl_Position = vPosition; \n"
34 "} \n";
35
36 // TODO(alokp): Shaders containing "precision" do not compile.
37 GLbyte fShaderStr[] =
38 "//precision mediump float; \n"
39 "void main() \n"
40 "{ \n"
41 " gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n"
42 "} \n";
43
44 GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,
45 -0.5f, -0.5f, 0.0f,
46 0.5f, -0.5f, 0.0f };
47
48 userData->programObject = esLoadProgram ( vShaderStr, fShaderStr );
49 if ( userData->programObject == 0 ) return FALSE;
50
51 // Bind vPosition to attribute 0
52 glBindAttribLocation ( userData->programObject, 0, "vPosition" );
53
54 glGenBuffers ( 1, &userData->vbo );
55 glBindBuffer ( GL_ARRAY_BUFFER, userData->vbo );
56 glBufferData ( GL_ARRAY_BUFFER, sizeof(vVertices), NULL, GL_STATIC_DRAW );
57 glBufferSubData ( GL_ARRAY_BUFFER, 0, sizeof(vVertices), vVertices );
58
59 glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );
60 return TRUE;
61 }
62
63 ///
64 // Draw a triangle using the shader pair created in Init()
65 //
66 void htDraw ( ESContext *esContext )
67 {
68 HTUserData *userData = esContext->userData;
69
70 // Set the viewport
71 glViewport ( 0, 0, esContext->width, esContext->height );
72
73 // Clear the color buffer
74 glClear ( GL_COLOR_BUFFER_BIT );
75
76 // Use the program object
77 glUseProgram ( userData->programObject );
78
79 // Load the vertex data
80 glBindBuffer ( GL_ARRAY_BUFFER, userData->vbo );
81 glEnableVertexAttribArray ( 0 );
82 glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, 0 );
83
84 glDrawArrays ( GL_TRIANGLES, 0, 3 );
85
86 // Nothing is drawn or application crashes without glFlush.
87 // TODO(alokp): glFlush should not be necessary with SwapBuffers().
88 glFlush();
89 }
90
91 ///
92 // Cleanup
93 //
94 void htShutDown ( ESContext *esContext )
95 {
96 HTUserData *userData = esContext->userData;
97
98 // Delete program object
99 if ( userData->programObject != 0 )
100 {
101 glDeleteProgram ( userData->programObject );
102 userData->programObject = 0;
103 }
104 if ( userData->vbo != 0 )
105 {
106 glDeleteBuffers ( 1, &userData->vbo );
107 userData->vbo = 0;
108 }
109 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698