123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /* 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
- #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
- #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;
- #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
- sGLESSO = dlopen("libGLES_CM.so", RTLD_NOW);
- if (sGLESSO == NULL)
- sGLESSO = dlopen("libGLES_CL.so", RTLD_NOW);
- 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
- 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);
- 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);
- return result;
- }
- void importGLDeinit()
- {
- #ifdef WIN32
- FreeLibrary(sGLESDLL);
- #endif
- #ifdef LINUX
- dlclose(sGLESSO);
- #endif
- }
|