summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2013-07-09 11:31:31 -0700
committerJesse Hall <jessehall@google.com>2013-07-09 11:31:33 -0700
commitb7a2e33c114d62b50e148cdaff33173a9a62e120 (patch)
tree89ca4f8806070b0dbf41306d364a18804276d126
parent7167a054a8027f75025c865322fa84791a9b3bd1 (diff)
downloadandroid_development-b7a2e33c114d62b50e148cdaff33173a9a62e120.tar.gz
android_development-b7a2e33c114d62b50e148cdaff33173a9a62e120.tar.bz2
android_development-b7a2e33c114d62b50e148cdaff33173a9a62e120.zip
Load ES3 functions with eglGetProcAddress, not dlsym
Using dlopen/dlsym works, but eglGetProcAddress is a little easier and more consistent with how GL extension functions (rather than these non-extension functions) are loaded. Change-Id: I082c193f08f7d5456389ab783a06cd38a9632d53
-rw-r--r--ndk/platforms/android-18/samples/gles3jni/README2
-rw-r--r--ndk/platforms/android-18/samples/gles3jni/jni/gl3stub.c219
2 files changed, 107 insertions, 114 deletions
diff --git a/ndk/platforms/android-18/samples/gles3jni/README b/ndk/platforms/android-18/samples/gles3jni/README
index 517eec325..2250e218f 100644
--- a/ndk/platforms/android-18/samples/gles3jni/README
+++ b/ndk/platforms/android-18/samples/gles3jni/README
@@ -30,4 +30,4 @@ OpenGL ES 2.0 path:
[*1] The only dependency on API level 11 is the call to
setEGLContextClientVersion in GLES3JNIView. With a custom
EGLConfigChooser and EGLContextFactory the sample would be compatible
- with older API levels. \ No newline at end of file
+ with older API levels.
diff --git a/ndk/platforms/android-18/samples/gles3jni/jni/gl3stub.c b/ndk/platforms/android-18/samples/gles3jni/jni/gl3stub.c
index b579f235a..19b78e7b6 100644
--- a/ndk/platforms/android-18/samples/gles3jni/jni/gl3stub.c
+++ b/ndk/platforms/android-18/samples/gles3jni/jni/gl3stub.c
@@ -15,120 +15,114 @@
*/
#include "gl3stub.h"
-#include <dlfcn.h>
-
GLboolean gl3stubInit() {
- void* so = dlopen("libGLESv3.so", RTLD_NOW | RTLD_GLOBAL);
- if (!so)
- return GL_FALSE;
-
- #define DLSYM(s) s = dlsym(so, #s)
- DLSYM(glReadBuffer);
- DLSYM(glDrawRangeElements);
- DLSYM(glTexImage3D);
- DLSYM(glTexSubImage3D);
- DLSYM(glCopyTexSubImage3D);
- DLSYM(glCompressedTexImage3D);
- DLSYM(glCompressedTexSubImage3D);
- DLSYM(glGenQueries);
- DLSYM(glDeleteQueries);
- DLSYM(glIsQuery);
- DLSYM(glBeginQuery);
- DLSYM(glEndQuery);
- DLSYM(glGetQueryiv);
- DLSYM(glGetQueryObjectuiv);
- DLSYM(glUnmapBuffer);
- DLSYM(glGetBufferPointerv);
- DLSYM(glDrawBuffers);
- DLSYM(glUniformMatrix2x3fv);
- DLSYM(glUniformMatrix3x2fv);
- DLSYM(glUniformMatrix2x4fv);
- DLSYM(glUniformMatrix4x2fv);
- DLSYM(glUniformMatrix3x4fv);
- DLSYM(glUniformMatrix4x3fv);
- DLSYM(glBlitFramebuffer);
- DLSYM(glRenderbufferStorageMultisample);
- DLSYM(glFramebufferTextureLayer);
- DLSYM(glMapBufferRange);
- DLSYM(glFlushMappedBufferRange);
- DLSYM(glBindVertexArray);
- DLSYM(glDeleteVertexArrays);
- DLSYM(glGenVertexArrays);
- DLSYM(glIsVertexArray);
- DLSYM(glGetIntegeri_v);
- DLSYM(glBeginTransformFeedback);
- DLSYM(glEndTransformFeedback);
- DLSYM(glBindBufferRange);
- DLSYM(glBindBufferBase);
- DLSYM(glTransformFeedbackVaryings);
- DLSYM(glGetTransformFeedbackVarying);
- DLSYM(glVertexAttribIPointer);
- DLSYM(glGetVertexAttribIiv);
- DLSYM(glGetVertexAttribIuiv);
- DLSYM(glVertexAttribI4i);
- DLSYM(glVertexAttribI4ui);
- DLSYM(glVertexAttribI4iv);
- DLSYM(glVertexAttribI4uiv);
- DLSYM(glGetUniformuiv);
- DLSYM(glGetFragDataLocation);
- DLSYM(glUniform1ui);
- DLSYM(glUniform2ui);
- DLSYM(glUniform3ui);
- DLSYM(glUniform4ui);
- DLSYM(glUniform1uiv);
- DLSYM(glUniform2uiv);
- DLSYM(glUniform3uiv);
- DLSYM(glUniform4uiv);
- DLSYM(glClearBufferiv);
- DLSYM(glClearBufferuiv);
- DLSYM(glClearBufferfv);
- DLSYM(glClearBufferfi);
- DLSYM(glGetStringi);
- DLSYM(glCopyBufferSubData);
- DLSYM(glGetUniformIndices);
- DLSYM(glGetActiveUniformsiv);
- DLSYM(glGetUniformBlockIndex);
- DLSYM(glGetActiveUniformBlockiv);
- DLSYM(glGetActiveUniformBlockName);
- DLSYM(glUniformBlockBinding);
- DLSYM(glDrawArraysInstanced);
- DLSYM(glDrawElementsInstanced);
- DLSYM(glFenceSync);
- DLSYM(glIsSync);
- DLSYM(glDeleteSync);
- DLSYM(glClientWaitSync);
- DLSYM(glWaitSync);
- DLSYM(glGetInteger64v);
- DLSYM(glGetSynciv);
- DLSYM(glGetInteger64i_v);
- DLSYM(glGetBufferParameteri64v);
- DLSYM(glGenSamplers);
- DLSYM(glDeleteSamplers);
- DLSYM(glIsSampler);
- DLSYM(glBindSampler);
- DLSYM(glSamplerParameteri);
- DLSYM(glSamplerParameteriv);
- DLSYM(glSamplerParameterf);
- DLSYM(glSamplerParameterfv);
- DLSYM(glGetSamplerParameteriv);
- DLSYM(glGetSamplerParameterfv);
- DLSYM(glVertexAttribDivisor);
- DLSYM(glBindTransformFeedback);
- DLSYM(glDeleteTransformFeedbacks);
- DLSYM(glGenTransformFeedbacks);
- DLSYM(glIsTransformFeedback);
- DLSYM(glPauseTransformFeedback);
- DLSYM(glResumeTransformFeedback);
- DLSYM(glGetProgramBinary);
- DLSYM(glProgramBinary);
- DLSYM(glProgramParameteri);
- DLSYM(glInvalidateFramebuffer);
- DLSYM(glInvalidateSubFramebuffer);
- DLSYM(glTexStorage2D);
- DLSYM(glTexStorage3D);
- DLSYM(glGetInternalformativ);
- #undef DLSYM
+ #define FIND_PROC(s) s = (void*)eglGetProcAddress(#s)
+ FIND_PROC(glReadBuffer);
+ FIND_PROC(glDrawRangeElements);
+ FIND_PROC(glTexImage3D);
+ FIND_PROC(glTexSubImage3D);
+ FIND_PROC(glCopyTexSubImage3D);
+ FIND_PROC(glCompressedTexImage3D);
+ FIND_PROC(glCompressedTexSubImage3D);
+ FIND_PROC(glGenQueries);
+ FIND_PROC(glDeleteQueries);
+ FIND_PROC(glIsQuery);
+ FIND_PROC(glBeginQuery);
+ FIND_PROC(glEndQuery);
+ FIND_PROC(glGetQueryiv);
+ FIND_PROC(glGetQueryObjectuiv);
+ FIND_PROC(glUnmapBuffer);
+ FIND_PROC(glGetBufferPointerv);
+ FIND_PROC(glDrawBuffers);
+ FIND_PROC(glUniformMatrix2x3fv);
+ FIND_PROC(glUniformMatrix3x2fv);
+ FIND_PROC(glUniformMatrix2x4fv);
+ FIND_PROC(glUniformMatrix4x2fv);
+ FIND_PROC(glUniformMatrix3x4fv);
+ FIND_PROC(glUniformMatrix4x3fv);
+ FIND_PROC(glBlitFramebuffer);
+ FIND_PROC(glRenderbufferStorageMultisample);
+ FIND_PROC(glFramebufferTextureLayer);
+ FIND_PROC(glMapBufferRange);
+ FIND_PROC(glFlushMappedBufferRange);
+ FIND_PROC(glBindVertexArray);
+ FIND_PROC(glDeleteVertexArrays);
+ FIND_PROC(glGenVertexArrays);
+ FIND_PROC(glIsVertexArray);
+ FIND_PROC(glGetIntegeri_v);
+ FIND_PROC(glBeginTransformFeedback);
+ FIND_PROC(glEndTransformFeedback);
+ FIND_PROC(glBindBufferRange);
+ FIND_PROC(glBindBufferBase);
+ FIND_PROC(glTransformFeedbackVaryings);
+ FIND_PROC(glGetTransformFeedbackVarying);
+ FIND_PROC(glVertexAttribIPointer);
+ FIND_PROC(glGetVertexAttribIiv);
+ FIND_PROC(glGetVertexAttribIuiv);
+ FIND_PROC(glVertexAttribI4i);
+ FIND_PROC(glVertexAttribI4ui);
+ FIND_PROC(glVertexAttribI4iv);
+ FIND_PROC(glVertexAttribI4uiv);
+ FIND_PROC(glGetUniformuiv);
+ FIND_PROC(glGetFragDataLocation);
+ FIND_PROC(glUniform1ui);
+ FIND_PROC(glUniform2ui);
+ FIND_PROC(glUniform3ui);
+ FIND_PROC(glUniform4ui);
+ FIND_PROC(glUniform1uiv);
+ FIND_PROC(glUniform2uiv);
+ FIND_PROC(glUniform3uiv);
+ FIND_PROC(glUniform4uiv);
+ FIND_PROC(glClearBufferiv);
+ FIND_PROC(glClearBufferuiv);
+ FIND_PROC(glClearBufferfv);
+ FIND_PROC(glClearBufferfi);
+ FIND_PROC(glGetStringi);
+ FIND_PROC(glCopyBufferSubData);
+ FIND_PROC(glGetUniformIndices);
+ FIND_PROC(glGetActiveUniformsiv);
+ FIND_PROC(glGetUniformBlockIndex);
+ FIND_PROC(glGetActiveUniformBlockiv);
+ FIND_PROC(glGetActiveUniformBlockName);
+ FIND_PROC(glUniformBlockBinding);
+ FIND_PROC(glDrawArraysInstanced);
+ FIND_PROC(glDrawElementsInstanced);
+ FIND_PROC(glFenceSync);
+ FIND_PROC(glIsSync);
+ FIND_PROC(glDeleteSync);
+ FIND_PROC(glClientWaitSync);
+ FIND_PROC(glWaitSync);
+ FIND_PROC(glGetInteger64v);
+ FIND_PROC(glGetSynciv);
+ FIND_PROC(glGetInteger64i_v);
+ FIND_PROC(glGetBufferParameteri64v);
+ FIND_PROC(glGenSamplers);
+ FIND_PROC(glDeleteSamplers);
+ FIND_PROC(glIsSampler);
+ FIND_PROC(glBindSampler);
+ FIND_PROC(glSamplerParameteri);
+ FIND_PROC(glSamplerParameteriv);
+ FIND_PROC(glSamplerParameterf);
+ FIND_PROC(glSamplerParameterfv);
+ FIND_PROC(glGetSamplerParameteriv);
+ FIND_PROC(glGetSamplerParameterfv);
+ FIND_PROC(glVertexAttribDivisor);
+ FIND_PROC(glBindTransformFeedback);
+ FIND_PROC(glDeleteTransformFeedbacks);
+ FIND_PROC(glGenTransformFeedbacks);
+ FIND_PROC(glIsTransformFeedback);
+ FIND_PROC(glPauseTransformFeedback);
+ FIND_PROC(glResumeTransformFeedback);
+ FIND_PROC(glGetProgramBinary);
+ FIND_PROC(glProgramBinary);
+ FIND_PROC(glProgramParameteri);
+ FIND_PROC(glInvalidateFramebuffer);
+ FIND_PROC(glInvalidateSubFramebuffer);
+ FIND_PROC(glTexStorage2D);
+ FIND_PROC(glTexStorage3D);
+ FIND_PROC(glGetInternalformativ);
+ #undef FIND_PROC
if (!glReadBuffer ||
!glDrawRangeElements ||
@@ -235,7 +229,6 @@ GLboolean gl3stubInit() {
!glTexStorage3D ||
!glGetInternalformativ)
{
- dlclose(so);
return GL_FALSE;
}