| /* San Angeles Observation OpenGL ES version example |
| * Copyright 2004-2005 Jetro Lauha |
| * All rights reserved. |
| * Web: http://iki.fi/jetro/ |
| * |
| * This source is free software; you can redistribute it and/or |
| * modify it under the terms of EITHER: |
| * (1) The GNU Lesser General Public License as published by the Free |
| * Software Foundation; either version 2.1 of the License, or (at |
| * your option) any later version. The text of the GNU Lesser |
| * General Public License is included with this source in the |
| * file LICENSE-LGPL.txt. |
| * (2) The BSD-style license that is included with this source in |
| * the file LICENSE-BSD.txt. |
| * |
| * This source is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files |
| * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. |
| * |
| * $Id: importgl.c,v 1.4 2005/02/08 18:42:55 tonic Exp $ |
| * $Revision: 1.4 $ |
| */ |
| |
| #undef WIN32 |
| #undef LINUX |
| #ifdef _MSC_VER |
| // Desktop or mobile Win32 environment: |
| #define WIN32 |
| #else |
| // Linux environment: |
| #define LINUX |
| #endif |
| |
| #ifndef DISABLE_IMPORTGL |
| |
| #if defined(WIN32) |
| #define WIN32_LEAN_AND_MEAN |
| #include <windows.h> |
| #include <tchar.h> |
| static HMODULE sGLESDLL = NULL; |
| #endif // WIN32 |
| |
| #ifdef LINUX |
| #include <stdlib.h> |
| #include <dlfcn.h> |
| static void *sGLESSO = NULL; |
| #endif // LINUX |
| |
| #endif /* DISABLE_IMPORTGL */ |
| |
| #define IMPORTGL_NO_FNPTR_DEFS |
| #define IMPORTGL_API |
| #define IMPORTGL_FNPTRINIT = NULL |
| #include "importgl.h" |
| |
| |
| /* Imports function pointers to selected function calls in OpenGL ES Common |
| * or Common Lite profile DLL or shared object. The function pointers are |
| * stored as global symbols with equivalent function name but prefixed with |
| * "funcPtr_". Standard gl/egl calls are redirected to the function pointers |
| * with preprocessor macros (see importgl.h). |
| */ |
| int importGLInit() |
| { |
| int result = 1; |
| |
| #ifndef DISABLE_IMPORTGL |
| |
| #undef IMPORT_FUNC |
| |
| #ifdef WIN32 |
| sGLESDLL = LoadLibrary(_T("libGLES_CM.dll")); |
| if (sGLESDLL == NULL) |
| sGLESDLL = LoadLibrary(_T("libGLES_CL.dll")); |
| if (sGLESDLL == NULL) |
| return 0; // Cannot find OpenGL ES Common or Common Lite DLL. |
| |
| /* The following fetches address to each egl & gl function call |
| * and stores it to the related function pointer. Casting through |
| * void * results in warnings with VC warning level 4, which |
| * could be fixed by casting to the true type for each fetch. |
| */ |
| #define IMPORT_FUNC(funcName) do { \ |
| void *procAddress = (void *)GetProcAddress(sGLESDLL, _T(#funcName)); \ |
| if (procAddress == NULL) result = 0; \ |
| *((void **)&FNPTR(funcName)) = procAddress; } while (0) |
| #endif // WIN32 |
| |
| #ifdef LINUX |
| #ifdef ANDROID_NDK |
| sGLESSO = dlopen("libGLESv1_CM.so", RTLD_NOW); |
| #else /* !ANDROID_NDK */ |
| sGLESSO = dlopen("libGLES_CM.so", RTLD_NOW); |
| if (sGLESSO == NULL) |
| sGLESSO = dlopen("libGLES_CL.so", RTLD_NOW); |
| #endif /* !ANDROID_NDK */ |
| if (sGLESSO == NULL) |
| return 0; // Cannot find OpenGL ES Common or Common Lite SO. |
| |
| #define IMPORT_FUNC(funcName) do { \ |
| void *procAddress = (void *)dlsym(sGLESSO, #funcName); \ |
| if (procAddress == NULL) result = 0; \ |
| *((void **)&FNPTR(funcName)) = procAddress; } while (0) |
| #endif // LINUX |
| |
| #ifndef ANDROID_NDK |
| IMPORT_FUNC(eglChooseConfig); |
| IMPORT_FUNC(eglCreateContext); |
| IMPORT_FUNC(eglCreateWindowSurface); |
| IMPORT_FUNC(eglDestroyContext); |
| IMPORT_FUNC(eglDestroySurface); |
| IMPORT_FUNC(eglGetConfigAttrib); |
| IMPORT_FUNC(eglGetConfigs); |
| IMPORT_FUNC(eglGetDisplay); |
| IMPORT_FUNC(eglGetError); |
| IMPORT_FUNC(eglInitialize); |
| IMPORT_FUNC(eglMakeCurrent); |
| IMPORT_FUNC(eglSwapBuffers); |
| IMPORT_FUNC(eglTerminate); |
| #endif /* !ANDROID_NDK */ |
| |
| IMPORT_FUNC(glBlendFunc); |
| IMPORT_FUNC(glClear); |
| IMPORT_FUNC(glClearColorx); |
| IMPORT_FUNC(glColor4x); |
| IMPORT_FUNC(glColorPointer); |
| IMPORT_FUNC(glDisable); |
| IMPORT_FUNC(glDisableClientState); |
| IMPORT_FUNC(glDrawArrays); |
| IMPORT_FUNC(glEnable); |
| IMPORT_FUNC(glEnableClientState); |
| IMPORT_FUNC(glFrustumx); |
| IMPORT_FUNC(glGetError); |
| IMPORT_FUNC(glLightxv); |
| IMPORT_FUNC(glLoadIdentity); |
| IMPORT_FUNC(glMaterialx); |
| IMPORT_FUNC(glMaterialxv); |
| IMPORT_FUNC(glMatrixMode); |
| IMPORT_FUNC(glMultMatrixx); |
| IMPORT_FUNC(glNormalPointer); |
| IMPORT_FUNC(glPopMatrix); |
| IMPORT_FUNC(glPushMatrix); |
| IMPORT_FUNC(glRotatex); |
| IMPORT_FUNC(glScalex); |
| IMPORT_FUNC(glShadeModel); |
| IMPORT_FUNC(glTranslatex); |
| IMPORT_FUNC(glVertexPointer); |
| IMPORT_FUNC(glViewport); |
| |
| #endif /* DISABLE_IMPORTGL */ |
| |
| return result; |
| } |
| |
| |
| void importGLDeinit() |
| { |
| #ifndef DISABLE_IMPORTGL |
| #ifdef WIN32 |
| FreeLibrary(sGLESDLL); |
| #endif |
| |
| #ifdef LINUX |
| dlclose(sGLESSO); |
| #endif |
| #endif /* DISABLE_IMPORTGL */ |
| } |