diff --git a/nanogl.cpp b/nanogl.cpp
index 5add36a367bda8220013657d37844bc3bfb0f861..0f4bc6a2de12c0744ebfea90fb41a2cb3e1c1972 100644 (file)
--- a/nanogl.cpp
+++ b/nanogl.cpp
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
-#include <dlfcn.h>
+
//#include <cutils/log.h>
//#include <cutils/log.h>
#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
#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 <windows.h>
+#define dlopen(x,y) LoadLibraryA(x)
+#define dlsym(x,y) (void*)GetProcAddress((HINSTANCE)x,y)
+#define dlclose(x) FreeLibrary((HINSTANCE)x)
+#else
+#include <dlfcn.h>
#endif
#endif
-#define GL_ENTRY(_r, _api, ...) #_api,
+//#define GL_ENTRY(_r, _api, ...) #_api,
static char const * const gl_names[] = {
static char const * const gl_names[] = {
- #include "gl_entries.in"
+ #include "funcnames.h"
NULL
};
NULL
};
extern void InitGLStructs();
extern void InitGLStructs();
-static 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)
{
}
void *nanoGL_GetProcAddress(const char *name)
{
- return dlsym(glesLib, name);
+ void *addr = NULL;
+#ifdef XASH_SDL
+ addr = SDL_GL_GetProcAddress( name );
+ if( !addr )
+#endif
+ addr = dlsym(glesLib, name);
+ return addr;
}
static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void * default_func )
}
static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void * default_func )
@@ -98,6 +121,19 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void
f = dlsym(lib, *api); // try libGLESxx_CM.so
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);
if (f == NULL) {
LOGW( "<%s> not found in %s. Trying libEGL.so.", *api, name); //driver);
@@ -113,8 +149,11 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void
LOGD ("<%s> @ 0x%p\n", *api, f);
}
}
LOGD ("<%s> @ 0x%p\n", *api, f);
}
}
- else
+ else
+ {
+ LOGE ( "libEGL.so not loaded!");
f = default_func;
f = default_func;
+ }
}
else {
LOGD ("<%s> @ 0x%p\n", *api, f);
}
else {
LOGD ("<%s> @ 0x%p\n", *api, f);
@@ -122,7 +161,7 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void
*ptr++ = f;
api++;
*ptr++ = f;
api++;
- }
+ }
return 1;
}
return 1;
}
/**
* Init
*/
/**
* 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
int nanoGL_Init()
{
const char * lib1 = "libGLESv1_CM.so"; // Has both gl* & egl* funcs SDK < 1.5
InitGLStructs();
return 1;
}
InitGLStructs();
return 1;
}
-
+#endif
void nanoGL_Destroy()
{
LOGD ("nanoGL_Destroy");
if (glEsImpl) {
void nanoGL_Destroy()
{
LOGD ("nanoGL_Destroy");
if (glEsImpl) {
- free( glEsImpl);
+ free( glEsImpl);
glEsImpl = NULL;
}
// release lib
dlclose(glesLib);
}
glEsImpl = NULL;
}
// release lib
dlclose(glesLib);
}
-