diff options
-rw-r--r-- | src/gpu/gl/GrGLExtensions.cpp | 16 | ||||
-rw-r--r-- | src/gpu/gl/GrGLInterface.cpp | 3 | ||||
-rw-r--r-- | src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp | 10 |
3 files changed, 19 insertions, 10 deletions
diff --git a/src/gpu/gl/GrGLExtensions.cpp b/src/gpu/gl/GrGLExtensions.cpp index e886aff958..5ebab14b65 100644 --- a/src/gpu/gl/GrGLExtensions.cpp +++ b/src/gpu/gl/GrGLExtensions.cpp @@ -26,15 +26,15 @@ bool GrGLExtensions::init(GrGLBinding binding, if (NULL == getString) { return false; } - bool indexed = false; - if (kDesktop_GrGLBinding == binding) { - const GrGLubyte* verString = getString(GR_GL_VERSION); - if (NULL == verString) { - return false; - } - GrGLVersion version = GrGLGetVersionFromString((const char*) verString); - indexed = version >= GR_GL_VER(3, 0); + + // glGetStringi and indexed extensions were added in version 3.0 of desktop GL and ES. + const GrGLubyte* verString = getString(GR_GL_VERSION); + if (NULL == verString) { + return false; } + GrGLVersion version = GrGLGetVersionFromString((const char*) verString); + bool indexed = version >= GR_GL_VER(3, 0); + if (indexed) { if (NULL == getStringi || NULL == getIntegerv) { return false; diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp index d69f5c7520..a5ddd9f83c 100644 --- a/src/gpu/gl/GrGLInterface.cpp +++ b/src/gpu/gl/GrGLInterface.cpp @@ -363,7 +363,8 @@ bool GrGLInterface::validate(GrGLBinding binding) const { } } - if (kDesktop_GrGLBinding == binding && glVer >= GR_GL_VER(3, 0)) { + // glGetStringi was added in version 3.0 of both desktop and ES. + if (glVer >= GR_GL_VER(3, 0)) { if (NULL == fGetStringi) { return false; } diff --git a/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp b/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp index 5ad867c4d7..05c93a32a8 100644 --- a/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp +++ b/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp @@ -21,7 +21,14 @@ const GrGLInterface* GrGLCreateNativeInterface() { static SkAutoTUnref<GrGLInterface> glInterface; if (!glInterface.get()) { GrGLExtensions extensions; - if (!extensions.init(kES_GrGLBinding, glGetString, NULL, glGetIntegerv)) { + GrGLGetStringiProc getStringi; +#if GL_ES_VERSION_3_0 + getStringi = glGetStringi; +#else + getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi"); +#endif + + if (!extensions.init(kES_GrGLBinding, glGetString, getStringi, glGetIntegerv)) { return NULL; } const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION)); @@ -80,6 +87,7 @@ const GrGLInterface* GrGLCreateNativeInterface() { interface->fGetShaderInfoLog = glGetShaderInfoLog; interface->fGetShaderiv = glGetShaderiv; interface->fGetString = glGetString; + interface->fGetStringi = getStringi; // located above interface->fGetUniformLocation = glGetUniformLocation; interface->fLineWidth = glLineWidth; interface->fLinkProgram = glLinkProgram; |