Mercurial > sdl-ios-xcode
comparison android/testproject/jni/importgl.c @ 4704:611d39792201
Added minimal test project
author | Paul Hunkin <paul@bieh.net> |
---|---|
date | Thu, 17 Jun 2010 22:19:27 +1200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4703:c93b44ddc63e | 4704:611d39792201 |
---|---|
1 /* San Angeles Observation OpenGL ES version example | |
2 * Copyright 2004-2005 Jetro Lauha | |
3 * All rights reserved. | |
4 * Web: http://iki.fi/jetro/ | |
5 * | |
6 * This source is free software; you can redistribute it and/or | |
7 * modify it under the terms of EITHER: | |
8 * (1) The GNU Lesser General Public License as published by the Free | |
9 * Software Foundation; either version 2.1 of the License, or (at | |
10 * your option) any later version. The text of the GNU Lesser | |
11 * General Public License is included with this source in the | |
12 * file LICENSE-LGPL.txt. | |
13 * (2) The BSD-style license that is included with this source in | |
14 * the file LICENSE-BSD.txt. | |
15 * | |
16 * This source is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files | |
19 * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. | |
20 * | |
21 * $Id: importgl.c,v 1.4 2005/02/08 18:42:55 tonic Exp $ | |
22 * $Revision: 1.4 $ | |
23 */ | |
24 | |
25 #undef WIN32 | |
26 #undef LINUX | |
27 #ifdef _MSC_VER | |
28 // Desktop or mobile Win32 environment: | |
29 #define WIN32 | |
30 #else | |
31 // Linux environment: | |
32 #define LINUX | |
33 #endif | |
34 | |
35 #ifndef DISABLE_IMPORTGL | |
36 | |
37 #if defined(WIN32) | |
38 #define WIN32_LEAN_AND_MEAN | |
39 #include <windows.h> | |
40 #include <tchar.h> | |
41 static HMODULE sGLESDLL = NULL; | |
42 #endif // WIN32 | |
43 | |
44 #ifdef LINUX | |
45 #include <stdlib.h> | |
46 #include <dlfcn.h> | |
47 static void *sGLESSO = NULL; | |
48 #endif // LINUX | |
49 | |
50 #endif /* DISABLE_IMPORTGL */ | |
51 | |
52 #define IMPORTGL_NO_FNPTR_DEFS | |
53 #define IMPORTGL_API | |
54 #define IMPORTGL_FNPTRINIT = NULL | |
55 #include "importgl.h" | |
56 | |
57 | |
58 /* Imports function pointers to selected function calls in OpenGL ES Common | |
59 * or Common Lite profile DLL or shared object. The function pointers are | |
60 * stored as global symbols with equivalent function name but prefixed with | |
61 * "funcPtr_". Standard gl/egl calls are redirected to the function pointers | |
62 * with preprocessor macros (see importgl.h). | |
63 */ | |
64 int importGLInit() | |
65 { | |
66 int result = 1; | |
67 | |
68 #ifndef DISABLE_IMPORTGL | |
69 | |
70 #undef IMPORT_FUNC | |
71 | |
72 #ifdef WIN32 | |
73 sGLESDLL = LoadLibrary(_T("libGLES_CM.dll")); | |
74 if (sGLESDLL == NULL) | |
75 sGLESDLL = LoadLibrary(_T("libGLES_CL.dll")); | |
76 if (sGLESDLL == NULL) | |
77 return 0; // Cannot find OpenGL ES Common or Common Lite DLL. | |
78 | |
79 /* The following fetches address to each egl & gl function call | |
80 * and stores it to the related function pointer. Casting through | |
81 * void * results in warnings with VC warning level 4, which | |
82 * could be fixed by casting to the true type for each fetch. | |
83 */ | |
84 #define IMPORT_FUNC(funcName) do { \ | |
85 void *procAddress = (void *)GetProcAddress(sGLESDLL, _T(#funcName)); \ | |
86 if (procAddress == NULL) result = 0; \ | |
87 *((void **)&FNPTR(funcName)) = procAddress; } while (0) | |
88 #endif // WIN32 | |
89 | |
90 #ifdef LINUX | |
91 #ifdef ANDROID_NDK | |
92 sGLESSO = dlopen("libGLESv1_CM.so", RTLD_NOW); | |
93 #else /* !ANDROID_NDK */ | |
94 sGLESSO = dlopen("libGLES_CM.so", RTLD_NOW); | |
95 if (sGLESSO == NULL) | |
96 sGLESSO = dlopen("libGLES_CL.so", RTLD_NOW); | |
97 #endif /* !ANDROID_NDK */ | |
98 if (sGLESSO == NULL) | |
99 return 0; // Cannot find OpenGL ES Common or Common Lite SO. | |
100 | |
101 #define IMPORT_FUNC(funcName) do { \ | |
102 void *procAddress = (void *)dlsym(sGLESSO, #funcName); \ | |
103 if (procAddress == NULL) result = 0; \ | |
104 *((void **)&FNPTR(funcName)) = procAddress; } while (0) | |
105 #endif // LINUX | |
106 | |
107 #ifndef ANDROID_NDK | |
108 IMPORT_FUNC(eglChooseConfig); | |
109 IMPORT_FUNC(eglCreateContext); | |
110 IMPORT_FUNC(eglCreateWindowSurface); | |
111 IMPORT_FUNC(eglDestroyContext); | |
112 IMPORT_FUNC(eglDestroySurface); | |
113 IMPORT_FUNC(eglGetConfigAttrib); | |
114 IMPORT_FUNC(eglGetConfigs); | |
115 IMPORT_FUNC(eglGetDisplay); | |
116 IMPORT_FUNC(eglGetError); | |
117 IMPORT_FUNC(eglInitialize); | |
118 IMPORT_FUNC(eglMakeCurrent); | |
119 IMPORT_FUNC(eglSwapBuffers); | |
120 IMPORT_FUNC(eglTerminate); | |
121 #endif /* !ANDROID_NDK */ | |
122 | |
123 IMPORT_FUNC(glBlendFunc); | |
124 IMPORT_FUNC(glClear); | |
125 IMPORT_FUNC(glClearColorx); | |
126 IMPORT_FUNC(glColor4x); | |
127 IMPORT_FUNC(glColorPointer); | |
128 IMPORT_FUNC(glDisable); | |
129 IMPORT_FUNC(glDisableClientState); | |
130 IMPORT_FUNC(glDrawArrays); | |
131 IMPORT_FUNC(glEnable); | |
132 IMPORT_FUNC(glEnableClientState); | |
133 IMPORT_FUNC(glFrustumx); | |
134 IMPORT_FUNC(glGetError); | |
135 IMPORT_FUNC(glLightxv); | |
136 IMPORT_FUNC(glLoadIdentity); | |
137 IMPORT_FUNC(glMaterialx); | |
138 IMPORT_FUNC(glMaterialxv); | |
139 IMPORT_FUNC(glMatrixMode); | |
140 IMPORT_FUNC(glMultMatrixx); | |
141 IMPORT_FUNC(glNormalPointer); | |
142 IMPORT_FUNC(glPopMatrix); | |
143 IMPORT_FUNC(glPushMatrix); | |
144 IMPORT_FUNC(glRotatex); | |
145 IMPORT_FUNC(glScalex); | |
146 IMPORT_FUNC(glShadeModel); | |
147 IMPORT_FUNC(glTranslatex); | |
148 IMPORT_FUNC(glVertexPointer); | |
149 IMPORT_FUNC(glViewport); | |
150 | |
151 #endif /* DISABLE_IMPORTGL */ | |
152 | |
153 return result; | |
154 } | |
155 | |
156 | |
157 void importGLDeinit() | |
158 { | |
159 #ifndef DISABLE_IMPORTGL | |
160 #ifdef WIN32 | |
161 FreeLibrary(sGLESDLL); | |
162 #endif | |
163 | |
164 #ifdef LINUX | |
165 dlclose(sGLESSO); | |
166 #endif | |
167 #endif /* DISABLE_IMPORTGL */ | |
168 } |