Merge "Load ES3 functions with eglGetProcAddress, not dlsym" into jb-mr2-dev

This commit is contained in:
Jesse Hall
2013-07-10 16:32:48 +00:00
committed by Android (Google) Code Review
2 changed files with 107 additions and 114 deletions

View File

@@ -30,4 +30,4 @@ OpenGL ES 2.0 path:
[*1] The only dependency on API level 11 is the call to [*1] The only dependency on API level 11 is the call to
setEGLContextClientVersion in GLES3JNIView. With a custom setEGLContextClientVersion in GLES3JNIView. With a custom
EGLConfigChooser and EGLContextFactory the sample would be compatible EGLConfigChooser and EGLContextFactory the sample would be compatible
with older API levels. with older API levels.

View File

@@ -15,120 +15,114 @@
*/ */
#include "gl3stub.h" #include "gl3stub.h"
#include <dlfcn.h>
GLboolean gl3stubInit() { GLboolean gl3stubInit() {
void* so = dlopen("libGLESv3.so", RTLD_NOW | RTLD_GLOBAL); #define FIND_PROC(s) s = (void*)eglGetProcAddress(#s)
if (!so) FIND_PROC(glReadBuffer);
return GL_FALSE; FIND_PROC(glDrawRangeElements);
FIND_PROC(glTexImage3D);
#define DLSYM(s) s = dlsym(so, #s) FIND_PROC(glTexSubImage3D);
DLSYM(glReadBuffer); FIND_PROC(glCopyTexSubImage3D);
DLSYM(glDrawRangeElements); FIND_PROC(glCompressedTexImage3D);
DLSYM(glTexImage3D); FIND_PROC(glCompressedTexSubImage3D);
DLSYM(glTexSubImage3D); FIND_PROC(glGenQueries);
DLSYM(glCopyTexSubImage3D); FIND_PROC(glDeleteQueries);
DLSYM(glCompressedTexImage3D); FIND_PROC(glIsQuery);
DLSYM(glCompressedTexSubImage3D); FIND_PROC(glBeginQuery);
DLSYM(glGenQueries); FIND_PROC(glEndQuery);
DLSYM(glDeleteQueries); FIND_PROC(glGetQueryiv);
DLSYM(glIsQuery); FIND_PROC(glGetQueryObjectuiv);
DLSYM(glBeginQuery); FIND_PROC(glUnmapBuffer);
DLSYM(glEndQuery); FIND_PROC(glGetBufferPointerv);
DLSYM(glGetQueryiv); FIND_PROC(glDrawBuffers);
DLSYM(glGetQueryObjectuiv); FIND_PROC(glUniformMatrix2x3fv);
DLSYM(glUnmapBuffer); FIND_PROC(glUniformMatrix3x2fv);
DLSYM(glGetBufferPointerv); FIND_PROC(glUniformMatrix2x4fv);
DLSYM(glDrawBuffers); FIND_PROC(glUniformMatrix4x2fv);
DLSYM(glUniformMatrix2x3fv); FIND_PROC(glUniformMatrix3x4fv);
DLSYM(glUniformMatrix3x2fv); FIND_PROC(glUniformMatrix4x3fv);
DLSYM(glUniformMatrix2x4fv); FIND_PROC(glBlitFramebuffer);
DLSYM(glUniformMatrix4x2fv); FIND_PROC(glRenderbufferStorageMultisample);
DLSYM(glUniformMatrix3x4fv); FIND_PROC(glFramebufferTextureLayer);
DLSYM(glUniformMatrix4x3fv); FIND_PROC(glMapBufferRange);
DLSYM(glBlitFramebuffer); FIND_PROC(glFlushMappedBufferRange);
DLSYM(glRenderbufferStorageMultisample); FIND_PROC(glBindVertexArray);
DLSYM(glFramebufferTextureLayer); FIND_PROC(glDeleteVertexArrays);
DLSYM(glMapBufferRange); FIND_PROC(glGenVertexArrays);
DLSYM(glFlushMappedBufferRange); FIND_PROC(glIsVertexArray);
DLSYM(glBindVertexArray); FIND_PROC(glGetIntegeri_v);
DLSYM(glDeleteVertexArrays); FIND_PROC(glBeginTransformFeedback);
DLSYM(glGenVertexArrays); FIND_PROC(glEndTransformFeedback);
DLSYM(glIsVertexArray); FIND_PROC(glBindBufferRange);
DLSYM(glGetIntegeri_v); FIND_PROC(glBindBufferBase);
DLSYM(glBeginTransformFeedback); FIND_PROC(glTransformFeedbackVaryings);
DLSYM(glEndTransformFeedback); FIND_PROC(glGetTransformFeedbackVarying);
DLSYM(glBindBufferRange); FIND_PROC(glVertexAttribIPointer);
DLSYM(glBindBufferBase); FIND_PROC(glGetVertexAttribIiv);
DLSYM(glTransformFeedbackVaryings); FIND_PROC(glGetVertexAttribIuiv);
DLSYM(glGetTransformFeedbackVarying); FIND_PROC(glVertexAttribI4i);
DLSYM(glVertexAttribIPointer); FIND_PROC(glVertexAttribI4ui);
DLSYM(glGetVertexAttribIiv); FIND_PROC(glVertexAttribI4iv);
DLSYM(glGetVertexAttribIuiv); FIND_PROC(glVertexAttribI4uiv);
DLSYM(glVertexAttribI4i); FIND_PROC(glGetUniformuiv);
DLSYM(glVertexAttribI4ui); FIND_PROC(glGetFragDataLocation);
DLSYM(glVertexAttribI4iv); FIND_PROC(glUniform1ui);
DLSYM(glVertexAttribI4uiv); FIND_PROC(glUniform2ui);
DLSYM(glGetUniformuiv); FIND_PROC(glUniform3ui);
DLSYM(glGetFragDataLocation); FIND_PROC(glUniform4ui);
DLSYM(glUniform1ui); FIND_PROC(glUniform1uiv);
DLSYM(glUniform2ui); FIND_PROC(glUniform2uiv);
DLSYM(glUniform3ui); FIND_PROC(glUniform3uiv);
DLSYM(glUniform4ui); FIND_PROC(glUniform4uiv);
DLSYM(glUniform1uiv); FIND_PROC(glClearBufferiv);
DLSYM(glUniform2uiv); FIND_PROC(glClearBufferuiv);
DLSYM(glUniform3uiv); FIND_PROC(glClearBufferfv);
DLSYM(glUniform4uiv); FIND_PROC(glClearBufferfi);
DLSYM(glClearBufferiv); FIND_PROC(glGetStringi);
DLSYM(glClearBufferuiv); FIND_PROC(glCopyBufferSubData);
DLSYM(glClearBufferfv); FIND_PROC(glGetUniformIndices);
DLSYM(glClearBufferfi); FIND_PROC(glGetActiveUniformsiv);
DLSYM(glGetStringi); FIND_PROC(glGetUniformBlockIndex);
DLSYM(glCopyBufferSubData); FIND_PROC(glGetActiveUniformBlockiv);
DLSYM(glGetUniformIndices); FIND_PROC(glGetActiveUniformBlockName);
DLSYM(glGetActiveUniformsiv); FIND_PROC(glUniformBlockBinding);
DLSYM(glGetUniformBlockIndex); FIND_PROC(glDrawArraysInstanced);
DLSYM(glGetActiveUniformBlockiv); FIND_PROC(glDrawElementsInstanced);
DLSYM(glGetActiveUniformBlockName); FIND_PROC(glFenceSync);
DLSYM(glUniformBlockBinding); FIND_PROC(glIsSync);
DLSYM(glDrawArraysInstanced); FIND_PROC(glDeleteSync);
DLSYM(glDrawElementsInstanced); FIND_PROC(glClientWaitSync);
DLSYM(glFenceSync); FIND_PROC(glWaitSync);
DLSYM(glIsSync); FIND_PROC(glGetInteger64v);
DLSYM(glDeleteSync); FIND_PROC(glGetSynciv);
DLSYM(glClientWaitSync); FIND_PROC(glGetInteger64i_v);
DLSYM(glWaitSync); FIND_PROC(glGetBufferParameteri64v);
DLSYM(glGetInteger64v); FIND_PROC(glGenSamplers);
DLSYM(glGetSynciv); FIND_PROC(glDeleteSamplers);
DLSYM(glGetInteger64i_v); FIND_PROC(glIsSampler);
DLSYM(glGetBufferParameteri64v); FIND_PROC(glBindSampler);
DLSYM(glGenSamplers); FIND_PROC(glSamplerParameteri);
DLSYM(glDeleteSamplers); FIND_PROC(glSamplerParameteriv);
DLSYM(glIsSampler); FIND_PROC(glSamplerParameterf);
DLSYM(glBindSampler); FIND_PROC(glSamplerParameterfv);
DLSYM(glSamplerParameteri); FIND_PROC(glGetSamplerParameteriv);
DLSYM(glSamplerParameteriv); FIND_PROC(glGetSamplerParameterfv);
DLSYM(glSamplerParameterf); FIND_PROC(glVertexAttribDivisor);
DLSYM(glSamplerParameterfv); FIND_PROC(glBindTransformFeedback);
DLSYM(glGetSamplerParameteriv); FIND_PROC(glDeleteTransformFeedbacks);
DLSYM(glGetSamplerParameterfv); FIND_PROC(glGenTransformFeedbacks);
DLSYM(glVertexAttribDivisor); FIND_PROC(glIsTransformFeedback);
DLSYM(glBindTransformFeedback); FIND_PROC(glPauseTransformFeedback);
DLSYM(glDeleteTransformFeedbacks); FIND_PROC(glResumeTransformFeedback);
DLSYM(glGenTransformFeedbacks); FIND_PROC(glGetProgramBinary);
DLSYM(glIsTransformFeedback); FIND_PROC(glProgramBinary);
DLSYM(glPauseTransformFeedback); FIND_PROC(glProgramParameteri);
DLSYM(glResumeTransformFeedback); FIND_PROC(glInvalidateFramebuffer);
DLSYM(glGetProgramBinary); FIND_PROC(glInvalidateSubFramebuffer);
DLSYM(glProgramBinary); FIND_PROC(glTexStorage2D);
DLSYM(glProgramParameteri); FIND_PROC(glTexStorage3D);
DLSYM(glInvalidateFramebuffer); FIND_PROC(glGetInternalformativ);
DLSYM(glInvalidateSubFramebuffer); #undef FIND_PROC
DLSYM(glTexStorage2D);
DLSYM(glTexStorage3D);
DLSYM(glGetInternalformativ);
#undef DLSYM
if (!glReadBuffer || if (!glReadBuffer ||
!glDrawRangeElements || !glDrawRangeElements ||
@@ -235,7 +229,6 @@ GLboolean gl3stubInit() {
!glTexStorage3D || !glTexStorage3D ||
!glGetInternalformativ) !glGetInternalformativ)
{ {
dlclose(so);
return GL_FALSE; return GL_FALSE;
} }