168 lines
4.8 KiB
C++
168 lines
4.8 KiB
C++
/* 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 */
|
|
}
|