X-Git-Url: http://deadsoftware.ru/gitweb?p=nanogl.git;a=blobdiff_plain;f=nanogl.cpp;h=bd699da41c968ebe4af9455963bb0afac9e2b35a;hp=11bd1eac4faf162e8d1bd5e9063deaee398499f1;hb=57b822a8a58cbc7ff7edd99a1d375b559a198c9e;hpb=4f937221b421f3c63856af69e4d620a7f8b0a6b0 diff --git a/nanogl.cpp b/nanogl.cpp index 11bd1ea..bd699da 100644 --- a/nanogl.cpp +++ b/nanogl.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include -#include + //#include @@ -42,19 +42,34 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG,__VA_ARGS__) #else +#ifndef _MSC_VER +#define LOGI(...) printf("I: "__VA_ARGS__);printf("\n") +#define LOGD(...) if(DEBUG_NANO) {printf("D: "__VA_ARGS__);printf("\n");} +#define LOGE(...) printf("E: "__VA_ARGS__);printf("\n") +#define LOGW(...) printf("W: "__VA_ARGS__);printf("\n") +#else +#define LOGI printf +#define LOGD printf +#define LOGE printf +#define LOGW printf -#define LOGI(...) printf("I: "__VA_ARGS__) -#define LOGD(...) if(DEBUG_NANO) printf("D: "__VA_ARGS__) -#define LOGE(...) printf("E: "__VA_ARGS__) -#define LOGW(...) printf("W: "__VA_ARGS__) +#endif +#endif +#ifdef _WIN32 +#include +#define dlopen(x,y) LoadLibraryA(x) +#define dlsym(x,y) (void*)GetProcAddress((HINSTANCE)x,y) +#define dlclose(x) FreeLibrary((HINSTANCE)x) +#else +#include #endif -#define GL_ENTRY(_r, _api, ...) #_api, +//#define GL_ENTRY(_r, _api, ...) #_api, static char const * const gl_names[] = { - #include "gl_entries.in" + #include "funcnames.h" NULL }; @@ -66,8 +81,10 @@ GlESInterface* glEsImpl = NULL; extern void InitGLStructs(); -void gl_unimplemented() { - LOGE ("Called unimplemented OpenGL ES API\n"); +void APIENTRY gl_unimplemented(GLenum none) { +#ifndef USE_CORE_PROFILE + LOGE ("Called unimplemented OpenGL ES API\n"); +#endif } void *nanoGL_GetProcAddress(const char *name) @@ -112,6 +129,19 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void f = dlsym(lib, *api); // try libGLESxx_CM.so +#ifdef USE_CORE_PROFILE + // Hack: try ARB and EXT suffix + if (f == NULL) { + char namearb[256]; + snprintf( namearb, 256, "%sARB", *api ); + f = dlsym( lib, namearb ); + } + if (f == NULL) { + char namearb[256]; + snprintf( namearb, 256, "%sEXT", *api ); + f = dlsym( lib, namearb ); + } +#endif if (f == NULL) { LOGW( "<%s> not found in %s. Trying libEGL.so.", *api, name); //driver); @@ -139,7 +169,7 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void *ptr++ = f; api++; - } + } return 1; } @@ -154,6 +184,60 @@ static int loadDriver(const char * name) { /** * Init */ +#ifdef _WIN32 +int nanoGL_Init() +{ + const char * lib1 = "opengl32.dll"; // Has both gl* & egl* funcs SDK < 1.5 + const char * lib2 = "opengl32.dll"; // Only gl* funcs SDK >= 1.5 + const char * lib3 = "opengl32.dll"; // Only egl* funcs SDK >= 1.5 + const char * driver; + + // load lib + LOGI("nanoGL: Init loading driver %s\n", lib1); + //LOG (ANDROID_LOG_DEBUG, LOG_TAG, "nanoGL: Init loading driver %s\n", lib1); + + if ( ! loadDriver(lib1) ) + { + LOGE("Failed to load driver %s. Trying %s\n", lib1, lib2); + + if ( ! loadDriver(lib2) ) { + LOGE ("Failed to load %s.\n", lib2); + return 0; + } + else + driver = lib2; + } + else + driver = lib1; + + void * eglLib; + + //if ( strcmp(driver, lib2) == 0 ) { + LOGD ("**** Will Load EGL subs from %s ****", lib3); + + eglLib = dlopen(lib3, RTLD_NOW | RTLD_LOCAL); + + if ( ! eglLib ) { + LOGE ( "Failed to load %s", lib3); + } + //} + + // Load API gl* for 1.5+ else egl* gl* + //if (CreateGlEsInterface(driver, glesLib, eglLib, NULL) == -1) + if ( !CreateGlEsInterface(driver, glesLib, eglLib, (void *) gl_unimplemented) == -1) + { + // release lib + LOGE ( "CreateGlEsInterface failed."); + + dlclose(glesLib); + return 0; + } + + // Init nanoGL + InitGLStructs(); + return 1; +} +#else int nanoGL_Init() { const char * lib1 = "libGLESv1_CM.so"; // Has both gl* & egl* funcs SDK < 1.5 @@ -206,17 +290,17 @@ int nanoGL_Init() InitGLStructs(); return 1; } - +#endif void nanoGL_Destroy() { LOGD ("nanoGL_Destroy"); if (glEsImpl) { - free( glEsImpl); + free( glEsImpl); glEsImpl = NULL; } // release lib dlclose(glesLib); } - +