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 }