|  | /*!**************************************************************************** | 
|  |  | 
|  | @file         OGLES2/PVRTgles2Ext.h | 
|  | @ingroup      API_OGLES2 | 
|  | @copyright    Copyright (c) Imagination Technologies Limited. | 
|  | @brief        OpenGL ES 2.0 extensions | 
|  |  | 
|  | ******************************************************************************/ | 
|  |  | 
|  | #ifndef _PVRTGLES2EXT_H_ | 
|  | #define _PVRTGLES2EXT_H_ | 
|  |  | 
|  |  | 
|  | /*! | 
|  | @addtogroup   API_OGLES2 | 
|  | @{ | 
|  | */ | 
|  |  | 
|  | #ifdef __APPLE__ | 
|  | #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE==1 | 
|  | #import <OpenGLES/ES2/gl.h> | 
|  | #import <OpenGLES/ES2/glext.h> | 
|  | // No binary shaders are allowed on the iphone and so this value is not defined | 
|  | // Defining here allows for a more graceful fail of binary shader loading at runtime | 
|  | // which can be recovered from instead of fail at compile time | 
|  | #define GL_SGX_BINARY_IMG 0 | 
|  | #else | 
|  | #include <EGL/egl.h> | 
|  | #include <GLES2/gl2.h> | 
|  | #include <GLES2/gl2ext.h> | 
|  | #include <GLES2/gl2extimg.h> | 
|  | #endif | 
|  | #else | 
|  | #if !defined(EGL_NOT_PRESENT) | 
|  | #include <EGL/egl.h> | 
|  | #endif | 
|  | #include <GLES2/gl2.h> | 
|  | #include <GLES2/gl2ext.h> | 
|  | #include <GLES2/gl2extimg.h> | 
|  | #endif | 
|  |  | 
|  | #if defined(TARGET_OS_IPHONE) | 
|  | // the extensions supported on the iPhone are treated as core functions of gl | 
|  | // so use this macro to assign the function pointers in this class appropriately. | 
|  | #define PVRGetProcAddress(x) ::x | 
|  | #else | 
|  |  | 
|  | #if defined(EGL_NOT_PRESENT) | 
|  |  | 
|  | #if defined(__PALMPDK__) | 
|  | #include "SDL.h" | 
|  |  | 
|  | #define PVRGetProcAddress(x) SDL_GLES_GetProcAddress(#x) | 
|  | #else | 
|  | #define PVRGetProcAddress(x) NULL | 
|  | #endif | 
|  |  | 
|  | #else | 
|  | #define PVRGetProcAddress(x) eglGetProcAddress(#x) | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Build options | 
|  | ****************************************************************************/ | 
|  |  | 
|  | #define GL_PVRTGLESEXT_VERSION 2 | 
|  |  | 
|  | /************************************************************************** | 
|  | ****************************** GL EXTENSIONS ****************************** | 
|  | **************************************************************************/ | 
|  |  | 
|  | /*!************************************************************************ | 
|  | @class CPVRTgles2Ext | 
|  | @brief A class for initialising and managing OGLES2 extensions | 
|  | **************************************************************************/ | 
|  | class CPVRTgles2Ext | 
|  | { | 
|  |  | 
|  | public: | 
|  | // Type definitions for pointers to functions returned by eglGetProcAddress | 
|  | typedef void (GL_APIENTRY *PFNGLMULTIDRAWELEMENTS) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); // glvoid | 
|  | typedef void* (GL_APIENTRY *PFNGLMAPBUFFEROES)(GLenum target, GLenum access); | 
|  | typedef GLboolean (GL_APIENTRY *PFNGLUNMAPBUFFEROES)(GLenum target); | 
|  | typedef void (GL_APIENTRY *PFNGLGETBUFFERPOINTERVOES)(GLenum target, GLenum pname, void** params); | 
|  | typedef void (GL_APIENTRY * PFNGLMULTIDRAWARRAYS) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); // glvoid | 
|  | typedef void (GL_APIENTRY * PFNGLDISCARDFRAMEBUFFEREXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments); | 
|  |  | 
|  | typedef void (GL_APIENTRY *PFNGLGENQUERIESEXT) (GLsizei n, GLuint *ids); | 
|  | typedef void (GL_APIENTRY *PFNGLDELETEQUERIESEXT) (GLsizei n, const GLuint *ids); | 
|  | typedef GLboolean (GL_APIENTRY *PFNGLISQUERYEXT) (GLuint id); | 
|  | typedef void (GL_APIENTRY *PFNGLBEGINQUERYEXT) (GLenum target, GLuint id); | 
|  | typedef void (GL_APIENTRY *PFNGLENDQUERYEXT) (GLenum target); | 
|  | typedef void (GL_APIENTRY *PFNGLGETQUERYIVEXT) (GLenum target, GLenum pname, GLint *params); | 
|  | typedef void (GL_APIENTRY *PFNGLGETQUERYOBJECTUIVEXT) (GLuint id, GLenum pname, GLuint *params); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOES) (GLuint vertexarray); | 
|  | typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOES) (GLsizei n, const GLuint *vertexarrays); | 
|  | typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOES) (GLsizei n, GLuint *vertexarrays); | 
|  | typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOES) (GLuint vertexarray); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMG) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); | 
|  | typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMG) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); | 
|  | typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); | 
|  | typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); | 
|  | typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); | 
|  | typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); | 
|  | typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); | 
|  |  | 
|  | typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXT) (GLsizei n, const GLenum *bufs); | 
|  |  | 
|  | // GL_EXT_multi_draw_arrays | 
|  | PFNGLMULTIDRAWELEMENTS				glMultiDrawElementsEXT; | 
|  | PFNGLMULTIDRAWARRAYS				glMultiDrawArraysEXT; | 
|  |  | 
|  | // GL_EXT_multi_draw_arrays | 
|  | PFNGLMAPBUFFEROES                   glMapBufferOES; | 
|  | PFNGLUNMAPBUFFEROES                 glUnmapBufferOES; | 
|  | PFNGLGETBUFFERPOINTERVOES           glGetBufferPointervOES; | 
|  |  | 
|  | // GL_EXT_discard_framebuffer | 
|  | PFNGLDISCARDFRAMEBUFFEREXT			glDiscardFramebufferEXT; | 
|  |  | 
|  | // GL_EXT_occlusion_query_boolean | 
|  | #if !defined(GL_EXT_occlusion_query_boolean) | 
|  | #define GL_ANY_SAMPLES_PASSED_EXT                               0x8C2F | 
|  | #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT                  0x8D6A | 
|  | #define GL_CURRENT_QUERY_EXT                                    0x8865 | 
|  | #define GL_QUERY_RESULT_EXT                                     0x8866 | 
|  | #define GL_QUERY_RESULT_AVAILABLE_EXT                           0x886 | 
|  | #endif | 
|  | PFNGLGENQUERIESEXT                  glGenQueriesEXT; | 
|  | PFNGLDELETEQUERIESEXT               glDeleteQueriesEXT; | 
|  | PFNGLISQUERYEXT                     glIsQueryEXT; | 
|  | PFNGLBEGINQUERYEXT                  glBeginQueryEXT; | 
|  | PFNGLENDQUERYEXT                    glEndQueryEXT; | 
|  | PFNGLGETQUERYIVEXT                  glGetQueryivEXT; | 
|  | PFNGLGETQUERYOBJECTUIVEXT           glGetQueryObjectuivEXT; | 
|  |  | 
|  | // GL_OES_vertex_array_object | 
|  | #if !defined(GL_OES_vertex_array_object) | 
|  | #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 | 
|  | #endif | 
|  |  | 
|  | PFNGLBINDVERTEXARRAYOES glBindVertexArrayOES; | 
|  | PFNGLDELETEVERTEXARRAYSOES glDeleteVertexArraysOES; | 
|  | PFNGLGENVERTEXARRAYSOES glGenVertexArraysOES; | 
|  | PFNGLISVERTEXARRAYOES glIsVertexArrayOES; | 
|  |  | 
|  | // GL_IMG_multisampled_render_to_texture | 
|  | #if !defined(GL_IMG_multisampled_render_to_texture) | 
|  | #define GL_RENDERBUFFER_SAMPLES_IMG                 0x9133 | 
|  | #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG   0x9134 | 
|  | #define GL_MAX_SAMPLES_IMG                          0x9135 | 
|  | #define GL_TEXTURE_SAMPLES_IMG                      0x9136 | 
|  | #endif | 
|  |  | 
|  | PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMG glRenderbufferStorageMultisampleIMG; | 
|  | PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMG glFramebufferTexture2DMultisampleIMG; | 
|  |  | 
|  | // GL_EXT_multisampled_render_to_texture | 
|  | #if !defined(GL_ANGLE_framebuffer_multisample) | 
|  | #define GL_RENDERBUFFER_SAMPLES_ANGLE               0x8CAB | 
|  | #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 | 
|  | #define GL_MAX_SAMPLES_ANGLE                        0x8D57 | 
|  | #endif | 
|  |  | 
|  | PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC glRenderbufferStorageMultisampleANGLE; | 
|  |  | 
|  | // GL_NV_framebuffer_blit | 
|  | #if !defined(GL_NV_framebuffer_blit) | 
|  | #define GL_READ_FRAMEBUFFER_NV            0x8CA8 | 
|  | #define GL_DRAW_FRAMEBUFFER_NV            0x8CA9 | 
|  | #define GL_DRAW_FRAMEBUFFER_BINDING_NV    0x8CA6 | 
|  | #define GL_READ_FRAMEBUFFER_BINDING_NV    0x8CAA | 
|  | #endif | 
|  |  | 
|  | PFNGLBLITFRAMEBUFFERNVPROC glBlitFramebufferNV; | 
|  |  | 
|  | // GL_OES_texture_3D | 
|  | #if !defined(GL_OES_texture_3D) | 
|  | #define GL_TEXTURE_WRAP_R_OES                                   0x8072 | 
|  | #define GL_TEXTURE_3D_OES                                       0x806F | 
|  | #define GL_TEXTURE_BINDING_3D_OES                               0x806A | 
|  | #define GL_MAX_3D_TEXTURE_SIZE_OES                              0x8073 | 
|  | #define GL_SAMPLER_3D_OES                                       0x8B5F | 
|  | #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES        0x8CD4 | 
|  | #endif | 
|  |  | 
|  | PFNGLTEXIMAGE3DOES glTexImage3DOES; | 
|  | PFNGLTEXSUBIMAGE3DOES glTexSubImage3DOES; | 
|  | PFNGLCOPYTEXSUBIMAGE3DOES glCopyTexSubImage3DOES; | 
|  | PFNGLCOMPRESSEDTEXIMAGE3DOES glCompressedTexImage3DOES; | 
|  | PFNGLCOMPRESSEDTEXSUBIMAGE3DOES glCompressedTexSubImage3DOES; | 
|  | PFNGLFRAMEBUFFERTEXTURE3DOES glFramebufferTexture3DOES; | 
|  |  | 
|  | // GL_EXT_draw_buffers | 
|  | #if !defined(GL_EXT_draw_buffers) | 
|  | #define GL_MAX_COLOR_ATTACHMENTS_EXT                            0x8CDF | 
|  | #define GL_MAX_DRAW_BUFFERS_EXT                                 0x8824 | 
|  | #define GL_DRAW_BUFFER0_EXT                                     0x8825 | 
|  | #define GL_DRAW_BUFFER1_EXT                                     0x8826 | 
|  | #define GL_DRAW_BUFFER2_EXT                                     0x8827 | 
|  | #define GL_DRAW_BUFFER3_EXT                                     0x8828 | 
|  | #define GL_DRAW_BUFFER4_EXT                                     0x8829 | 
|  | #define GL_DRAW_BUFFER5_EXT                                     0x882A | 
|  | #define GL_DRAW_BUFFER6_EXT                                     0x882B | 
|  | #define GL_DRAW_BUFFER7_EXT                                     0x882C | 
|  | #define GL_DRAW_BUFFER8_EXT                                     0x882D | 
|  | #define GL_DRAW_BUFFER9_EXT                                     0x882E | 
|  | #define GL_DRAW_BUFFER10_EXT                                    0x882F | 
|  | #define GL_DRAW_BUFFER11_EXT                                    0x8830 | 
|  | #define GL_DRAW_BUFFER12_EXT                                    0x8831 | 
|  | #define GL_DRAW_BUFFER13_EXT                                    0x8832 | 
|  | #define GL_DRAW_BUFFER14_EXT                                    0x8833 | 
|  | #define GL_DRAW_BUFFER15_EXT                                    0x8834 | 
|  | #define GL_COLOR_ATTACHMENT0_EXT                                0x8CE0 | 
|  | #define GL_COLOR_ATTACHMENT1_EXT                                0x8CE1 | 
|  | #define GL_COLOR_ATTACHMENT2_EXT                                0x8CE2 | 
|  | #define GL_COLOR_ATTACHMENT3_EXT                                0x8CE3 | 
|  | #define GL_COLOR_ATTACHMENT4_EXT                                0x8CE4 | 
|  | #define GL_COLOR_ATTACHMENT5_EXT                                0x8CE5 | 
|  | #define GL_COLOR_ATTACHMENT6_EXT                                0x8CE6 | 
|  | #define GL_COLOR_ATTACHMENT7_EXT                                0x8CE7 | 
|  | #define GL_COLOR_ATTACHMENT8_EXT                                0x8CE8 | 
|  | #define GL_COLOR_ATTACHMENT9_EXT                                0x8CE9 | 
|  | #define GL_COLOR_ATTACHMENT10_EXT                               0x8CEA | 
|  | #define GL_COLOR_ATTACHMENT11_EXT                               0x8CEB | 
|  | #define GL_COLOR_ATTACHMENT12_EXT                               0x8CEC | 
|  | #define GL_COLOR_ATTACHMENT13_EXT                               0x8CED | 
|  | #define GL_COLOR_ATTACHMENT14_EXT                               0x8CEE | 
|  | #define GL_COLOR_ATTACHMENT15_EXT                               0x8CEF | 
|  | #endif | 
|  |  | 
|  | PFNGLDRAWBUFFERSEXT                 glDrawBuffersEXT; | 
|  |  | 
|  | public: | 
|  | /*!*********************************************************************** | 
|  | @brief      		Initialises IMG extensions | 
|  | *************************************************************************/ | 
|  | void LoadExtensions(); | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @brief		    Queries for support of an extension | 
|  | @param[in]		extension extension to query for | 
|  | @return			True if the extension is supported | 
|  | *************************************************************************/ | 
|  | static bool IsGLExtensionSupported(const char * const extension); | 
|  | }; | 
|  |  | 
|  | /*! @} */ | 
|  |  | 
|  | #endif /* _PVRTGLES2EXT_H_ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | End of file (PVRTgles2Ext.h) | 
|  | *****************************************************************************/ | 
|  |  |