Home | History | Annotate | Download | only in OGLES2
      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 **************************************************************************/
     78 class CPVRTgles2Ext
     79 {
     80 
     81 public:
     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 
    244 public:
    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