From 8781220335a1f7b8b60122df13fedba23bef9b35 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 8 Apr 2014 01:21:55 +0300 Subject: Add support for OpenGL extension GL_EXT_debug_marker. --- src/CMakeLists.txt | 1 + src/Makefile.am | 1 + src/graphicsmanager.cpp | 13 +++++++++++++ src/gui/widgets/desktop.cpp | 4 ++++ src/gui/windows/chatwindow.cpp | 6 ++++++ src/render/mgl.cpp | 3 +++ src/render/mgl.h | 8 ++++++++ src/render/opengldebug.h | 36 ++++++++++++++++++++++++++++++++++++ 8 files changed, 72 insertions(+) create mode 100644 src/render/opengldebug.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 961fb7abd..20500cdcb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -726,6 +726,7 @@ SET(SRCS render/graphics_drawImageRect.hpp render/nullopenglgraphics.cpp render/nullopenglgraphics.h + render/opengldebug.h render/openglgraphicsdef.hpp render/openglgraphicsdefadvanced.hpp render/renderers.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 942ac7244..72a28fb0b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -806,6 +806,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ render/graphics_drawImageRect.hpp \ render/nullopenglgraphics.cpp \ render/nullopenglgraphics.h \ + render/opengldebug.h \ render/openglgraphicsdef.hpp \ render/openglgraphicsdefadvanced.hpp \ render/renderers.cpp \ diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index e1c5bf35d..4817ecb03 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -833,6 +833,19 @@ void GraphicsManager::initOpenGLFunctions() if (!mglGetObjectLabel) assignFunction(glGetObjectLabel, "glGetObjectLabel"); } + if (supportExtension("GL_EXT_debug_marker")) + { + logger->log1("found GL_EXT_debug_marker"); + assignFunction(glInsertEventMarker, "glInsertEventMarkerEXT"); + if (!mglInsertEventMarker) + assignFunction(glInsertEventMarker, "glInsertEventMarker"); + assignFunction(glPushGroupMarker, "glPushGroupMarkerEXT"); + if (!mglPushGroupMarker) + assignFunction(glPushGroupMarker, "glPushGroupMarker"); + assignFunction(glPopGroupMarker, "glPopGroupMarkerEXT"); + if (!mglPopGroupMarker) + assignFunction(glPopGroupMarker, "glPopGroupMarker"); + } #ifdef WIN32 assignFunction(wglGetExtensionsString, "wglGetExtensionsStringARB"); diff --git a/src/gui/widgets/desktop.cpp b/src/gui/widgets/desktop.cpp index 6ae892c81..3e77a65a5 100644 --- a/src/gui/widgets/desktop.cpp +++ b/src/gui/widgets/desktop.cpp @@ -28,6 +28,8 @@ #include "input/inputmanager.h" +#include "render/opengldebug.h" + #include "resources/image.h" #include "resources/imagehelper.h" #include "resources/resourcemanager.h" @@ -111,6 +113,7 @@ void Desktop::widgetResized(const Event &event A_UNUSED) void Desktop::draw(Graphics *graphics) { BLOCK_START("Desktop::draw") + GLDEBUG_START("Desktop::draw") const Rect &rect = mDimension; const int width = rect.width; @@ -144,6 +147,7 @@ void Desktop::draw(Graphics *graphics) } Container::draw(graphics); + GLDEBUG_END() BLOCK_END("Desktop::draw") } diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index 05ee56356..c3a3569f7 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -62,6 +62,8 @@ #include "gui/widgets/tabs/tradetab.h" #include "gui/widgets/tabs/whispertab.h" +#include "render/opengldebug.h" + #include "net/chathandler.h" #include "net/playerhandler.h" #include "net/net.h" @@ -1867,7 +1869,11 @@ void ChatWindow::draw(Graphics* graphics) { BLOCK_START("ChatWindow::draw") if (!mAutoHide || mHaveMouse) + { + GLDEBUG_START("ChatWindow::draw"); Window::draw(graphics); + GLDEBUG_END(); + } BLOCK_END("ChatWindow::draw") } diff --git a/src/render/mgl.cpp b/src/render/mgl.cpp index ff51c659d..bf8483a67 100644 --- a/src/render/mgl.cpp +++ b/src/render/mgl.cpp @@ -45,6 +45,9 @@ defName(glDebugMessageCallback); defName(glFrameTerminator); defName(glLabelObject); defName(glGetObjectLabel); +defName(glInsertEventMarker); +defName(glPushGroupMarker); +defName(glPopGroupMarker); #ifdef WIN32 defName(wglGetExtensionsString); diff --git a/src/render/mgl.h b/src/render/mgl.h index 8fc98f8fe..b612c5e03 100644 --- a/src/render/mgl.h +++ b/src/render/mgl.h @@ -113,6 +113,11 @@ typedef void (APIENTRY *glLabelObject_t) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (APIENTRY *glGetObjectLabel_t) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRY *glInsertEventMarker_t) + (GLsizei length, const char *marker); +typedef void (APIENTRY *glPushGroupMarker_t) + (GLsizei length, const char *marker); +typedef void (APIENTRY *glPopGroupMarker_t) (void); // callback typedef void (APIENTRY *GLDEBUGPROC_t) (GLenum source, GLenum type, GLuint id, @@ -140,6 +145,9 @@ defNameE(glDebugMessageCallback); defNameE(glFrameTerminator); defNameE(glLabelObject); defNameE(glGetObjectLabel); +defNameE(glInsertEventMarker); +defNameE(glPushGroupMarker); +defNameE(glPopGroupMarker); #ifdef WIN32 typedef const char* (APIENTRY * wglGetExtensionsString_t) (HDC hdc); diff --git a/src/render/opengldebug.h b/src/render/opengldebug.h new file mode 100644 index 000000000..82b151cc8 --- /dev/null +++ b/src/render/opengldebug.h @@ -0,0 +1,36 @@ +/* + * The ManaPlus Client + * Copyright (C) 2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef RENDER_OPENGLDEBUG_H +#define RENDER_OPENGLDEBUG_H + +#include "render/mgl.h" + +#if defined(DEBUG_OPENGL) && defined(USE_OPENGL) +#define GLDEBUG_START(text) if (mglPushGroupMarker) \ + mglPushGroupMarker(sizeof(text), text); +#define GLDEBUG_END() if (mglPopGroupMarker) \ + mglPopGroupMarker(); +#else +#define GLDEBUG_START(text) +#define GLDEBUG_END() +#endif + +#endif // RENDER_OPENGLDEBUG_H -- cgit v1.2.3-70-g09d2