1/*!**************************************************************************** 2 3 @file OGLES2/PVRTgles2Ext.h 4 @ingroup API_OGLES2 5 @copyright Copyright (c) Imagination Technologies Limited. 6 @brief OpenGL ES 2.0 extensions 7 8******************************************************************************/ 9 10#ifndef _PVRTGLES2EXT_H_ 11#define _PVRTGLES2EXT_H_ 12 13 14/*! 15 @addtogroup API_OGLES2 16 @{ 17*/ 18 19#ifdef __APPLE__ 20#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE==1 21#import <OpenGLES/ES2/gl.h> 22#import <OpenGLES/ES2/glext.h> 23// No binary shaders are allowed on the iphone and so this value is not defined 24// Defining here allows for a more graceful fail of binary shader loading at runtime 25// which can be recovered from instead of fail at compile time 26#define GL_SGX_BINARY_IMG 0 27#else 28#include <EGL/egl.h> 29#include <GLES2/gl2.h> 30#include <GLES2/gl2ext.h> 31#include <GLES2/gl2extimg.h> 32#endif 33#else 34#if !defined(EGL_NOT_PRESENT) 35#include <EGL/egl.h> 36#endif 37#include <GLES2/gl2.h> 38#include <GLES2/gl2ext.h> 39#include <GLES2/gl2extimg.h> 40#endif 41 42#if defined(TARGET_OS_IPHONE) 43// the extensions supported on the iPhone are treated as core functions of gl 44// so use this macro to assign the function pointers in this class appropriately. 45#define PVRGetProcAddress(x) ::x 46#else 47 48#if defined(EGL_NOT_PRESENT) 49 50#if defined(__PALMPDK__) 51#include "SDL.h" 52 53#define PVRGetProcAddress(x) SDL_GLES_GetProcAddress(#x) 54#else 55#define PVRGetProcAddress(x) NULL 56#endif 57 58#else 59#define PVRGetProcAddress(x) eglGetProcAddress(#x) 60#endif 61 62#endif 63 64/**************************************************************************** 65** Build options 66****************************************************************************/ 67 68#define GL_PVRTGLESEXT_VERSION 2 69 70/************************************************************************** 71****************************** GL EXTENSIONS ****************************** 72**************************************************************************/ 73 74/*!************************************************************************ 75 @class CPVRTgles2Ext 76 @brief A class for initialising and managing OGLES2 extensions 77**************************************************************************/ 78class CPVRTgles2Ext 79{ 80 81public: 82 // Type definitions for pointers to functions returned by eglGetProcAddress 83 typedef void (GL_APIENTRY *PFNGLMULTIDRAWELEMENTS) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); // glvoid 84 typedef void* (GL_APIENTRY *PFNGLMAPBUFFEROES)(GLenum target, GLenum access); 85 typedef GLboolean (GL_APIENTRY *PFNGLUNMAPBUFFEROES)(GLenum target); 86 typedef void (GL_APIENTRY *PFNGLGETBUFFERPOINTERVOES)(GLenum target, GLenum pname, void** params); 87 typedef void (GL_APIENTRY * PFNGLMULTIDRAWARRAYS) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); // glvoid 88 typedef void (GL_APIENTRY * PFNGLDISCARDFRAMEBUFFEREXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments); 89 90 typedef void (GL_APIENTRY *PFNGLGENQUERIESEXT) (GLsizei n, GLuint *ids); 91 typedef void (GL_APIENTRY *PFNGLDELETEQUERIESEXT) (GLsizei n, const GLuint *ids); 92 typedef GLboolean (GL_APIENTRY *PFNGLISQUERYEXT) (GLuint id); 93 typedef void (GL_APIENTRY *PFNGLBEGINQUERYEXT) (GLenum target, GLuint id); 94 typedef void (GL_APIENTRY *PFNGLENDQUERYEXT) (GLenum target); 95 typedef void (GL_APIENTRY *PFNGLGETQUERYIVEXT) (GLenum target, GLenum pname, GLint *params); 96 typedef void (GL_APIENTRY *PFNGLGETQUERYOBJECTUIVEXT) (GLuint id, GLenum pname, GLuint *params); 97 98 typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOES) (GLuint vertexarray); 99 typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOES) (GLsizei n, const GLuint *vertexarrays); 100 typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOES) (GLsizei n, GLuint *vertexarrays); 101 typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOES) (GLuint vertexarray); 102 103 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMG) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); 104 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMG) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); 105 106 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); 107 108 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); 109 110 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); 111 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); 112 typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); 113 typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); 114 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); 115 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); 116 117 typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXT) (GLsizei n, const GLenum *bufs); 118 119 // GL_EXT_multi_draw_arrays 120 PFNGLMULTIDRAWELEMENTS glMultiDrawElementsEXT; 121 PFNGLMULTIDRAWARRAYS glMultiDrawArraysEXT; 122 123 // GL_EXT_multi_draw_arrays 124 PFNGLMAPBUFFEROES glMapBufferOES; 125 PFNGLUNMAPBUFFEROES glUnmapBufferOES; 126 PFNGLGETBUFFERPOINTERVOES glGetBufferPointervOES; 127 128 // GL_EXT_discard_framebuffer 129 PFNGLDISCARDFRAMEBUFFEREXT glDiscardFramebufferEXT; 130 131 // GL_EXT_occlusion_query_boolean 132#if !defined(GL_EXT_occlusion_query_boolean) 133 #define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F 134 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A 135 #define GL_CURRENT_QUERY_EXT 0x8865 136 #define GL_QUERY_RESULT_EXT 0x8866 137 #define GL_QUERY_RESULT_AVAILABLE_EXT 0x886 138#endif 139 PFNGLGENQUERIESEXT glGenQueriesEXT; 140 PFNGLDELETEQUERIESEXT glDeleteQueriesEXT; 141 PFNGLISQUERYEXT glIsQueryEXT; 142 PFNGLBEGINQUERYEXT glBeginQueryEXT; 143 PFNGLENDQUERYEXT glEndQueryEXT; 144 PFNGLGETQUERYIVEXT glGetQueryivEXT; 145 PFNGLGETQUERYOBJECTUIVEXT glGetQueryObjectuivEXT; 146 147 // GL_OES_vertex_array_object 148#if !defined(GL_OES_vertex_array_object) 149 #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 150#endif 151 152 PFNGLBINDVERTEXARRAYOES glBindVertexArrayOES; 153 PFNGLDELETEVERTEXARRAYSOES glDeleteVertexArraysOES; 154 PFNGLGENVERTEXARRAYSOES glGenVertexArraysOES; 155 PFNGLISVERTEXARRAYOES glIsVertexArrayOES; 156 157 // GL_IMG_multisampled_render_to_texture 158#if !defined(GL_IMG_multisampled_render_to_texture) 159 #define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 160 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 161 #define GL_MAX_SAMPLES_IMG 0x9135 162 #define GL_TEXTURE_SAMPLES_IMG 0x9136 163#endif 164 165 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMG glRenderbufferStorageMultisampleIMG; 166 PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMG glFramebufferTexture2DMultisampleIMG; 167 168 // GL_EXT_multisampled_render_to_texture 169#if !defined(GL_ANGLE_framebuffer_multisample) 170 #define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB 171 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 172 #define GL_MAX_SAMPLES_ANGLE 0x8D57 173#endif 174 175 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC glRenderbufferStorageMultisampleANGLE; 176 177 // GL_NV_framebuffer_blit 178#if !defined(GL_NV_framebuffer_blit) 179 #define GL_READ_FRAMEBUFFER_NV 0x8CA8 180 #define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 181 #define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 182 #define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA 183#endif 184 185 PFNGLBLITFRAMEBUFFERNVPROC glBlitFramebufferNV; 186 187 // GL_OES_texture_3D 188#if !defined(GL_OES_texture_3D) 189 #define GL_TEXTURE_WRAP_R_OES 0x8072 190 #define GL_TEXTURE_3D_OES 0x806F 191 #define GL_TEXTURE_BINDING_3D_OES 0x806A 192 #define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 193 #define GL_SAMPLER_3D_OES 0x8B5F 194 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 195#endif 196 197 PFNGLTEXIMAGE3DOES glTexImage3DOES; 198 PFNGLTEXSUBIMAGE3DOES glTexSubImage3DOES; 199 PFNGLCOPYTEXSUBIMAGE3DOES glCopyTexSubImage3DOES; 200 PFNGLCOMPRESSEDTEXIMAGE3DOES glCompressedTexImage3DOES; 201 PFNGLCOMPRESSEDTEXSUBIMAGE3DOES glCompressedTexSubImage3DOES; 202 PFNGLFRAMEBUFFERTEXTURE3DOES glFramebufferTexture3DOES; 203 204 // GL_EXT_draw_buffers 205#if !defined(GL_EXT_draw_buffers) 206 #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF 207 #define GL_MAX_DRAW_BUFFERS_EXT 0x8824 208 #define GL_DRAW_BUFFER0_EXT 0x8825 209 #define GL_DRAW_BUFFER1_EXT 0x8826 210 #define GL_DRAW_BUFFER2_EXT 0x8827 211 #define GL_DRAW_BUFFER3_EXT 0x8828 212 #define GL_DRAW_BUFFER4_EXT 0x8829 213 #define GL_DRAW_BUFFER5_EXT 0x882A 214 #define GL_DRAW_BUFFER6_EXT 0x882B 215 #define GL_DRAW_BUFFER7_EXT 0x882C 216 #define GL_DRAW_BUFFER8_EXT 0x882D 217 #define GL_DRAW_BUFFER9_EXT 0x882E 218 #define GL_DRAW_BUFFER10_EXT 0x882F 219 #define GL_DRAW_BUFFER11_EXT 0x8830 220 #define GL_DRAW_BUFFER12_EXT 0x8831 221 #define GL_DRAW_BUFFER13_EXT 0x8832 222 #define GL_DRAW_BUFFER14_EXT 0x8833 223 #define GL_DRAW_BUFFER15_EXT 0x8834 224 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 225 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 226 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 227 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 228 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 229 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 230 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 231 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 232 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 233 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 234 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA 235 #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB 236 #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC 237 #define GL_COLOR_ATTACHMENT13_EXT 0x8CED 238 #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE 239 #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF 240#endif 241 242 PFNGLDRAWBUFFERSEXT glDrawBuffersEXT; 243 244public: 245 /*!*********************************************************************** 246 @brief Initialises IMG extensions 247 *************************************************************************/ 248 void LoadExtensions(); 249 250 /*!*********************************************************************** 251 @brief Queries for support of an extension 252 @param[in] extension extension to query for 253 @return True if the extension is supported 254 *************************************************************************/ 255 static bool IsGLExtensionSupported(const char * const extension); 256}; 257 258/*! @} */ 259 260#endif /* _PVRTGLES2EXT_H_ */ 261 262/***************************************************************************** 263 End of file (PVRTgles2Ext.h) 264*****************************************************************************/ 265 266