| Index: src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp
|
| diff --git a/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp b/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp
|
| index 781e29bc9dff3ab5f79264220baaac63f9c9739b..df212b1995ed503b164a9c90efa3a7dc71131ba9 100644
|
| --- a/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp
|
| +++ b/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp
|
| @@ -18,258 +18,29 @@
|
|
|
| #include <EGL/egl.h>
|
|
|
| -static GrGLInterface* create_es_interface(GrGLVersion version,
|
| - GrGLExtensions* extensions) {
|
| - if (version < GR_GL_VER(2,0)) {
|
| - return NULL;
|
| - }
|
| -
|
| - GrGLInterface* interface = SkNEW(GrGLInterface);
|
| - interface->fStandard = kGLES_GrGLStandard;
|
| - GrGLInterface::Functions* functions = &interface->fFunctions;
|
| -
|
| - functions->fActiveTexture = glActiveTexture;
|
| - functions->fAttachShader = glAttachShader;
|
| - functions->fBindAttribLocation = glBindAttribLocation;
|
| - functions->fBindBuffer = glBindBuffer;
|
| - functions->fBindTexture = glBindTexture;
|
| - functions->fBindVertexArray = glBindVertexArrayOES;
|
| - functions->fBlendColor = glBlendColor;
|
| - functions->fBlendFunc = glBlendFunc;
|
| - functions->fBufferData = glBufferData;
|
| - functions->fBufferSubData = glBufferSubData;
|
| - functions->fClear = glClear;
|
| - functions->fClearColor = glClearColor;
|
| - functions->fClearStencil = glClearStencil;
|
| - functions->fColorMask = glColorMask;
|
| - functions->fCompileShader = glCompileShader;
|
| - functions->fCompressedTexImage2D = glCompressedTexImage2D;
|
| - functions->fCompressedTexSubImage2D = glCompressedTexSubImage2D;
|
| - functions->fCopyTexSubImage2D = glCopyTexSubImage2D;
|
| - functions->fCreateProgram = glCreateProgram;
|
| - functions->fCreateShader = glCreateShader;
|
| - functions->fCullFace = glCullFace;
|
| - functions->fDeleteBuffers = glDeleteBuffers;
|
| - functions->fDeleteProgram = glDeleteProgram;
|
| - functions->fDeleteShader = glDeleteShader;
|
| - functions->fDeleteTextures = glDeleteTextures;
|
| - functions->fDeleteVertexArrays = glDeleteVertexArraysOES;
|
| - functions->fDepthMask = glDepthMask;
|
| - functions->fDisable = glDisable;
|
| - functions->fDisableVertexAttribArray = glDisableVertexAttribArray;
|
| - functions->fDrawArrays = glDrawArrays;
|
| - functions->fDrawElements = glDrawElements;
|
| - functions->fEnable = glEnable;
|
| - functions->fEnableVertexAttribArray = glEnableVertexAttribArray;
|
| - functions->fFinish = glFinish;
|
| - functions->fFlush = glFlush;
|
| - functions->fFrontFace = glFrontFace;
|
| - functions->fGenBuffers = glGenBuffers;
|
| - functions->fGenerateMipmap = glGenerateMipmap;
|
| - functions->fGenTextures = glGenTextures;
|
| - functions->fGenVertexArrays = glGenVertexArraysOES;
|
| - functions->fGetBufferParameteriv = glGetBufferParameteriv;
|
| - functions->fGetError = glGetError;
|
| - functions->fGetIntegerv = glGetIntegerv;
|
| - functions->fGetProgramInfoLog = glGetProgramInfoLog;
|
| - functions->fGetProgramiv = glGetProgramiv;
|
| - functions->fGetShaderInfoLog = glGetShaderInfoLog;
|
| - functions->fGetShaderiv = glGetShaderiv;
|
| - functions->fGetString = glGetString;
|
| -#if GL_ES_VERSION_3_0
|
| - functions->fGetStringi = glGetStringi;
|
| -#else
|
| - functions->fGetStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi");
|
| -#endif
|
| - functions->fGetUniformLocation = glGetUniformLocation;
|
| - functions->fLineWidth = glLineWidth;
|
| - functions->fLinkProgram = glLinkProgram;
|
| - functions->fPixelStorei = glPixelStorei;
|
| - functions->fReadPixels = glReadPixels;
|
| - functions->fScissor = glScissor;
|
| -#if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
|
| - functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource;
|
| -#else
|
| - functions->fShaderSource = glShaderSource;
|
| -#endif
|
| - functions->fStencilFunc = glStencilFunc;
|
| - functions->fStencilFuncSeparate = glStencilFuncSeparate;
|
| - functions->fStencilMask = glStencilMask;
|
| - functions->fStencilMaskSeparate = glStencilMaskSeparate;
|
| - functions->fStencilOp = glStencilOp;
|
| - functions->fStencilOpSeparate = glStencilOpSeparate;
|
| - functions->fTexImage2D = glTexImage2D;
|
| - functions->fTexParameteri = glTexParameteri;
|
| - functions->fTexParameteriv = glTexParameteriv;
|
| - functions->fTexSubImage2D = glTexSubImage2D;
|
| -
|
| - if (version >= GR_GL_VER(3,0)) {
|
| -#if GL_ES_VERSION_3_0
|
| - functions->fTexStorage2D = glTexStorage2D;
|
| -#else
|
| - functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2D");
|
| -#endif
|
| - } else {
|
| -#if GL_EXT_texture_storage
|
| - functions->fTexStorage2D = glTexStorage2DEXT;
|
| -#else
|
| - functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2DEXT");
|
| -#endif
|
| - }
|
| -
|
| -#if GL_EXT_discard_framebuffer
|
| - functions->fDiscardFramebuffer = glDiscardFramebufferEXT;
|
| -#endif
|
| - functions->fUniform1f = glUniform1f;
|
| - functions->fUniform1i = glUniform1i;
|
| - functions->fUniform1fv = glUniform1fv;
|
| - functions->fUniform1iv = glUniform1iv;
|
| - functions->fUniform2f = glUniform2f;
|
| - functions->fUniform2i = glUniform2i;
|
| - functions->fUniform2fv = glUniform2fv;
|
| - functions->fUniform2iv = glUniform2iv;
|
| - functions->fUniform3f = glUniform3f;
|
| - functions->fUniform3i = glUniform3i;
|
| - functions->fUniform3fv = glUniform3fv;
|
| - functions->fUniform3iv = glUniform3iv;
|
| - functions->fUniform4f = glUniform4f;
|
| - functions->fUniform4i = glUniform4i;
|
| - functions->fUniform4fv = glUniform4fv;
|
| - functions->fUniform4iv = glUniform4iv;
|
| - functions->fUniformMatrix2fv = glUniformMatrix2fv;
|
| - functions->fUniformMatrix3fv = glUniformMatrix3fv;
|
| - functions->fUniformMatrix4fv = glUniformMatrix4fv;
|
| - functions->fUseProgram = glUseProgram;
|
| - functions->fVertexAttrib4fv = glVertexAttrib4fv;
|
| - functions->fVertexAttribPointer = glVertexAttribPointer;
|
| - functions->fViewport = glViewport;
|
| - functions->fBindFramebuffer = glBindFramebuffer;
|
| - functions->fBindRenderbuffer = glBindRenderbuffer;
|
| - functions->fCheckFramebufferStatus = glCheckFramebufferStatus;
|
| - functions->fDeleteFramebuffers = glDeleteFramebuffers;
|
| - functions->fDeleteRenderbuffers = glDeleteRenderbuffers;
|
| - functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
|
| - functions->fFramebufferTexture2D = glFramebufferTexture2D;
|
| -
|
| - if (version >= GR_GL_VER(3,0)) {
|
| -#if GL_ES_VERSION_3_0
|
| - functions->fRenderbufferStorageMultisample = glRenderbufferStorageMultisample;
|
| - functions->fBlitFramebuffer = glBlitFramebuffer;
|
| -#else
|
| - functions->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisample");
|
| - functions->fBlitFramebuffer = (GrGLBlitFramebufferProc) eglGetProcAddress("glBlitFramebuffer");
|
| -#endif
|
| - }
|
| -
|
| - if (extensions->has("GL_EXT_multisampled_render_to_texture")) {
|
| -#if GL_EXT_multisampled_render_to_texture
|
| - functions->fFramebufferTexture2DMultisample = glFramebufferTexture2DMultisampleEXT;
|
| - functions->fRenderbufferStorageMultisampleES2EXT = glRenderbufferStorageMultisampleEXT;
|
| -#else
|
| - functions->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleEXT");
|
| - functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleEXT");
|
| -#endif
|
| - } else if (extensions->has("GL_IMG_multisampled_render_to_texture")) {
|
| -#if GL_IMG_multisampled_render_to_texture
|
| - functions->fFramebufferTexture2DMultisample = glFramebufferTexture2DMultisampleIMG;
|
| - functions->fRenderbufferStorageMultisampleES2EXT = glRenderbufferStorageMultisampleIMG;
|
| -#else
|
| - functions->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleIMG");
|
| - functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleIMG");
|
| -#endif
|
| - }
|
| -
|
| - functions->fGenFramebuffers = glGenFramebuffers;
|
| - functions->fGenRenderbuffers = glGenRenderbuffers;
|
| - functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
|
| - functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
|
| - functions->fRenderbufferStorage = glRenderbufferStorage;
|
| +#define GET_PROC(F) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F)
|
| +#define GET_PROC_SUFFIX(F, S) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F #S)
|
| +#define GET_PROC_LOCAL(F) GrGL ## F ## Proc F = (GrGL ## F ## Proc) get(ctx, "gl" #F)
|
|
|
| -#if GL_OES_mapbuffer
|
| - functions->fMapBuffer = glMapBufferOES;
|
| - functions->fUnmapBuffer = glUnmapBufferOES;
|
| -#else
|
| - functions->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOES");
|
| - functions->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBufferOES");
|
| +#define GET_LINKED(F) functions->f ## F = gl ## F
|
| +#define GET_LINKED_SUFFIX(F, S) functions->f ## F = gl ## F ##S
|
|
|
| -#endif
|
| -
|
| - if (version >= GR_GL_VER(3,0)) {
|
| -#if GL_ES_VERSION_3_0
|
| - functions->fMapBufferRange = glMapBufferRange;
|
| - functions->fFlushMappedBufferRange = glFlushMappedBufferRange;
|
| -#else
|
| - functions->fMapBufferRange = (GrGLMapBufferRangeProc) eglGetProcAddress("glMapBufferRange");
|
| - functions->fFlushMappedBufferRange = (GrGLFlushMappedBufferRangeProc) eglGetProcAddress("glFlushMappedBufferRange");
|
| -#endif
|
| - } else if (extensions->has("GL_EXT_map_buffer_range")) {
|
| -#if GL_EXT_map_buffer_range
|
| - functions->fMapBufferRange = glMapBufferRangeEXT;
|
| - functions->fFlushMappedBufferRange = glFlushMappedBufferRangeEXT;
|
| -#else
|
| - functions->fMapBufferRange = (GrGLMapBufferRangeProc) eglGetProcAddress("glMapBufferRangeEXT");
|
| - functions->fFlushMappedBufferRange = (GrGLFlushMappedBufferRangeProc) eglGetProcAddress("glFlushMappedBufferRangeEXT");
|
| -#endif
|
| - }
|
| -
|
| - if (extensions->has("GL_EXT_debug_marker")) {
|
| - functions->fInsertEventMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glInsertEventMarker");
|
| - functions->fPushGroupMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glPushGroupMarker");
|
| - functions->fPopGroupMarker = (GrGLPopGroupMarkerProc) eglGetProcAddress("glPopGroupMarker");
|
| - // The below check is here because a device has been found that has the extension string but
|
| - // returns NULL from the eglGetProcAddress for the functions
|
| - if (NULL == functions->fInsertEventMarker ||
|
| - NULL == functions->fPushGroupMarker ||
|
| - NULL == functions->fPopGroupMarker) {
|
| - extensions->remove("GL_EXT_debug_marker");
|
| - }
|
| - }
|
| -
|
| -#if GL_ES_VERSION_3_0
|
| - functions->fInvalidateFramebuffer = glInvalidateFramebuffer;
|
| - functions->fInvalidateSubFramebuffer = glInvalidateSubFramebuffer;
|
| -#else
|
| - functions->fInvalidateFramebuffer = (GrGLInvalidateFramebufferProc) eglGetProcAddress("glInvalidateFramebuffer");
|
| - functions->fInvalidateSubFramebuffer = (GrGLInvalidateSubFramebufferProc) eglGetProcAddress("glInvalidateSubFramebuffer");
|
| -#endif
|
| - functions->fInvalidateBufferData = (GrGLInvalidateBufferDataProc) eglGetProcAddress("glInvalidateBufferData");
|
| - functions->fInvalidateBufferSubData = (GrGLInvalidateBufferSubDataProc) eglGetProcAddress("glInvalidateBufferSubData");
|
| - functions->fInvalidateTexImage = (GrGLInvalidateTexImageProc) eglGetProcAddress("glInvalidateTexImage");
|
| - functions->fInvalidateTexSubImage = (GrGLInvalidateTexSubImageProc) eglGetProcAddress("glInvalidateTexSubImage");
|
| -
|
| - return interface;
|
| -}
|
| +#include "gl/GrGLAssembleGLESInterface.h"
|
|
|
| static GrGLFuncPtr android_get_gl_proc(void* ctx, const char name[]) {
|
| SkASSERT(NULL == ctx);
|
| return eglGetProcAddress(name);
|
| }
|
|
|
| -static const GrGLInterface* create_desktop_interface() {
|
| - return GrGLAssembleGLInterface(NULL, android_get_gl_proc);
|
| -}
|
| -
|
| const GrGLInterface* GrGLCreateNativeInterface() {
|
|
|
| const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION));
|
| GrGLStandard standard = GrGLGetStandardInUseFromString(verStr);
|
|
|
| if (kGLES_GrGLStandard == standard) {
|
| - GrGLVersion version = GrGLGetVersionFromString(verStr);
|
| - GrGLExtensions extensions;
|
| - GrGLGetStringiProc getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi");
|
| - if (!extensions.init(standard, glGetString, getStringi, glGetIntegerv)) {
|
| - return NULL;
|
| - }
|
| - GrGLInterface* interface = create_es_interface(version, &extensions);
|
| -
|
| - if (NULL != interface) {
|
| - interface->fExtensions.swap(&extensions);
|
| - }
|
| -
|
| - return interface;
|
| + return GrGLAssembleGLESInterface(NULL, android_get_gl_proc);
|
| } else if (kGL_GrGLStandard == standard) {
|
| - return create_desktop_interface();
|
| + return GrGLAssembleGLInterface(NULL, android_get_gl_proc);
|
| }
|
|
|
| return NULL;
|
|
|