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 #ifndef DISABLE_IMPORTGL 26 27 #include <stdlib.h> 28 #include <dlfcn.h> 29 #include "waffle.h" 30 31 #define IMPORTGL_NO_FNPTR_DEFS 32 #define IMPORTGL_API 33 #define IMPORTGL_FNPTRINIT = NULL 34 #include "importgl.h" 35 36 37 /* Imports function pointers to selected function calls in GLES DLL 38 * or shared object. The function pointers are stored as global symbols with 39 * equivalent function name but prefixed with "funcPtr_". Standard gl 40 * calls are redirected to the function pointers with preprocessor macros 41 * (see importgl.h). 42 */ importGLInit()43int importGLInit() 44 { 45 int result = 1; 46 47 #undef IMPORT_FUNC_GL 48 49 #define IMPORT_FUNC_GL(funcName) do { \ 50 void *procAddress = waffle_dl_sym(WAFFLE_DL_OPENGL_ES2, #funcName); \ 51 if (procAddress == NULL) result = 0; \ 52 FNPTR(funcName) = (funcType_##funcName)procAddress; } while (0) 53 54 IMPORT_FUNC_GL(glAttachShader); 55 IMPORT_FUNC_GL(glBindBuffer); 56 IMPORT_FUNC_GL(glBlendFunc); 57 IMPORT_FUNC_GL(glBufferData); 58 IMPORT_FUNC_GL(glBufferSubData); 59 IMPORT_FUNC_GL(glClear); 60 IMPORT_FUNC_GL(glClearColor); 61 IMPORT_FUNC_GL(glCompileShader); 62 IMPORT_FUNC_GL(glCreateProgram); 63 IMPORT_FUNC_GL(glCreateShader); 64 IMPORT_FUNC_GL(glDeleteBuffers); 65 IMPORT_FUNC_GL(glDeleteProgram); 66 IMPORT_FUNC_GL(glDeleteShader); 67 IMPORT_FUNC_GL(glDisable); 68 IMPORT_FUNC_GL(glDisableVertexAttribArray); 69 IMPORT_FUNC_GL(glDrawArrays); 70 IMPORT_FUNC_GL(glEnable); 71 IMPORT_FUNC_GL(glEnableVertexAttribArray); 72 IMPORT_FUNC_GL(glGenBuffers); 73 IMPORT_FUNC_GL(glGetAttribLocation); 74 IMPORT_FUNC_GL(glGetError); 75 IMPORT_FUNC_GL(glGetShaderiv); 76 IMPORT_FUNC_GL(glGetShaderInfoLog); 77 IMPORT_FUNC_GL(glGetUniformLocation); 78 IMPORT_FUNC_GL(glLinkProgram); 79 IMPORT_FUNC_GL(glShaderSource); 80 IMPORT_FUNC_GL(glUniform1f); 81 IMPORT_FUNC_GL(glUniform3fv); 82 IMPORT_FUNC_GL(glUniform4fv); 83 IMPORT_FUNC_GL(glUniformMatrix3fv); 84 IMPORT_FUNC_GL(glUniformMatrix4fv); 85 IMPORT_FUNC_GL(glUseProgram); 86 IMPORT_FUNC_GL(glVertexAttribPointer); 87 IMPORT_FUNC_GL(glViewport); 88 89 return result; 90 } 91 92 #endif // !DISABLE_IMPORTGL 93 94