/****************************************************************************** @File OGLES3/PVRTgles3Ext.cpp @Title OGLES3/PVRTgles3Ext @Version @Copyright Copyright (c) Imagination Technologies Limited. @Platform Independent @Description OpenGL ES 3.0 extensions ******************************************************************************/ #include <string.h> #include "PVRTContext.h" #include "PVRTgles3Ext.h" /**************************************************************************** ** Local code ****************************************************************************/ /**************************************************************************** ** Class: CPVRTgles3Ext ****************************************************************************/ /*!*************************************************************************** @Function LoadExtensions @Description Initialises IMG extensions *****************************************************************************/ void CPVRTgles3Ext::LoadExtensions() { glRenderbufferStorageMultisampleIMG = 0; glFramebufferTexture2DMultisampleIMG = 0; glRenderbufferStorageMultisampleEXT = 0; glFramebufferTexture2DMultisampleEXT = 0; // Supported extensions provide new entry points for OpenGL ES 3.0. const GLubyte *pszGLExtensions; /* Retrieve GL extension string */ pszGLExtensions = glGetString(GL_EXTENSIONS); #if !defined(TARGET_OS_IPHONE) /* GL_IMG_multisampled_render_to_texture */ if (strstr((char *)pszGLExtensions, "GL_IMG_multisampled_render_to_texture")) { glRenderbufferStorageMultisampleIMG = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMG) PVRGetProcAddress(glRenderbufferStorageMultisampleIMG); glFramebufferTexture2DMultisampleIMG = (PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMG) PVRGetProcAddress(glFramebufferTexture2DMultisampleIMG); } /* GL_EXT_multisampled_render_to_texture */ if (strstr((char *)pszGLExtensions, "GL_EXT_multisampled_render_to_texture")) { glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXT) PVRGetProcAddress(glRenderbufferStorageMultisampleEXT); glFramebufferTexture2DMultisampleEXT = (PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXT) PVRGetProcAddress(glFramebufferTexture2DMultisampleEXT); } #endif } /*!*********************************************************************** @Function IsGLExtensionSupported @Input extension extension to query for @Returns True if the extension is supported @Description Queries for support of an extension *************************************************************************/ bool CPVRTgles3Ext::IsGLExtensionSupported(const char * const extension) { // The recommended technique for querying OpenGL extensions; // from http://opengl.org/resources/features/OGLextensions/ const GLubyte *extensions = NULL; const GLubyte *start; GLubyte *where, *terminator; /* Extension names should not have spaces. */ where = (GLubyte *) strchr(extension, ' '); if (where || *extension == '\0') return 0; extensions = glGetString(GL_EXTENSIONS); /* It takes a bit of care to be fool-proof about parsing the OpenGL extensions string. Don't be fooled by sub-strings, etc. */ start = extensions; for (;;) { where = (GLubyte *) strstr((const char *) start, extension); if (!where) break; terminator = where + strlen(extension); if (where == start || *(where - 1) == ' ') if (*terminator == ' ' || *terminator == '\0') return true; start = terminator; } return false; } /***************************************************************************** End of file (PVRTglesExt.cpp) *****************************************************************************/