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