From 759e806516ab0a0140a42dbdd6bacb54c30d9dcb Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 00:35:30 +1100 Subject: [PATCH 01/11] Add KHR_debug definitions --- include/mbgl/platform/gl.hpp | 68 ++++++++++++++++++++++++++++++++++++ src/platform/gl.cpp | 14 +++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index 6685d1f37..ff5d973d3 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -34,6 +34,74 @@ namespace mbgl { namespace gl { +// GL_KHR_debug +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_DISPLAY_LIST 0x82E7 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TEXTURE 0x1702 +#define GL_RENDERBUFFER 0x8D41 +#define GL_FRAMEBUFFER 0x8D40 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +extern PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; +extern PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; +extern PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; +extern PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; +extern PFNGLGETPOINTERVPROC GetPointerv; +extern PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; +extern PFNGLPOPDEBUGGROUPPROC PopDebugGroup; +extern PFNGLOBJECTLABELPROC ObjectLabel; +extern PFNGLGETOBJECTLABELPROC GetObjectLabel; +extern PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; +extern PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; + typedef void (* PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (* PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); typedef void (* PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index 3133f128b..c9f76bf1d 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -6,6 +6,18 @@ namespace mbgl { namespace gl { +PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; +PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; +PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; +PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; +PFNGLGETPOINTERVPROC GetPointerv; +PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; +PFNGLPOPDEBUGGROUPPROC PopDebugGroup; +PFNGLOBJECTLABELPROC ObjectLabel; +PFNGLGETOBJECTLABELPROC GetObjectLabel; +PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; +PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; + PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays = nullptr; PFNGLGENVERTEXARRAYSPROC GenVertexArrays = nullptr; @@ -32,4 +44,4 @@ void _CHECK_GL_ERROR(const char *cmd, const char *file, int line) { std::cerr << "GL_" << error.c_str() << " - " << file << ":" << line << std::endl; exit(1); } -} \ No newline at end of file +} From 6998c6ecb98090df1f4925442333c369b997b4d8 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 00:44:08 +1100 Subject: [PATCH 02/11] Load KHR_debug on Linux --- platform/default/glfw_view.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 31da0f9d1..0879831d9 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -73,6 +73,19 @@ void GLFWView::initialize(mbgl::Map *map_) { { using namespace mbgl; + if (extensions.find("GL_KHR_debug") != std::string::npos) { + gl::DebugMessageControl = (gl::PFNGLDEBUGMESSAGECONTROLPROC)glfwGetProcAddress("glDebugMessageControl"); + gl::DebugMessageInsert = (gl::PFNGLDEBUGMESSAGEINSERTPROC)glfwGetProcAddress("glDebugMessageInsert"); + gl::DebugMessageCallback = (gl::PFNGLDEBUGMESSAGECALLBACKPROC)glfwGetProcAddress("glDebugMessageCallback"); + gl::GetDebugMessageLog = (gl::PFNGLGETDEBUGMESSAGELOGPROC)glfwGetProcAddress("glGetDebugMessageLog"); + gl::GetPointerv = (gl::PFNGLGETPOINTERVPROC)glfwGetProcAddress("glGetPointerv"); + gl::PushDebugGroup = (gl::PFNGLPUSHDEBUGGROUPPROC)glfwGetProcAddress("glPushDebugGroup"); + gl::PopDebugGroup = (gl::PFNGLPOPDEBUGGROUPPROC)glfwGetProcAddress("glPopDebugGroup"); + gl::ObjectLabel = (gl::PFNGLOBJECTLABELPROC)glfwGetProcAddress("glObjectLabel"); + gl::GetObjectLabel = (gl::PFNGLGETOBJECTLABELPROC)glfwGetProcAddress("glGetObjectLabel"); + gl::ObjectPtrLabel = (gl::PFNGLOBJECTPTRLABELPROC)glfwGetProcAddress("glObjectPtrLabel"); + gl::GetObjectPtrLabel = (gl::PFNGLGETOBJECTPTRLABELPROC)glfwGetProcAddress("glGetObjectPtrLabel"); + } if (extensions.find("GL_ARB_vertex_array_object") != std::string::npos) { gl::BindVertexArray = (gl::PFNGLBINDVERTEXARRAYPROC)glfwGetProcAddress("glBindVertexArray"); From 8f60624becbca685369925794d377d401652f761 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 00:52:43 +1100 Subject: [PATCH 03/11] Fix import problem --- include/mbgl/platform/gl.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index ff5d973d3..02fd64b9a 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -8,11 +8,6 @@ #if TARGET_OS_IPHONE #include #include - // #define glGenVertexArrays glGenVertexArraysOES - // #define glBindVertexArray glBindVertexArrayOES - // #define glDeleteVertexArrays glDeleteVertexArraysOES - // #define GL_ARB_vertex_array_object 1 - // #define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES #elif TARGET_IPHONE_SIMULATOR #include #include @@ -26,7 +21,6 @@ #include #include #else - #define GL_GLEXT_PROTOTYPES #include #include #endif From bbfe5d5ce4799dbfb55d4e4d44bc254592529c29 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 01:21:40 +1100 Subject: [PATCH 04/11] Define GL callback func. Improve GL err macro. --- include/mbgl/platform/gl.hpp | 27 +++++++++++++++------------ src/platform/gl.cpp | 8 +++++++- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index 02fd64b9a..73d04b7a9 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -21,6 +21,7 @@ #include #include #else + #define GL_GLEXT_PROTOTYPES #include #include #endif @@ -72,18 +73,18 @@ namespace gl { #define GL_TEXTURE 0x1702 #define GL_RENDERBUFFER 0x8D41 #define GL_FRAMEBUFFER 0x8D40 -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (* GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam); +typedef void (* PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (* PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (* PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (* PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (* PFNGLGETPOINTERVPROC) (GLenum pname, void **params); +typedef void (* PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (* PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (* PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (* PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (* PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (* PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); extern PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; extern PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; extern PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; @@ -95,7 +96,9 @@ extern PFNGLOBJECTLABELPROC ObjectLabel; extern PFNGLGETOBJECTLABELPROC GetObjectLabel; extern PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; extern PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; +void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam); +#define GL_VERTEX_ARRAY_BINDING 0x85B5 typedef void (* PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (* PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); typedef void (* PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index c9f76bf1d..bec1136bb 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -18,6 +19,10 @@ PFNGLGETOBJECTLABELPROC GetObjectLabel; PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; +void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam) { + //mbgl::Error(mbgl::Event::OpenGL) +} + PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays = nullptr; PFNGLGENVERTEXARRAYSPROC GenVertexArrays = nullptr; @@ -39,9 +44,10 @@ void _CHECK_GL_ERROR(const char *cmd, const char *file, int line) { case GL_INVALID_VALUE: error = "INVALID_VALUE"; break; case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break; + default: error = "(unknown)"; break; } - std::cerr << "GL_" << error.c_str() << " - " << file << ":" << line << std::endl; + mbgl::Log::Error(mbgl::Event::OpenGL, "GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); exit(1); } } From 2113e27990bc496a3bd26cf079f6156ac2dd9ff6 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 01:53:44 +1100 Subject: [PATCH 05/11] Implement debug callback --- src/platform/gl.cpp | 41 +++++++++++++++++++++++++++++++++++++--- src/renderer/painter.cpp | 10 ++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index bec1136bb..2695804c8 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -19,8 +19,43 @@ PFNGLGETOBJECTLABELPROC GetObjectLabel; PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; -void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam) { - //mbgl::Error(mbgl::Event::OpenGL) +void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei, const GLchar *message, const void *) { + std::string strSource; + switch (source) { + case GL_DEBUG_SOURCE_API: strSource = "DEBUG_SOURCE_API"; break; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: strSource = "DEBUG_SOURCE_WINDOW_SYSTEM"; break; + case GL_DEBUG_SOURCE_SHADER_COMPILER: strSource = "DEBUG_SOURCE_SHADER_COMPILER"; break; + case GL_DEBUG_SOURCE_THIRD_PARTY: strSource = "DEBUG_SOURCE_THIRD_PARTY"; break; + case GL_DEBUG_SOURCE_APPLICATION: strSource = "DEBUG_SOURCE_APPLICATION"; break; + case GL_DEBUG_SOURCE_OTHER: strSource = "DEBUG_SOURCE_OTHER"; break; + default: strSource = "(unknown)"; break; + } + + std::string strType; + switch (type) { + case GL_DEBUG_TYPE_ERROR: strType = "DEBUG_TYPE_ERROR"; break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: strType = "DEBUG_TYPE_DEPRECATED_BEHAVIOR"; break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: strType = "DEBUG_TYPE_UNDEFINED_BEHAVIOR"; break; + case GL_DEBUG_TYPE_PERFORMANCE: strType = "DEBUG_TYPE_PERFORMANCE"; break; + case GL_DEBUG_TYPE_PORTABILITY: strType = "DEBUG_TYPE_PORTABILITY"; break; + case GL_DEBUG_TYPE_OTHER: strType = "DEBUG_TYPE_OTHER"; break; + case GL_DEBUG_TYPE_MARKER: strType = "DEBUG_TYPE_MARKER"; break; + case GL_DEBUG_TYPE_PUSH_GROUP: strType = "DEBUG_TYPE_OTHER"; break; + case GL_DEBUG_TYPE_POP_GROUP: strType = "DEBUG_TYPE_POP_GROUP"; break; + default: strSource = "(unknown)"; break; + } + + std::string strSeverity; + mbgl::EventSeverity evtSeverity; + switch (severity) { + case GL_DEBUG_SEVERITY_HIGH: strSeverity = "DEBUG_SEVERITY_HIGH"; evtSeverity = mbgl::EventSeverity::Error; break; + case GL_DEBUG_SEVERITY_MEDIUM: strSeverity = "DEBUG_SEVERITY_MEDIUM"; evtSeverity = mbgl::EventSeverity::Warning; break; + case GL_DEBUG_SEVERITY_LOW: strSeverity = "DEBUG_SEVERITY_LOW"; evtSeverity = mbgl::EventSeverity::Info; break; + case GL_DEBUG_SEVERITY_NOTIFICATION: strSeverity = "DEBUG_SEVERITY_NOTIFICATION"; evtSeverity = mbgl::EventSeverity::Debug; break; + default: strSource = "(unknown)"; evtSeverity = mbgl::EventSeverity::Debug; break; + } + + mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL Debug Message: %s %s %u %s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); } PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; @@ -47,7 +82,7 @@ void _CHECK_GL_ERROR(const char *cmd, const char *file, int line) { default: error = "(unknown)"; break; } - mbgl::Log::Error(mbgl::Event::OpenGL, "GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); + mbgl::Log::Error(mbgl::Event::OpenGL, "GL Error: GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); exit(1); } } diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 960168bd4..7c94147c6 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -42,6 +42,16 @@ void Painter::setup() { #if defined(DEBUG) util::stopwatch stopwatch("painter setup"); #endif + + // Enable GL debugging + if ((gl::DebugMessageControl != nullptr) && (gl::DebugMessageCallback != nullptr)) { + // This will enable all messages including performance hints + //gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); + gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE); + gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE); + gl::DebugMessageCallback(gl::debug_callback, nullptr); + } + setupShaders(); assert(iconShader); From d27ede63fe58894344b136a052b9d25cdfba5c97 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 01:57:18 +1100 Subject: [PATCH 06/11] Enable all messages --- src/renderer/painter.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 7c94147c6..3b4e817d3 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -46,9 +46,12 @@ void Painter::setup() { // Enable GL debugging if ((gl::DebugMessageControl != nullptr) && (gl::DebugMessageCallback != nullptr)) { // This will enable all messages including performance hints - //gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); - gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE); - gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE); + gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); + + // This will only enable high and medium severity messages + //gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE); + //gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE); + gl::DebugMessageCallback(gl::debug_callback, nullptr); } From 763e636fd758410b56353bfe2b8a7ab6052c2430 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 02:01:10 +1100 Subject: [PATCH 07/11] Improve formatting --- src/platform/gl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index 2695804c8..7fb4debd7 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -55,7 +55,7 @@ void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsi default: strSource = "(unknown)"; evtSeverity = mbgl::EventSeverity::Debug; break; } - mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL Debug Message: %s %s %u %s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); + mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL_%s GL_%s %u GL_%s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); } PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; @@ -82,7 +82,7 @@ void _CHECK_GL_ERROR(const char *cmd, const char *file, int line) { default: error = "(unknown)"; break; } - mbgl::Log::Error(mbgl::Event::OpenGL, "GL Error: GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); + mbgl::Log::Error(mbgl::Event::OpenGL, "GL_%s (0x%04X) - %s:%i", error.c_str(), file, line, err); exit(1); } } From 204700ff7e2e45ecc4ce50582988c014626b0dfe Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 02:29:07 +1100 Subject: [PATCH 08/11] Stop mipmap allocation for textures --- src/geometry/glyph_atlas.cpp | 1 + src/geometry/sprite_atlas.cpp | 1 + src/renderer/prerendered_texture.cpp | 1 + src/util/raster.cpp | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/geometry/glyph_atlas.cpp b/src/geometry/glyph_atlas.cpp index 50bda5dc4..abfde0a55 100644 --- a/src/geometry/glyph_atlas.cpp +++ b/src/geometry/glyph_atlas.cpp @@ -143,6 +143,7 @@ void GlyphAtlas::bind() { if (!texture) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); diff --git a/src/geometry/sprite_atlas.cpp b/src/geometry/sprite_atlas.cpp index d7ef1e789..cc832b242 100644 --- a/src/geometry/sprite_atlas.cpp +++ b/src/geometry/sprite_atlas.cpp @@ -201,6 +201,7 @@ void SpriteAtlas::bind(bool linear) { if (!texture) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); first = true; diff --git a/src/renderer/prerendered_texture.cpp b/src/renderer/prerendered_texture.cpp index c9507d602..8d727d351 100644 --- a/src/renderer/prerendered_texture.cpp +++ b/src/renderer/prerendered_texture.cpp @@ -37,6 +37,7 @@ void PrerenderedTexture::bindFramebuffer() { if (texture == 0) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); diff --git a/src/util/raster.cpp b/src/util/raster.cpp index 4f6acc36c..40fb440fb 100644 --- a/src/util/raster.cpp +++ b/src/util/raster.cpp @@ -48,6 +48,7 @@ void Raster::bind(bool linear) { if (img && !textured) { texture = texturepool.getTextureID(); glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->getData()); @@ -101,4 +102,3 @@ void Raster::updateTransitions(timestamp now) { fade_transition = nullptr; } } - From 66349e33ab3bde1a7fe901e84c70c04884476f78 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 03:09:09 +1100 Subject: [PATCH 09/11] Add GL_ARB_debug_output --- include/mbgl/platform/gl.hpp | 2 +- platform/default/glfw_view.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index 73d04b7a9..20e9ae2d6 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -29,7 +29,7 @@ namespace mbgl { namespace gl { -// GL_KHR_debug +// GL_KHR_debug / GL_ARB_debug_output #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 0879831d9..802fc10e2 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -85,6 +85,12 @@ void GLFWView::initialize(mbgl::Map *map_) { gl::GetObjectLabel = (gl::PFNGLGETOBJECTLABELPROC)glfwGetProcAddress("glGetObjectLabel"); gl::ObjectPtrLabel = (gl::PFNGLOBJECTPTRLABELPROC)glfwGetProcAddress("glObjectPtrLabel"); gl::GetObjectPtrLabel = (gl::PFNGLGETOBJECTPTRLABELPROC)glfwGetProcAddress("glGetObjectPtrLabel"); + } else if (extensions.find("GL_ARB_debug_output") != std::string::npos) { + gl::DebugMessageControl = (gl::PFNGLDEBUGMESSAGECONTROLPROC)glfwGetProcAddress("glDebugMessageControlARB"); + gl::DebugMessageInsert = (gl::PFNGLDEBUGMESSAGEINSERTPROC)glfwGetProcAddress("glDebugMessageInsertARB"); + gl::DebugMessageCallback = (gl::PFNGLDEBUGMESSAGECALLBACKPROC)glfwGetProcAddress("glDebugMessageCallbackARB"); + gl::GetDebugMessageLog = (gl::PFNGLGETDEBUGMESSAGELOGPROC)glfwGetProcAddress("glGetDebugMessageLogARB"); + gl::GetPointerv = (gl::PFNGLGETPOINTERVPROC)glfwGetProcAddress("glGetPointerv"); } if (extensions.find("GL_ARB_vertex_array_object") != std::string::npos) { From 2800f361424ee84af283fbe7bb73b5afbe264c6e Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 03:24:42 +1100 Subject: [PATCH 10/11] Add debug markers and labels --- include/mbgl/platform/gl.hpp | 20 ++++++++++++++++++++ platform/default/glfw_view.cpp | 25 +++++++++++++++++++------ src/platform/gl.cpp | 29 ++++++++++++++++++----------- 3 files changed, 57 insertions(+), 17 deletions(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index 20e9ae2d6..7dbe66778 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -98,6 +98,26 @@ extern PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; extern PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam); +// GL_EXT_debug_marker +typedef void (* PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (* PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (* PFNGLPOPGROUPMARKEREXTPROC) (void); +extern PFNGLINSERTEVENTMARKEREXTPROC InsertEventMarkerEXT; +extern PFNGLPUSHGROUPMARKEREXTPROC PushGroupMarkerEXT; +extern PFNGLPOPGROUPMARKEREXTPROC PopGroupMarkerEXT; + +// GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (* PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (* PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +extern PFNGLLABELOBJECTEXTPROC LabelObjectEXT; +extern PFNGLGETOBJECTLABELEXTPROC GetObjectLabelEXT; + #define GL_VERTEX_ARRAY_BINDING 0x85B5 typedef void (* PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (* PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 802fc10e2..ed37653bb 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -85,12 +85,25 @@ void GLFWView::initialize(mbgl::Map *map_) { gl::GetObjectLabel = (gl::PFNGLGETOBJECTLABELPROC)glfwGetProcAddress("glGetObjectLabel"); gl::ObjectPtrLabel = (gl::PFNGLOBJECTPTRLABELPROC)glfwGetProcAddress("glObjectPtrLabel"); gl::GetObjectPtrLabel = (gl::PFNGLGETOBJECTPTRLABELPROC)glfwGetProcAddress("glGetObjectPtrLabel"); - } else if (extensions.find("GL_ARB_debug_output") != std::string::npos) { - gl::DebugMessageControl = (gl::PFNGLDEBUGMESSAGECONTROLPROC)glfwGetProcAddress("glDebugMessageControlARB"); - gl::DebugMessageInsert = (gl::PFNGLDEBUGMESSAGEINSERTPROC)glfwGetProcAddress("glDebugMessageInsertARB"); - gl::DebugMessageCallback = (gl::PFNGLDEBUGMESSAGECALLBACKPROC)glfwGetProcAddress("glDebugMessageCallbackARB"); - gl::GetDebugMessageLog = (gl::PFNGLGETDEBUGMESSAGELOGPROC)glfwGetProcAddress("glGetDebugMessageLogARB"); - gl::GetPointerv = (gl::PFNGLGETPOINTERVPROC)glfwGetProcAddress("glGetPointerv"); + } else { + if (extensions.find("GL_ARB_debug_output") != std::string::npos) { + gl::DebugMessageControl = (gl::PFNGLDEBUGMESSAGECONTROLPROC)glfwGetProcAddress("glDebugMessageControlARB"); + gl::DebugMessageInsert = (gl::PFNGLDEBUGMESSAGEINSERTPROC)glfwGetProcAddress("glDebugMessageInsertARB"); + gl::DebugMessageCallback = (gl::PFNGLDEBUGMESSAGECALLBACKPROC)glfwGetProcAddress("glDebugMessageCallbackARB"); + gl::GetDebugMessageLog = (gl::PFNGLGETDEBUGMESSAGELOGPROC)glfwGetProcAddress("glGetDebugMessageLogARB"); + gl::GetPointerv = (gl::PFNGLGETPOINTERVPROC)glfwGetProcAddress("glGetPointerv"); + } + + if (extensions.find("GL_EXT_debug_marker") != std::string::npos) { + gl::InsertEventMarkerEXT = (gl::PFNGLINSERTEVENTMARKEREXTPROC)glfwGetProcAddress("glInsertEventMarkerEXT"); + gl::PushGroupMarkerEXT = (gl::PFNGLPUSHGROUPMARKEREXTPROC)glfwGetProcAddress("glPushGroupMarkerEXT"); + gl::PopGroupMarkerEXT = (gl::PFNGLPOPGROUPMARKEREXTPROC)glfwGetProcAddress("glPopGroupMarkerEXT"); + } + + if (extensions.find("GL_EXT_debug_label") != std::string::npos) { + gl::LabelObjectEXT = (gl::PFNGLLABELOBJECTEXTPROC)glfwGetProcAddress("glLabelObjectEXT"); + gl::GetObjectLabelEXT = (gl::PFNGLGETOBJECTLABELEXTPROC)glfwGetProcAddress("glGetObjectLabelEXT"); + } } if (extensions.find("GL_ARB_vertex_array_object") != std::string::npos) { diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index 7fb4debd7..c0c3bb1c7 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -7,17 +7,17 @@ namespace mbgl { namespace gl { -PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; -PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; -PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; -PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; -PFNGLGETPOINTERVPROC GetPointerv; -PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; -PFNGLPOPDEBUGGROUPPROC PopDebugGroup; -PFNGLOBJECTLABELPROC ObjectLabel; -PFNGLGETOBJECTLABELPROC GetObjectLabel; -PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; -PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; +PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl = nullptr; +PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert = nullptr; +PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback = nullptr; +PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog = nullptr; +PFNGLGETPOINTERVPROC GetPointerv = nullptr; +PFNGLPUSHDEBUGGROUPPROC PushDebugGroup = nullptr; +PFNGLPOPDEBUGGROUPPROC PopDebugGroup = nullptr; +PFNGLOBJECTLABELPROC ObjectLabel = nullptr; +PFNGLGETOBJECTLABELPROC GetObjectLabel = nullptr; +PFNGLOBJECTPTRLABELPROC ObjectPtrLabel = nullptr; +PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel = nullptr; void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei, const GLchar *message, const void *) { std::string strSource; @@ -58,6 +58,13 @@ void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsi mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL_%s GL_%s %u GL_%s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); } +PFNGLINSERTEVENTMARKEREXTPROC InsertEventMarkerEXT = nullptr; +PFNGLPUSHGROUPMARKEREXTPROC PushGroupMarkerEXT = nullptr; +PFNGLPOPGROUPMARKEREXTPROC PopGroupMarkerEXT = nullptr; + +PFNGLLABELOBJECTEXTPROC LabelObjectEXT = nullptr; +PFNGLGETOBJECTLABELEXTPROC GetObjectLabelEXT = nullptr; + PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays = nullptr; PFNGLGENVERTEXARRAYSPROC GenVertexArrays = nullptr; From 5ad094e82352721a0ecc789fc414f3eafa40d357 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Tue, 2 Dec 2014 03:43:04 +1100 Subject: [PATCH 11/11] Fix iOS compile --- include/mbgl/platform/gl.hpp | 16 ++++++++++++---- src/geometry/glyph_atlas.cpp | 2 ++ src/geometry/sprite_atlas.cpp | 2 ++ src/renderer/prerendered_texture.cpp | 2 ++ src/util/raster.cpp | 2 ++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index 7dbe66778..a63dd9b1f 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -129,17 +129,25 @@ extern PFNGLGENVERTEXARRAYSPROC GenVertexArrays; extern PFNGLISVERTEXARRAYPROC IsVertexArray; -// Debug group markers, useful for debuggin on iOS -#if __APPLE__ && defined(DEBUG) && defined(GL_EXT_debug_marker) +// Debug group markers, useful for debugging on iOS +#if defined(DEBUG) // static int indent = 0; inline void start_group(const std::string &str) { - glPushGroupMarkerEXT(0, str.c_str()); + if (gl::PushDebugGroup != nullptr) { + gl::PushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, str.size(), str.c_str()); + } else if (gl::PushGroupMarkerEXT != nullptr) { + gl::PushGroupMarkerEXT(str.size(), str.c_str()); + } // fprintf(stderr, "%s%s\n", std::string(indent * 4, ' ').c_str(), str.c_str()); // indent++; } inline void end_group() { - glPopGroupMarkerEXT(); + if (gl::PopDebugGroup != nullptr) { + gl::PopDebugGroup(); + } else if (gl::PopGroupMarkerEXT != nullptr) { + gl::PopGroupMarkerEXT(); + } // indent--; } #else diff --git a/src/geometry/glyph_atlas.cpp b/src/geometry/glyph_atlas.cpp index abfde0a55..40459821f 100644 --- a/src/geometry/glyph_atlas.cpp +++ b/src/geometry/glyph_atlas.cpp @@ -143,7 +143,9 @@ void GlyphAtlas::bind() { if (!texture) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); +#ifndef GL_ES_VERSION_2_0 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); +#endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); diff --git a/src/geometry/sprite_atlas.cpp b/src/geometry/sprite_atlas.cpp index cc832b242..7dc8f60ae 100644 --- a/src/geometry/sprite_atlas.cpp +++ b/src/geometry/sprite_atlas.cpp @@ -201,7 +201,9 @@ void SpriteAtlas::bind(bool linear) { if (!texture) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); +#ifndef GL_ES_VERSION_2_0 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); +#endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); first = true; diff --git a/src/renderer/prerendered_texture.cpp b/src/renderer/prerendered_texture.cpp index 8d727d351..dd35f1137 100644 --- a/src/renderer/prerendered_texture.cpp +++ b/src/renderer/prerendered_texture.cpp @@ -37,7 +37,9 @@ void PrerenderedTexture::bindFramebuffer() { if (texture == 0) { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); +#ifndef GL_ES_VERSION_2_0 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); +#endif glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); diff --git a/src/util/raster.cpp b/src/util/raster.cpp index 40fb440fb..d6a680c39 100644 --- a/src/util/raster.cpp +++ b/src/util/raster.cpp @@ -48,7 +48,9 @@ void Raster::bind(bool linear) { if (img && !textured) { texture = texturepool.getTextureID(); glBindTexture(GL_TEXTURE_2D, texture); +#ifndef GL_ES_VERSION_2_0 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); +#endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->getData());