4704
|
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 }
|