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