On further investigation by our team there is a bug in the application.
The application creates an ES 2.0 context and attempts to use EXT_buffer_storage extension, which is an ES 3.1 extension.
The app is checking availability of glBufferStorageEXT by calling eglGetProcAddress(“glBufferStorageEXT”) and testing that the return value is not null, but this is not a valid way of checking. The extension string should be checked for the extension instead.
Yes!, forget it!
Now, I will check the support of the extension, using the following function:
bool IsExtensionSupport(const char* extensions, const char* extName)
{
// Search for extName in the extensions string. Use of strstr()
// is not sufficient because extension names can be prefixes of
// other extension names. Could use strtok() but the constant
// string returned by glGetString can be in read-only memory
size_t extNameLen = strlen(extName);
const char* end = extensions + strlen(extensions);
while (extensions < end) {
size_t n = strcspn(extensions, " ");
if (extNameLen == n && !strncmp(extName, extensions, n)) {
return true;
}
extensions += (n + 1);
}
return false;
}
Yes, it work very fine:
PFNGLBUFFERSTORAGEEXTPROC glBufferStorageEXT = NULL;
if (IsExtensionSupport(ex, “GL_EXT_buffer_storage”)) {
glBufferStorageEXT = reinterpret_cast<PFNGLBUFFERSTORAGEEXTPROC>(eglGetProcAddress(“glBufferStorageEXT”));
}