| /****************************************************************************** | |
| @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) | |
| *****************************************************************************/ | |