diff options
author | Hal Canary <halcanary@google.com> | 2018-03-14 15:16:56 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-15 17:10:56 +0000 |
commit | 25375e80c26951b4c9894f86ae209c126b991581 (patch) | |
tree | a0389ba8676437735641f0699a298e44feee1bd1 /src | |
parent | b8421edb47e9b3831df64d03a00f15509c2bebaa (diff) |
GrGLES: unify MakeNativeInterface_{android,egl}
BUG=skia:3508
Change-Id: Ibc98ea3e579cb545635c28d345cae24f57d0c2a3
Reviewed-on: https://skia-review.googlesource.com/114471
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/gl/android/GrGLMakeNativeInterface_android.cpp | 138 | ||||
-rw-r--r-- | src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp | 122 |
2 files changed, 114 insertions, 146 deletions
diff --git a/src/gpu/gl/android/GrGLMakeNativeInterface_android.cpp b/src/gpu/gl/android/GrGLMakeNativeInterface_android.cpp index a8732d7f87..5e5d4c2ebe 100644 --- a/src/gpu/gl/android/GrGLMakeNativeInterface_android.cpp +++ b/src/gpu/gl/android/GrGLMakeNativeInterface_android.cpp @@ -4,140 +4,4 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#include "SkTypes.h" -#if defined(SK_BUILD_FOR_ANDROID) - -#include "gl/GrGLInterface.h" -#include "gl/GrGLAssembleInterface.h" -#include "gl/GrGLUtil.h" - -#include <EGL/egl.h> -#ifndef GL_GLEXT_PROTOTYPES -#define GL_GLEXT_PROTOTYPES -#endif -#include <GLES2/gl2.h> - -static GrGLFuncPtr android_get_gl_proc(void* ctx, const char name[]) { - SkASSERT(nullptr == ctx); - // Some older drivers on Android have busted eglGetProcAdddress Functions that - // will return the wrong pointer for built in GLES2 functions. This set of functions - // was generated on a Xoom by finding mismatches between the function pulled in via gl2.h and - // the address returned by eglGetProcAddress. - - #define M(X) if (0 == strcmp(#X, name)) { return (GrGLFuncPtr) X; } - M(eglGetCurrentDisplay); - M(eglQueryString); - M(glActiveTexture); - M(glAttachShader); - M(glBindAttribLocation); - M(glBindBuffer); - M(glBindFramebuffer); - M(glBindRenderbuffer); - M(glBindTexture); - M(glBlendColor); - M(glBlendEquation); - M(glBlendFunc); - M(glBufferData); - M(glBufferSubData); - M(glCheckFramebufferStatus); - M(glClear); - M(glClearColor); - M(glClearStencil); - M(glColorMask); - M(glCompileShader); - M(glCompressedTexImage2D); - M(glCompressedTexSubImage2D); - M(glCopyTexSubImage2D); - M(glCreateProgram); - M(glCreateShader); - M(glCullFace); - M(glDeleteBuffers); - M(glDeleteFramebuffers); - M(glDeleteProgram); - M(glDeleteRenderbuffers); - M(glDeleteShader); - M(glDeleteTextures); - M(glDepthMask); - M(glDisable); - M(glDisableVertexAttribArray); - M(glDrawArrays); - M(glDrawElements); - M(glEnable); - M(glEnableVertexAttribArray); - M(glFinish); - M(glFlush); - M(glFramebufferRenderbuffer); - M(glFramebufferTexture2D); - M(glFrontFace); - M(glGenBuffers); - M(glGenFramebuffers); - M(glGenRenderbuffers); - M(glGenTextures); - M(glGenerateMipmap); - M(glGetBufferParameteriv); - M(glGetError); - M(glGetFramebufferAttachmentParameteriv); - M(glGetIntegerv); - M(glGetProgramInfoLog); - M(glGetProgramiv); - M(glGetRenderbufferParameteriv); - M(glGetShaderInfoLog); - M(glGetShaderPrecisionFormat); - M(glGetShaderiv); - M(glGetString); - M(glGetUniformLocation); - M(glIsTexture); - M(glLineWidth); - M(glLinkProgram); - M(glPixelStorei); - M(glReadPixels); - M(glRenderbufferStorage); - M(glScissor); - M(glShaderSource); - M(glStencilFunc); - M(glStencilFuncSeparate); - M(glStencilMask); - M(glStencilMaskSeparate); - M(glStencilOp); - M(glStencilOpSeparate); - M(glTexImage2D); - M(glTexParameteri); - M(glTexParameteriv); - M(glTexSubImage2D); - M(glUniform1f); - M(glUniform1fv); - M(glUniform1i); - M(glUniform1iv); - M(glUniform2f); - M(glUniform2fv); - M(glUniform2i); - M(glUniform2iv); - M(glUniform3f); - M(glUniform3fv); - M(glUniform3i); - M(glUniform3iv); - M(glUniform4f); - M(glUniform4fv); - M(glUniform4i); - M(glUniform4iv); - M(glUniformMatrix2fv); - M(glUniformMatrix3fv); - M(glUniformMatrix4fv); - M(glUseProgram); - M(glVertexAttrib1f); - M(glVertexAttrib2fv); - M(glVertexAttrib3fv); - M(glVertexAttrib4fv); - M(glVertexAttribPointer); - M(glViewport); - #undef M - return eglGetProcAddress(name); -} - -sk_sp<const GrGLInterface> GrGLMakeNativeInterface() { - return GrGLMakeAssembledInterface(nullptr, android_get_gl_proc); -} - -const GrGLInterface* GrGLCreateNativeInterface() { return GrGLMakeNativeInterface().release(); } - -#endif//defined(SK_BUILD_FOR_ANDROID) +#include "../egl/GrGLMakeNativeInterface_egl.cpp" diff --git a/src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp b/src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp index e50d9cd80c..de1b1bb1e9 100644 --- a/src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp +++ b/src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp @@ -9,19 +9,123 @@ #include "gl/GrGLUtil.h" #include <EGL/egl.h> +#ifndef GL_GLEXT_PROTOTYPES +#define GL_GLEXT_PROTOTYPES +#endif #include <GLES2/gl2.h> static GrGLFuncPtr egl_get_gl_proc(void* ctx, const char name[]) { SkASSERT(nullptr == ctx); - GrGLFuncPtr ptr = eglGetProcAddress(name); - if (!ptr) { - if (0 == strcmp("eglQueryString", name)) { - return (GrGLFuncPtr)eglQueryString; - } else if (0 == strcmp("eglGetCurrentDisplay", name)) { - return (GrGLFuncPtr)eglGetCurrentDisplay; - } - } - return ptr; + // https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_get_all_proc_addresses.txt + // eglGetProcAddress() is not guaranteed to support the querying of non-extension EGL functions. + #define M(X) if (0 == strcmp(#X, name)) { return (GrGLFuncPtr) X; } + M(eglGetCurrentDisplay); + M(eglQueryString); + M(glActiveTexture); + M(glAttachShader); + M(glBindAttribLocation); + M(glBindBuffer); + M(glBindFramebuffer); + M(glBindRenderbuffer); + M(glBindTexture); + M(glBlendColor); + M(glBlendEquation); + M(glBlendFunc); + M(glBufferData); + M(glBufferSubData); + M(glCheckFramebufferStatus); + M(glClear); + M(glClearColor); + M(glClearStencil); + M(glColorMask); + M(glCompileShader); + M(glCompressedTexImage2D); + M(glCompressedTexSubImage2D); + M(glCopyTexSubImage2D); + M(glCreateProgram); + M(glCreateShader); + M(glCullFace); + M(glDeleteBuffers); + M(glDeleteFramebuffers); + M(glDeleteProgram); + M(glDeleteRenderbuffers); + M(glDeleteShader); + M(glDeleteTextures); + M(glDepthMask); + M(glDisable); + M(glDisableVertexAttribArray); + M(glDrawArrays); + M(glDrawElements); + M(glEnable); + M(glEnableVertexAttribArray); + M(glFinish); + M(glFlush); + M(glFramebufferRenderbuffer); + M(glFramebufferTexture2D); + M(glFrontFace); + M(glGenBuffers); + M(glGenFramebuffers); + M(glGenRenderbuffers); + M(glGenTextures); + M(glGenerateMipmap); + M(glGetBufferParameteriv); + M(glGetError); + M(glGetFramebufferAttachmentParameteriv); + M(glGetIntegerv); + M(glGetProgramInfoLog); + M(glGetProgramiv); + M(glGetRenderbufferParameteriv); + M(glGetShaderInfoLog); + M(glGetShaderPrecisionFormat); + M(glGetShaderiv); + M(glGetString); + M(glGetUniformLocation); + M(glIsTexture); + M(glLineWidth); + M(glLinkProgram); + M(glPixelStorei); + M(glReadPixels); + M(glRenderbufferStorage); + M(glScissor); + M(glShaderSource); + M(glStencilFunc); + M(glStencilFuncSeparate); + M(glStencilMask); + M(glStencilMaskSeparate); + M(glStencilOp); + M(glStencilOpSeparate); + M(glTexImage2D); + M(glTexParameteri); + M(glTexParameteriv); + M(glTexSubImage2D); + M(glUniform1f); + M(glUniform1fv); + M(glUniform1i); + M(glUniform1iv); + M(glUniform2f); + M(glUniform2fv); + M(glUniform2i); + M(glUniform2iv); + M(glUniform3f); + M(glUniform3fv); + M(glUniform3i); + M(glUniform3iv); + M(glUniform4f); + M(glUniform4fv); + M(glUniform4i); + M(glUniform4iv); + M(glUniformMatrix2fv); + M(glUniformMatrix3fv); + M(glUniformMatrix4fv); + M(glUseProgram); + M(glVertexAttrib1f); + M(glVertexAttrib2fv); + M(glVertexAttrib3fv); + M(glVertexAttrib4fv); + M(glVertexAttribPointer); + M(glViewport); + #undef M + return eglGetProcAddress(name); } sk_sp<const GrGLInterface> GrGLMakeNativeInterface() { |