C++程序  |  94行  |  3.04 KB

/* 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 $
 */

#ifndef DISABLE_IMPORTGL

#include <stdlib.h>
#include <dlfcn.h>
#include "waffle.h"

#define IMPORTGL_NO_FNPTR_DEFS
#define IMPORTGL_API
#define IMPORTGL_FNPTRINIT = NULL
#include "importgl.h"


/* Imports function pointers to selected function calls in GLES DLL
 * or shared object. The function pointers are stored as global symbols with
 * equivalent function name but prefixed with "funcPtr_". Standard gl
 * calls are redirected to the function pointers with preprocessor macros
 * (see importgl.h).
 */
int importGLInit()
{
    int result = 1;

#undef IMPORT_FUNC_GL

#define IMPORT_FUNC_GL(funcName) do { \
        void *procAddress = waffle_dl_sym(WAFFLE_DL_OPENGL_ES2, #funcName); \
        if (procAddress == NULL) result = 0; \
        FNPTR(funcName) = (funcType_##funcName)procAddress; } while (0)

    IMPORT_FUNC_GL(glAttachShader);
    IMPORT_FUNC_GL(glBindBuffer);
    IMPORT_FUNC_GL(glBlendFunc);
    IMPORT_FUNC_GL(glBufferData);
    IMPORT_FUNC_GL(glBufferSubData);
    IMPORT_FUNC_GL(glClear);
    IMPORT_FUNC_GL(glClearColor);
    IMPORT_FUNC_GL(glCompileShader);
    IMPORT_FUNC_GL(glCreateProgram);
    IMPORT_FUNC_GL(glCreateShader);
    IMPORT_FUNC_GL(glDeleteBuffers);
    IMPORT_FUNC_GL(glDeleteProgram);
    IMPORT_FUNC_GL(glDeleteShader);
    IMPORT_FUNC_GL(glDisable);
    IMPORT_FUNC_GL(glDisableVertexAttribArray);
    IMPORT_FUNC_GL(glDrawArrays);
    IMPORT_FUNC_GL(glEnable);
    IMPORT_FUNC_GL(glEnableVertexAttribArray);
    IMPORT_FUNC_GL(glGenBuffers);
    IMPORT_FUNC_GL(glGetAttribLocation);
    IMPORT_FUNC_GL(glGetError);
    IMPORT_FUNC_GL(glGetShaderiv);
    IMPORT_FUNC_GL(glGetShaderInfoLog);
    IMPORT_FUNC_GL(glGetUniformLocation);
    IMPORT_FUNC_GL(glLinkProgram);
    IMPORT_FUNC_GL(glShaderSource);
    IMPORT_FUNC_GL(glUniform1f);
    IMPORT_FUNC_GL(glUniform3fv);
    IMPORT_FUNC_GL(glUniform4fv);
    IMPORT_FUNC_GL(glUniformMatrix3fv);
    IMPORT_FUNC_GL(glUniformMatrix4fv);
    IMPORT_FUNC_GL(glUseProgram);
    IMPORT_FUNC_GL(glVertexAttribPointer);
    IMPORT_FUNC_GL(glViewport);

    return result;
}

#endif  // !DISABLE_IMPORTGL