PageRenderTime 329ms CodeModel.GetById 111ms app.highlight 6ms RepoModel.GetById 84ms app.codeStats 0ms

/TheElements/jni/importgl.c

http://thelements.googlecode.com/
C | 168 lines | 111 code | 21 blank | 36 comment | 14 complexity | f1b77eb7cff8016478988e701c3bd918 MD5 | raw file
  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>
 41static HMODULE sGLESDLL = NULL;
 42#endif // WIN32
 43
 44#ifdef LINUX
 45#include <stdlib.h>
 46#include <dlfcn.h>
 47static 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 */
 64int 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
157void 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}