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

Side by Side Diff: third_party/gles_book_examples/Common/Source/esUtil.c

Issue 525070: Resubmit 35500: Added an application framework for demos. Ported hellotriangl... (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 // ESUtil.c 11 // ESUtil.c
12 // 12 //
13 // A utility library for OpenGL ES. This library provides a 13 // 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 17
18 /// 18 ///
19 // Includes 19 // Includes
20 // 20 //
21 #include <stdio.h> 21 #include <stdio.h>
22 #include <stdlib.h> 22 #include <stdlib.h>
23 #include <stdarg.h>
24 #include <string.h>
25
23 #include <GLES2/gl2.h> 26 #include <GLES2/gl2.h>
24 #include <EGL/egl.h> 27
25 #include "esUtil.h" 28 #include "esUtil.h"
26 #include "esUtil_win.h" 29 #include "esUtil_win.h"
27 30
28
29
30
31 ///
32 // CreateEGLContext()
33 //
34 // Creates an EGL rendering context and all associated elements
35 //
36 EGLBoolean CreateEGLContext ( EGLNativeWindowType hWnd, EGLDisplay* eglDisplay,
37 EGLContext* eglContext, EGLSurface* eglSurface,
38 EGLint attribList[])
39 {
40 EGLint numConfigs;
41 EGLint majorVersion;
42 EGLint minorVersion;
43 EGLDisplay display;
44 EGLContext context;
45 EGLSurface surface;
46 EGLConfig config;
47 EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE };
48
49 // Get Display
50 display = eglGetDisplay(GetDC(hWnd));
51 if ( display == EGL_NO_DISPLAY )
52 {
53 return EGL_FALSE;
54 }
55
56 // Initialize EGL
57 if ( !eglInitialize(display, &majorVersion, &minorVersion) )
58 {
59 return EGL_FALSE;
60 }
61
62 // Get configs
63 if ( !eglGetConfigs(display, NULL, 0, &numConfigs) )
64 {
65 return EGL_FALSE;
66 }
67
68 // Choose config
69 if ( !eglChooseConfig(display, attribList, &config, 1, &numConfigs) )
70 {
71 return EGL_FALSE;
72 }
73
74 // Create a surface
75 surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType)hWnd, NULL);
76 if ( surface == EGL_NO_SURFACE )
77 {
78 return EGL_FALSE;
79 }
80
81 // Create a GL context
82 context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs );
83 if ( context == EGL_NO_CONTEXT )
84 {
85 return EGL_FALSE;
86 }
87
88 // Make the context current
89 if ( !eglMakeCurrent(display, surface, surface, context) )
90 {
91 return EGL_FALSE;
92 }
93
94 *eglDisplay = display;
95 *eglSurface = surface;
96 *eglContext = context;
97 return EGL_TRUE;
98 }
99
100 //////////////////////////////////////////////////////////////////
101 //
102 // Public Functions
103 //
104 //
105
106 /// 31 ///
107 // esInitContext() 32 // esInitContext()
108 // 33 //
109 // Initialize ES utility context. This must be called before calling any o ther 34 // Initialize ES utility context. This must be called before calling any o ther
110 // functions. 35 // functions.
111 // 36 //
112 void ESUTIL_API esInitContext ( ESContext *esContext ) 37 void esInitContext ( ESContext *esContext )
113 { 38 {
114 if ( esContext != NULL ) 39 if ( esContext != NULL )
115 { 40 {
116 memset( esContext, 0, sizeof( ESContext) ); 41 memset( esContext, 0, sizeof( ESContext) );
117 } 42 }
118 } 43 }
119 44
120 /// 45 ///
121 // esCreateWindow()
122 //
123 // title - name for title bar of window
124 // width - width of window to create
125 // height - height of window to create
126 // flags - bitwise or of window creation flags
127 // ES_WINDOW_ALPHA - specifies that the framebuffer should have a lpha
128 // ES_WINDOW_DEPTH - specifies that a depth buffer should be crea ted
129 // ES_WINDOW_STENCIL - specifies that a stencil buffer should be cr eated
130 // ES_WINDOW_MULTISAMPLE - specifies that a multi-sample buffer should be created
131 //
132 GLboolean ESUTIL_API esCreateWindow ( ESContext *esContext, const char* title, G Lint width, GLint height, GLuint flags )
133 {
134 EGLint attribList[] =
135 {
136 EGL_RED_SIZE, 5,
137 EGL_GREEN_SIZE, 6,
138 EGL_BLUE_SIZE, 5,
139 EGL_ALPHA_SIZE, (flags & ES_WINDOW_ALPHA) ? 8 : EGL_DONT_CARE,
140 EGL_DEPTH_SIZE, (flags & ES_WINDOW_DEPTH) ? 8 : EGL_DONT_CARE,
141 EGL_STENCIL_SIZE, (flags & ES_WINDOW_STENCIL) ? 8 : EGL_DONT_CARE,
142 EGL_SAMPLE_BUFFERS, (flags & ES_WINDOW_MULTISAMPLE) ? 1 : 0,
143 EGL_NONE
144 };
145
146 if ( esContext == NULL )
147 {
148 return GL_FALSE;
149 }
150
151 esContext->width = width;
152 esContext->height = height;
153
154 if ( !WinCreate ( esContext, title) )
155 {
156 return GL_FALSE;
157 }
158
159
160 if ( !CreateEGLContext ( esContext->hWnd,
161 &esContext->eglDisplay,
162 &esContext->eglContext,
163 &esContext->eglSurface,
164 attribList) )
165 {
166 return GL_FALSE;
167 }
168
169
170 return GL_TRUE;
171 }
172
173 ///
174 // esMainLoop()
175 //
176 // Start the main loop for the OpenGL ES application
177 //
178 void ESUTIL_API esMainLoop ( ESContext *esContext )
179 {
180 WinLoop ( esContext );
181 }
182
183
184 ///
185 // esRegisterDrawFunc()
186 //
187 void ESUTIL_API esRegisterDrawFunc ( ESContext *esContext, void (ESCALLBACK *dra wFunc) (ESContext* ) )
188 {
189 esContext->drawFunc = drawFunc;
190 }
191
192
193 ///
194 // esRegisterUpdateFunc()
195 //
196 void ESUTIL_API esRegisterUpdateFunc ( ESContext *esContext, void (ESCALLBACK *u pdateFunc) ( ESContext*, float ) )
197 {
198 esContext->updateFunc = updateFunc;
199 }
200
201
202 ///
203 // esRegisterKeyFunc()
204 //
205 void ESUTIL_API esRegisterKeyFunc ( ESContext *esContext,
206 void (ESCALLBACK *keyFunc) (ESContext*, unsi gned char, int, int ) )
207 {
208 esContext->keyFunc = keyFunc;
209 }
210
211
212 ///
213 // esLogMessage() 46 // esLogMessage()
214 // 47 //
215 // Log an error message to the debug output for the platform 48 // Log an error message to the debug output for the platform
216 // 49 //
217 void ESUTIL_API esLogMessage ( const char *formatStr, ... ) 50 void esLogMessage ( const char *formatStr, ... )
218 { 51 {
219 va_list params; 52 va_list params;
220 char buf[BUFSIZ]; 53 char buf[BUFSIZ];
221 54
222 va_start ( params, formatStr ); 55 va_start ( params, formatStr );
223 vsprintf_s ( buf, sizeof(buf), formatStr, params ); 56 vsprintf_s ( buf, sizeof(buf), formatStr, params );
224 57
225 printf ( "%s", buf ); 58 printf ( "%s", buf );
226 59
227 va_end ( params ); 60 va_end ( params );
228 } 61 }
229 62
230
231 /// 63 ///
232 // esLoadTGA() 64 // esLoadTGA()
233 // 65 //
234 // Loads a 24-bit TGA image from a file 66 // Loads a 24-bit TGA image from a file
235 // 67 //
236 char* ESUTIL_API esLoadTGA ( char *fileName, int *width, int *height ) 68 char* esLoadTGA ( char *fileName, int *width, int *height )
237 { 69 {
238 char *buffer; 70 char *buffer;
239 71
240 if ( WinTGALoad ( fileName, &buffer, width, height ) ) 72 if ( WinTGALoad ( fileName, &buffer, width, height ) )
241 { 73 {
242 return buffer; 74 return buffer;
243 } 75 }
244 76
245 return NULL; 77 return NULL;
246 } 78 }
OLDNEW
« no previous file with comments | « third_party/gles_book_examples/Common/Source/esTransform.c ('k') | third_party/gles_book_examples/gles_book_examples.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698