29 #ifndef __GLES2Prerequisites_H__
30 #define __GLES2Prerequisites_H__
36 #ifndef GL_GLEXT_PROTOTYPES
37 # define GL_GLEXT_PROTOTYPES
40 #if OGRE_NO_GLES3_SUPPORT == 0
41 # include <GLES3/gles3w.h>
43 # include <GLES2/gles2w.h>
46 #if (OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS)
48 # include <OpenGLES/EAGL.h>
49 # if OGRE_NO_GLES3_SUPPORT == 0
51 # define __gl_es20ext_h_
52 # ifndef GL_GLEXT_PROTOTYPES
53 # define GL_GLEXT_PROTOTYPES
57 #elif (OGRE_PLATFORM == OGRE_PLATFORM_ANDROID) || (OGRE_PLATFORM == OGRE_PLATFORM_NACL)
58 # ifndef GL_GLEXT_PROTOTYPES
59 # define GL_GLEXT_PROTOTYPES
61 # if OGRE_NO_GLES3_SUPPORT == 0
62 # include <GLES3/gl3platform.h>
63 # include <GLES3/gl3.h>
65 # include <GLES2/gl2platform.h>
66 # include <GLES2/gl2.h>
67 # include <GLES2/gl2ext.h>
69 # if (OGRE_PLATFORM == OGRE_PLATFORM_NACL)
70 # include "ppapi/cpp/completion_callback.h"
71 # include "ppapi/cpp/instance.h"
72 # include "ppapi/c/ppp_graphics_3d.h"
73 # include "ppapi/cpp/graphics_3d.h"
74 # include "ppapi/cpp/graphics_3d_client.h"
75 # include "ppapi/gles2/gl2ext_ppapi.h"
76 # undef GL_OES_get_program_binary
77 # undef GL_OES_mapbuffer
78 # undef GL_OES_vertex_array_object
81 # if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32)
82 # if !defined( __MINGW32__ )
83 # define __PRETTY_FUNCTION__ __FUNCTION__
84 # ifndef WIN32_LEAN_AND_MEAN
85 # define WIN32_LEAN_AND_MEAN 1
88 # define NOMINMAX // required to stop windows.h messing up std::min
92 # undef GL_GLEXT_PROTOTYPES
93 # if OGRE_NO_GLES3_SUPPORT == 0
94 # include <GLES3/gl3platform.h>
95 # include <GLES3/gl3.h>
97 # include <GLES2/gl2.h>
98 # include <GLES2/gl2ext.h>
100 # include <EGL/egl.h>
103 #if (OGRE_NO_ETC_CODEC == 0)
104 # ifndef GL_OES_compressed_ETC1_RGB8_texture
105 # define GL_OES_compressed_ETC1_RGB8_texture 1
106 # define GL_ETC1_RGB8_OES 0x8D64
108 # define GL_COMPRESSED_RGB8_ETC2 0x9274
109 # define GL_COMPRESSED_SRGB8_ETC2 0x9275
110 # define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
111 # define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
112 # define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
113 # define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
116 #if (OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS)
117 #define OGRE_IF_IOS_VERSION_IS_GREATER_THAN(vers) \
118 if(static_cast<EAGL2Support*>(dynamic_cast<GLES2RenderSystem*>(Root::getSingleton().getRenderSystem())->getGLSupportRef())->getCurrentOSVersion() >= vers)
120 #define OGRE_IF_IOS_VERSION_IS_GREATER_THAN(vers)
123 #define getGLES2SupportRef() dynamic_cast<GLES2RenderSystem*>(Root::getSingleton().getRenderSystem())->getGLSupportRef()
127 # define GL_FILL 0x1B02
131 class GLES2GpuProgram;
139 #ifndef GL_SAMPLER_2D_SHADOW_EXT
140 # define GL_SAMPLER_2D_SHADOW_EXT 0x8B62
143 #ifndef GL_EXT_texture_filter_anisotropic
144 # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
145 # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
149 #if OGRE_NO_GLES3_SUPPORT == 0
150 #ifndef GL_OES_mapbuffer
151 #define GL_WRITE_ONLY_OES GL_MAP_WRITE_BIT
152 #define glUnmapBufferOES glUnmapBuffer
155 #ifndef GL_OES_texture_half_float
156 #define GL_HALF_FLOAT_OES GL_HALF_FLOAT
159 #ifndef GL_OES_rgb8_rgba8
160 #define GL_RGB8_OES GL_RGB8
161 #define GL_RGBA8_OES GL_RGBA8
164 #ifndef GL_EXT_texture_rg
165 #define GL_RG8_EXT GL_RG8
166 #define GL_RED_EXT GL_RED
167 #define GL_RG_EXT GL_RG
168 #define GL_R8_EXT GL_R8
171 #ifndef GL_EXT_texture_storage
172 #define GL_R16F_EXT GL_R16F
173 #define GL_R32F_EXT GL_R32F
174 #define GL_RG16F_EXT GL_RG16F
175 #define GL_RG32F_EXT GL_RG32F
176 #define GL_RGB16F_EXT GL_RGB16F
177 #define GL_RGB32F_EXT GL_RGB32F
178 #define GL_RGBA16F_EXT GL_RGBA16F
179 #define GL_RGBA32F_EXT GL_RGBA32F
180 #define GL_DEPTH_COMPONENT32_OES GL_DEPTH_COMPONENT32F
183 #ifndef GL_EXT_blend_minmax
184 #define GL_MIN_EXT GL_MIN
185 #define GL_MAX_EXT GL_MAX
188 #ifndef GL_OES_depth24
189 #define GL_DEPTH_COMPONENT24_OES GL_DEPTH_COMPONENT24
192 #ifndef GL_OES_packed_depth_stencil
193 #define GL_DEPTH24_STENCIL8_OES GL_DEPTH24_STENCIL8
196 #ifndef GL_APPLE_texture_max_level
197 #define GL_TEXTURE_MAX_LEVEL_APPLE GL_TEXTURE_MAX_LEVEL
200 #ifndef GL_APPLE_framebuffer_multisample
201 #define GL_MAX_SAMPLES_APPLE GL_MAX_SAMPLES
202 #define glRenderbufferStorageMultisampleAPPLE glRenderbufferStorageMultisample
205 #ifndef GL_EXT_occlusion_query_boolean
206 #define GL_ANY_SAMPLES_PASSED_EXT GL_ANY_SAMPLES_PASSED
207 #define GL_QUERY_RESULT_EXT GL_QUERY_RESULT
208 #define GL_QUERY_RESULT_AVAILABLE_EXT GL_QUERY_RESULT_AVAILABLE
209 #define glGenQueriesEXT glGenQueries
210 #define glDeleteQueriesEXT glDeleteQueries
211 #define glBeginQueryEXT glBeginQuery
212 #define glEndQueryEXT glEndQuery
213 #define glGetQueryObjectuivEXT glGetQueryObjectuiv
216 #ifndef GL_EXT_map_buffer_range
217 #define GL_MAP_WRITE_BIT_EXT GL_MAP_WRITE_BIT
218 #define GL_MAP_FLUSH_EXPLICIT_BIT_EXT GL_MAP_FLUSH_EXPLICIT_BIT
219 #define GL_MAP_INVALIDATE_RANGE_BIT_EXT GL_MAP_INVALIDATE_RANGE_BIT
220 #define GL_MAP_UNSYNCHRONIZED_BIT_EXT GL_MAP_UNSYNCHRONIZED_BIT
221 #define GL_MAP_READ_BIT_EXT GL_MAP_READ_BIT
222 #define glMapBufferRangeEXT glMapBufferRange
223 #define glFlushMappedBufferRangeEXT glFlushMappedBufferRange
226 #ifndef GL_APPLE_sync
227 #define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE GL_SYNC_GPU_COMMANDS_COMPLETE
228 #define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE GL_SYNC_FLUSH_COMMANDS_BIT
229 #define GL_TIMEOUT_IGNORED_APPLE GL_TIMEOUT_IGNORED
230 #define GL_WAIT_FAILED_APPLE GL_WAIT_FAILED
231 #define glFenceSyncAPPLE glFenceSync
232 #define glClientWaitSyncAPPLE glClientWaitSync
233 #define glDeleteSyncAPPLE glDeleteSync
236 #define GL_PROGRAM_BINARY_LENGTH_OES GL_PROGRAM_BINARY_LENGTH
237 #define glProgramBinaryOES glProgramBinary
238 #define glGetProgramBinaryOES glGetProgramBinary
240 #define glDrawElementsInstancedEXT glDrawElementsInstanced
241 #define glDrawArraysInstancedEXT glDrawArraysInstanced
242 #define glVertexAttribDivisorEXT glVertexAttribDivisor
243 #define glBindVertexArrayOES glBindVertexArray
244 #define glGenVertexArraysOES glGenVertexArrays
245 #define glDeleteVertexArraysOES glDeleteVertexArrays
248 #if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32)
250 # undef GL_OES_get_program_binary
253 #if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32) && !defined(__MINGW32__) && !defined(OGRE_STATIC_LIB)
254 # ifdef OGRE_GLES2PLUGIN_EXPORTS
255 # define _OgreGLES2Export __declspec(dllexport)
257 # if defined( __MINGW32__ )
258 # define _OgreGLES2Export
260 # define _OgreGLES2Export __declspec(dllimport)
263 #elif defined ( OGRE_GCC_VISIBILITY )
264 # define _OgreGLES2Export __attribute__ ((visibility("default")))
266 # define _OgreGLES2Export
269 #define DEBUG_(text) \
271 fprintf(stderr, "%s:%d: %s\n", __FUNCTION__, __LINE__, text); \
274 #define ENABLE_GL_CHECK 0
277 #define OGRE_CHECK_GL_ERROR(glFunc) \
280 int e = glGetError(); \
283 const char * errorString = ""; \
286 case GL_INVALID_ENUM: errorString = "GL_INVALID_ENUM"; break; \
287 case GL_INVALID_VALUE: errorString = "GL_INVALID_VALUE"; break; \
288 case GL_INVALID_OPERATION: errorString = "GL_INVALID_OPERATION"; break; \
289 case GL_OUT_OF_MEMORY: errorString = "GL_OUT_OF_MEMORY"; break; \
293 StringVector tokens = StringUtil::split(#glFunc, "("); \
294 sprintf(msgBuf, "OpenGL error 0x%04X %s in %s at line %i for %s\n", e, errorString, __PRETTY_FUNCTION__, __LINE__, tokens[0].c_str()); \
295 LogManager::getSingleton().logMessage(msgBuf); \
299 # define OGRE_CHECK_GL_ERROR(glFunc) { glFunc; }
303 #define EGL_CHECK_ERROR \
305 int e = eglGetError(); \
306 if ((e != 0) && (e != EGL_SUCCESS))\
309 sprintf(msgBuf, "EGL error 0x%04X in %s at line %i\n", e, __PRETTY_FUNCTION__, __LINE__); \
310 LogManager::getSingleton().logMessage(msgBuf); \
311 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, msgBuf, __PRETTY_FUNCTION__); \
315 #define EGL_CHECK_ERROR {}
SharedPtr< GLES2GpuProgram > GLES2GpuProgramPtr
Reference-counted shared pointer, used for objects where implicit destruction is required.
SharedPtr< GLES2Texture > GLES2TexturePtr