#ifndef MBGL_RENDERER_GL #define MBGL_RENDERER_GL #include #if __APPLE__ #include "TargetConditionals.h" #if TARGET_OS_IPHONE #include #include #elif TARGET_IPHONE_SIMULATOR #include #include #elif TARGET_OS_MAC #include #include #else #error Unsupported Apple platform #endif #elif __ANDROID__ #define GL_GLEXT_PROTOTYPES #include #include #else #define GL_GLEXT_PROTOTYPES #include #include #endif namespace mbgl { namespace gl { typedef void (* PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (* PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); typedef void (* PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); typedef GLboolean (* PFNGLISVERTEXARRAYPROC) (GLuint array); extern PFNGLBINDVERTEXARRAYPROC BindVertexArray; extern PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays; extern PFNGLGENVERTEXARRAYSPROC GenVertexArrays; extern PFNGLISVERTEXARRAYPROC IsVertexArray; extern bool is_packed_depth_stencil_supported; #define GL_DEPTH24_STENCIL8 0x88F0 extern bool is_depth24_supported; #define GL_DEPTH_COMPONENT24 0x81A6 // Debug group markers, useful for debuggin on iOS #if __APPLE__ && defined(DEBUG) && defined(GL_EXT_debug_marker) // static int indent = 0; inline void start_group(const std::string &str) { glPushGroupMarkerEXT(0, str.c_str()); // fprintf(stderr, "%s%s\n", std::string(indent * 4, ' ').c_str(), str.c_str()); // indent++; } inline void end_group() { glPopGroupMarkerEXT(); // indent--; } #else inline void start_group(const std::string &) {} inline void end_group() {} #endif struct group { inline group(const std::string &str) { start_group(str); } ~group() { end_group(); }; }; } } #ifdef GL_ES_VERSION_2_0 #define glClearDepth glClearDepthf #define glDepthRange glDepthRangef #endif void _CHECK_GL_ERROR(const char *cmd, const char *file, int line); #define _CHECK_ERROR(cmd, file, line) \ cmd; \ do { _CHECK_GL_ERROR(#cmd, file, line); } while (false); #define CHECK_ERROR(cmd) _CHECK_ERROR(cmd, __FILE__, __LINE__) #endif