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