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

Side by Side Diff: third_party/gles_book_examples/Common/Include/esUtil.h

Issue 465051: Added an application framework for demos. Ported hello-triangle example in Op... (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
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
11 // 11 //
12 /// \file ESUtil.h 12 /// \file ESUtil.h
13 /// \brief A utility library for OpenGL ES. This library provides a 13 /// \brief A utility library for OpenGL ES. This library provides a
14 /// basic common framework for the example applications in the 14 /// basic common framework for the example applications in the
15 /// OpenGL ES 2.0 Programming Guide. 15 /// OpenGL ES 2.0 Programming Guide.
16 // 16 //
17 #ifndef ESUTIL_H 17 #ifndef ESUTIL_H
18 #define ESUTIL_H 18 #define ESUTIL_H
19 19
20 /// 20 ///
21 // Includes 21 // Includes
22 // 22 //
23 #include <GLES2/gl2.h> 23 #include <GLES2/gl2.h>
24 #include <EGL/egl.h>
25 24
26 #ifdef __cplusplus 25 #ifdef __cplusplus
26 extern "C" {
27 #endif // __cplusplus
27 28
28 extern "C" { 29 #ifndef FALSE
29 #endif 30 #define FALSE 0
30 31 #endif // FALSE
31 32 #ifndef TRUE
32 /// 33 #define TRUE 1
33 // Macros 34 #endif // TRUE
34 //
35 #define ESUTIL_API __cdecl
36 #define ESCALLBACK __cdecl
37
38
39 /// esCreateWindow flag - RGB color buffer
40 #define ES_WINDOW_RGB 0
41 /// esCreateWindow flag - ALPHA color buffer
42 #define ES_WINDOW_ALPHA 1
43 /// esCreateWindow flag - depth buffer
44 #define ES_WINDOW_DEPTH 2
45 /// esCreateWindow flag - stencil buffer
46 #define ES_WINDOW_STENCIL 4
47 /// esCreateWindow flat - multi-sample buffer
48 #define ES_WINDOW_MULTISAMPLE 8
49
50
51 ///
52 // Types
53 //
54 35
55 typedef struct 36 typedef struct
56 { 37 {
57 GLfloat m[4][4]; 38 GLfloat m[4][4];
58 } ESMatrix; 39 } ESMatrix;
59 40
60 typedef struct 41 typedef struct
61 { 42 {
62 /// Put your user data here... 43 /// Put your user data here...
63 void* userData; 44 void* userData;
64 45
65 /// Window width 46 /// Window width
66 GLint width; 47 GLint width;
67 48
68 /// Window height 49 /// Window height
69 GLint height; 50 GLint height;
70
71 /// Window handle
72 EGLNativeWindowType hWnd;
73
74 /// EGL display
75 EGLDisplay eglDisplay;
76
77 /// EGL context
78 EGLContext eglContext;
79
80 /// EGL surface
81 EGLSurface eglSurface;
82
83 /// Callbacks
84 void (ESCALLBACK *drawFunc) ( void* );
85 void (ESCALLBACK *keyFunc) ( void*, unsigned char, int, int );
86 void (ESCALLBACK *updateFunc) ( void*, float deltaTime );
87 } ESContext; 51 } ESContext;
88 52
89
90 ///
91 // Public Functions
92 //
93
94 // 53 //
95 /// 54 ///
96 /// \brief Initialize ES framework context. This must be called before calling any other functions. 55 /// \brief Initialize ES framework context. This must be called before calling any other functions.
97 /// \param esContext Application context 56 /// \param esContext Application context
98 // 57 //
99 void ESUTIL_API esInitContext ( ESContext *esContext ); 58 extern void esInitContext ( ESContext *esContext );
100 59
101 // 60 //
102 /// \brief Create a window with the specified parameters
103 /// \param esContext Application context
104 /// \param title Name for title bar of window
105 /// \param width Width in pixels of window to create
106 /// \param height Height in pixels of window to create
107 /// \param flags Bitfield for the window creation flags
108 /// ES_WINDOW_RGB - specifies that the color buffer should have R,G, B channels
109 /// ES_WINDOW_ALPHA - specifies that the color buffer should have alph a
110 /// ES_WINDOW_DEPTH - specifies that a depth buffer should be created
111 /// ES_WINDOW_STENCIL - specifies that a stencil buffer should be create d
112 /// ES_WINDOW_MULTISAMPLE - specifies that a multi-sample buffer should be created
113 /// \return GL_TRUE if window creation is succesful, GL_FALSE otherwise
114 GLboolean ESUTIL_API esCreateWindow ( ESContext *esContext, const char *title, G Lint width, GLint height, GLuint flags );
115
116 //
117 /// \brief Start the main loop for the OpenGL ES application
118 /// \param esContext Application context
119 //
120 void ESUTIL_API esMainLoop ( ESContext *esContext );
121
122 //
123 /// \brief Register a draw callback function to be used to render each frame
124 /// \param esContext Application context
125 /// \param drawFunc Draw callback function that will be used to render the scene
126 //
127 void ESUTIL_API esRegisterDrawFunc ( ESContext *esContext, void (ESCALLBACK *dra wFunc) ( ESContext* ) );
128
129 //
130 /// \brief Register an update callback function to be used to update on each tim e step
131 /// \param esContext Application context
132 /// \param updateFunc Update callback function that will be used to render the s cene
133 //
134 void ESUTIL_API esRegisterUpdateFunc ( ESContext *esContext, void (ESCALLBACK *u pdateFunc) ( ESContext*, float ) );
135
136 //
137 /// \brief Register an keyboard input processing callback function
138 /// \param esContext Application context
139 /// \param keyFunc Key callback function for application processing of keyboard input
140 //
141 void ESUTIL_API esRegisterKeyFunc ( ESContext *esContext,
142 void (ESCALLBACK *drawFunc) ( ESContext*, un signed char, int, int ) );
143 //
144 /// \brief Log a message to the debug output for the platform 61 /// \brief Log a message to the debug output for the platform
145 /// \param formatStr Format string for error log. 62 /// \param formatStr Format string for error log.
146 // 63 //
147 void ESUTIL_API esLogMessage ( const char *formatStr, ... ); 64 extern void esLogMessage ( const char *formatStr, ... );
148 65
149 // 66 //
150 /// 67 ///
151 /// \brief Load a shader, check for compile errors, print error messages to outp ut log 68 /// \brief Load a shader, check for compile errors, print error messages to outp ut log
152 /// \param type Type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER) 69 /// \param type Type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER)
153 /// \param shaderSrc Shader source string 70 /// \param shaderSrc Shader source string
154 /// \return A new shader object on success, 0 on failure 71 /// \return A new shader object on success, 0 on failure
155 // 72 //
156 GLuint ESUTIL_API esLoadShader ( GLenum type, const char *shaderSrc ); 73 extern GLuint esLoadShader ( GLenum type, const char *shaderSrc );
157 74
158 // 75 //
159 /// 76 ///
160 /// \brief Load a vertex and fragment shader, create a program object, link prog ram. 77 /// \brief Load a vertex and fragment shader, create a program object, link prog ram.
161 /// Errors output to log. 78 /// Errors output to log.
162 /// \param vertShaderSrc Vertex shader source code 79 /// \param vertShaderSrc Vertex shader source code
163 /// \param fragShaderSrc Fragment shader source code 80 /// \param fragShaderSrc Fragment shader source code
164 /// \return A new program object linked with the vertex/fragment shader pair, 0 on failure 81 /// \return A new program object linked with the vertex/fragment shader pair, 0 on failure
165 // 82 //
166 GLuint ESUTIL_API esLoadProgram ( const char *vertShaderSrc, const char *fragSha derSrc ); 83 extern GLuint esLoadProgram ( const char *vertShaderSrc, const char *fragShaderS rc );
167 84
168 85
169 // 86 //
170 /// \brief Generates geometry for a sphere. Allocates memory for the vertex dat a and stores 87 /// \brief Generates geometry for a sphere. Allocates memory for the vertex dat a and stores
171 /// the results in the arrays. Generate index list for a TRIANGLE_STRIP 88 /// the results in the arrays. Generate index list for a TRIANGLE_STRIP
172 /// \param numSlices The number of slices in the sphere 89 /// \param numSlices The number of slices in the sphere
173 /// \param vertices If not NULL, will contain array of float3 positions 90 /// \param vertices If not NULL, will contain array of float3 positions
174 /// \param normals If not NULL, will contain array of float3 normals 91 /// \param normals If not NULL, will contain array of float3 normals
175 /// \param texCoords If not NULL, will contain array of float2 texCoords 92 /// \param texCoords If not NULL, will contain array of float2 texCoords
176 /// \param indices If not NULL, will contain the array of indices for the triang le strip 93 /// \param indices If not NULL, will contain the array of indices for the triang le strip
177 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array 94 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
178 /// if it is not NULL ) as a GL_TRIANGLE_STRIP 95 /// if it is not NULL ) as a GL_TRIANGLE_STRIP
179 // 96 //
180 int ESUTIL_API esGenSphere ( int numSlices, float radius, GLfloat **vertices, GL float **normals, 97 extern int esGenSphere ( int numSlices, float radius, GLfloat **vertices, GLfloa t **normals,
181 GLfloat **texCoords, GLuint **indices ); 98 GLfloat **texCoords, GLuint **indices );
182 99
183 // 100 //
184 /// \brief Generates geometry for a cube. Allocates memory for the vertex data and stores 101 /// \brief Generates geometry for a cube. Allocates memory for the vertex data and stores
185 /// the results in the arrays. Generate index list for a TRIANGLES 102 /// the results in the arrays. Generate index list for a TRIANGLES
186 /// \param scale The size of the cube, use 1.0 for a unit cube. 103 /// \param scale The size of the cube, use 1.0 for a unit cube.
187 /// \param vertices If not NULL, will contain array of float3 positions 104 /// \param vertices If not NULL, will contain array of float3 positions
188 /// \param normals If not NULL, will contain array of float3 normals 105 /// \param normals If not NULL, will contain array of float3 normals
189 /// \param texCoords If not NULL, will contain array of float2 texCoords 106 /// \param texCoords If not NULL, will contain array of float2 texCoords
190 /// \param indices If not NULL, will contain the array of indices for the triang le strip 107 /// \param indices If not NULL, will contain the array of indices for the triang le strip
191 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array 108 /// \return The number of indices required for rendering the buffers (the number of indices stored in the indices array
192 /// if it is not NULL ) as a GL_TRIANGLES 109 /// if it is not NULL ) as a GL_TRIANGLES
193 // 110 //
194 int ESUTIL_API esGenCube ( float scale, GLfloat **vertices, GLfloat **normals, 111 extern int esGenCube ( float scale, GLfloat **vertices, GLfloat **normals,
195 GLfloat **texCoords, GLuint **indices ); 112 GLfloat **texCoords, GLuint **indices );
196 113
197 // 114 //
198 /// \brief Loads a 24-bit TGA image from a file 115 /// \brief Loads a 24-bit TGA image from a file
199 /// \param fileName Name of the file on disk 116 /// \param fileName Name of the file on disk
200 /// \param width Width of loaded image in pixels 117 /// \param width Width of loaded image in pixels
201 /// \param height Height of loaded image in pixels 118 /// \param height Height of loaded image in pixels
202 /// \return Pointer to loaded image. NULL on failure. 119 /// \return Pointer to loaded image. NULL on failure.
203 // 120 //
204 char* ESUTIL_API esLoadTGA ( char *fileName, int *width, int *height ); 121 extern char* esLoadTGA ( char *fileName, int *width, int *height );
205 122
206 123
207 // 124 //
208 /// \brief multiply matrix specified by result with a scaling matrix and return new matrix in result 125 /// \brief multiply matrix specified by result with a scaling matrix and return new matrix in result
209 /// \param result Specifies the input matrix. Scaled matrix is returned in resu lt. 126 /// \param result Specifies the input matrix. Scaled matrix is returned in resu lt.
210 /// \param sx, sy, sz Scale factors along the x, y and z axes respectively 127 /// \param sx, sy, sz Scale factors along the x, y and z axes respectively
211 // 128 //
212 void ESUTIL_API esScale(ESMatrix *result, GLfloat sx, GLfloat sy, GLfloat sz); 129 extern void esScale(ESMatrix *result, GLfloat sx, GLfloat sy, GLfloat sz);
213 130
214 // 131 //
215 /// \brief multiply matrix specified by result with a translation matrix and ret urn new matrix in result 132 /// \brief multiply matrix specified by result with a translation matrix and ret urn new matrix in result
216 /// \param result Specifies the input matrix. Translated matrix is returned in result. 133 /// \param result Specifies the input matrix. Translated matrix is returned in result.
217 /// \param tx, ty, tz Scale factors along the x, y and z axes respectively 134 /// \param tx, ty, tz Scale factors along the x, y and z axes respectively
218 // 135 //
219 void ESUTIL_API esTranslate(ESMatrix *result, GLfloat tx, GLfloat ty, GLfloat tz ); 136 extern void esTranslate(ESMatrix *result, GLfloat tx, GLfloat ty, GLfloat tz);
220 137
221 // 138 //
222 /// \brief multiply matrix specified by result with a rotation matrix and return new matrix in result 139 /// \brief multiply matrix specified by result with a rotation matrix and return new matrix in result
223 /// \param result Specifies the input matrix. Rotated matrix is returned in res ult. 140 /// \param result Specifies the input matrix. Rotated matrix is returned in res ult.
224 /// \param angle Specifies the angle of rotation, in degrees. 141 /// \param angle Specifies the angle of rotation, in degrees.
225 /// \param x, y, z Specify the x, y and z coordinates of a vector, respectively 142 /// \param x, y, z Specify the x, y and z coordinates of a vector, respectively
226 // 143 //
227 void ESUTIL_API esRotate(ESMatrix *result, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); 144 extern void esRotate(ESMatrix *result, GLfloat angle, GLfloat x, GLfloat y, GLfl oat z);
228 145
229 // 146 //
230 // \brief multiply matrix specified by result with a perspective matrix and retu rn new matrix in result 147 // \brief multiply matrix specified by result with a perspective matrix and retu rn new matrix in result
231 /// \param result Specifies the input matrix. new matrix is returned in result. 148 /// \param result Specifies the input matrix. new matrix is returned in result.
232 /// \param left, right Coordinates for the left and right vertical clipping plan es 149 /// \param left, right Coordinates for the left and right vertical clipping plan es
233 /// \param bottom, top Coordinates for the bottom and top horizontal clipping pl anes 150 /// \param bottom, top Coordinates for the bottom and top horizontal clipping pl anes
234 /// \param nearZ, farZ Distances to the near and far depth clipping planes. Bot h distances must be positive. 151 /// \param nearZ, farZ Distances to the near and far depth clipping planes. Bot h distances must be positive.
235 // 152 //
236 void ESUTIL_API esFrustum(ESMatrix *result, float left, float right, float botto m, float top, float nearZ, float farZ); 153 extern void esFrustum(ESMatrix *result, float left, float right, float bottom, f loat top, float nearZ, float farZ);
237 154
238 // 155 //
239 /// \brief multiply matrix specified by result with a perspective matrix and ret urn new matrix in result 156 /// \brief multiply matrix specified by result with a perspective matrix and ret urn new matrix in result
240 /// \param result Specifies the input matrix. new matrix is returned in result. 157 /// \param result Specifies the input matrix. new matrix is returned in result.
241 /// \param fovy Field of view y angle in degrees 158 /// \param fovy Field of view y angle in degrees
242 /// \param aspect Aspect ratio of screen 159 /// \param aspect Aspect ratio of screen
243 /// \param nearZ Near plane distance 160 /// \param nearZ Near plane distance
244 /// \param farZ Far plane distance 161 /// \param farZ Far plane distance
245 // 162 //
246 void ESUTIL_API esPerspective(ESMatrix *result, float fovy, float aspect, float nearZ, float farZ); 163 extern void esPerspective(ESMatrix *result, float fovy, float aspect, float near Z, float farZ);
247 164
248 // 165 //
249 /// \brief multiply matrix specified by result with a perspective matrix and ret urn new matrix in result 166 /// \brief multiply matrix specified by result with a perspective matrix and ret urn new matrix in result
250 /// \param result Specifies the input matrix. new matrix is returned in result. 167 /// \param result Specifies the input matrix. new matrix is returned in result.
251 /// \param left, right Coordinates for the left and right vertical clipping plan es 168 /// \param left, right Coordinates for the left and right vertical clipping plan es
252 /// \param bottom, top Coordinates for the bottom and top horizontal clipping pl anes 169 /// \param bottom, top Coordinates for the bottom and top horizontal clipping pl anes
253 /// \param nearZ, farZ Distances to the near and far depth clipping planes. The se values are negative if plane is behind the viewer 170 /// \param nearZ, farZ Distances to the near and far depth clipping planes. The se values are negative if plane is behind the viewer
254 // 171 //
255 void ESUTIL_API esOrtho(ESMatrix *result, float left, float right, float bottom, float top, float nearZ, float farZ); 172 extern void esOrtho(ESMatrix *result, float left, float right, float bottom, flo at top, float nearZ, float farZ);
256 173
257 // 174 //
258 /// \brief perform the following operation - result matrix = srcA matrix * srcB matrix 175 /// \brief perform the following operation - result matrix = srcA matrix * srcB matrix
259 /// \param result Returns multiplied matrix 176 /// \param result Returns multiplied matrix
260 /// \param srcA, srcB Input matrices to be multiplied 177 /// \param srcA, srcB Input matrices to be multiplied
261 // 178 //
262 void ESUTIL_API esMatrixMultiply(ESMatrix *result, ESMatrix *srcA, ESMatrix *src B); 179 extern void esMatrixMultiply(ESMatrix *result, ESMatrix *srcA, ESMatrix *srcB);
263 180
264 // 181 //
265 //// \brief return an indentity matrix 182 //// \brief return an indentity matrix
266 //// \param result returns identity matrix 183 //// \param result returns identity matrix
267 // 184 //
268 void ESUTIL_API esMatrixLoadIdentity(ESMatrix *result); 185 extern void esMatrixLoadIdentity(ESMatrix *result);
269 186
270 #ifdef __cplusplus 187 #ifdef __cplusplus
271 } 188 }
272 #endif 189 #endif // __cplusplus
273 190
274 #endif // ESUTIL_H 191 #endif // ESUTIL_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698