Browse Source

Added DebugMessage::setEnabled().

pull/68/head
Vladimír Vondruš 12 years ago
parent
commit
a605306bb5
  1. 2
      doc/opengl-mapping.dox
  2. 2
      doc/opengl-support.dox
  3. 21
      src/Magnum/DebugMessage.cpp
  4. 53
      src/Magnum/DebugMessage.h
  5. 2
      src/Magnum/Implementation/DebugState.cpp
  6. 1
      src/Magnum/Implementation/DebugState.h
  7. 3
      src/Magnum/Renderer.h
  8. 16
      src/Magnum/Test/DebugGLTest.cpp

2
doc/opengl-mapping.dox

@ -93,7 +93,7 @@ OpenGL function | Matching API
@fn_gl{CreateShaderProgram} | |
@fn_gl{CullFace} | @ref Renderer::setFaceCullingMode()
@fn_gl{DebugMessageCallback} | @ref DebugMessage::setCallback()
@fn_gl{DebugMessageControl} | |
@fn_gl{DebugMessageControl} | @ref DebugMessage::setEnabled()
@fn_gl{DebugMessageInsert}, \n @fn_gl_extension2{InsertEventMarker,EXT,debug_marker}, \n @fn_gl_extension{StringMarker,GREMEDY,string_marker} | @ref DebugMessage::insert()
@fn_gl{DepthFunc} | @ref Renderer::setDepthFunction()
@fn_gl{DepthMask} | @ref Renderer::setDepthMask()

2
doc/opengl-support.dox

@ -173,7 +173,7 @@ following:
@extension{ARB,clear_buffer_object} | |
@extension{ARB,compute_shader} | |
@extension{ARB,copy_image} | |
@extension{KHR,debug} (also in ES) | missing log control and retrieval, sync, pipeline, transform feedback and sampler label and debug groups
@extension{KHR,debug} (also in ES) | missing log retrieval, sync, pipeline, transform feedback and sampler label and debug groups
@extension{ARB,explicit_uniform_location} | done
@extension{ARB,fragment_layer_viewport} | done (shading language only)
@extension{ARB,framebuffer_no_attachments} | |

21
src/Magnum/DebugMessage.cpp

@ -143,6 +143,27 @@ void DebugMessage::insertImplementationGremedy(Source, Type, UnsignedInt, Severi
}
#endif
void DebugMessage::setEnabledInternal(const GLenum source, const GLenum type, const GLenum severity, const std::initializer_list<UnsignedInt> ids, const bool enabled) {
Context::current()->state().debug->messageControlImplementation(source, type, severity, ids, enabled);
}
void DebugMessage::controlImplementationNoOp(GLenum, GLenum, GLenum, std::initializer_list<UnsignedInt>, bool) {}
void DebugMessage::controlImplementationKhr(const GLenum source, const GLenum type, const GLenum severity, const std::initializer_list<UnsignedInt> ids, const bool enabled) {
/** @todo Re-enable when extension wrangler is available for ES */
#ifndef MAGNUM_TARGET_GLES
glDebugMessageControl(source, type, severity, ids.size(), ids.begin(), enabled);
#else
static_cast<void>(source);
static_cast<void>(type);
static_cast<void>(severity);
static_cast<void>(ids);
static_cast<void>(enabled);
CORRADE_INTERNAL_ASSERT(false);
//glDebugMessageControlKHR(source, type, severity, ids.size(), ids.begin(), enabled);
#endif
}
void DebugMessage::callbackImplementationNoOp(Callback, const void*) {}
void DebugMessage::callbackImplementationKhr(const Callback callback, const void* userParam) {

53
src/Magnum/DebugMessage.h

@ -282,6 +282,55 @@ class MAGNUM_EXPORT DebugMessage {
insertInternal(source, type, id, severity, {string, size - 1});
}
/**
* @brief Enable or disable particular message type
*
* @see @ref Renderer::Feature::DebugOutput, @fn_gl{DebugMessageControl}
*/
static void setEnabled(Source source, Type type, std::initializer_list<UnsignedInt> ids, bool enabled) {
setEnabledInternal(GLenum(source), GLenum(type), GL_DONT_CARE, ids, enabled);
}
/** @overload */
static void setEnabled(Source source, Type type, Severity severity, bool enabled) {
setEnabledInternal(GLenum(source), GLenum(type), GLenum(severity), {}, enabled);
}
/** @overload */
static void setEnabled(Source source, Type type, bool enabled) {
setEnabledInternal(GLenum(source), GLenum(type), GL_DONT_CARE, {}, enabled);
}
/** @overload */
static void setEnabled(Source source, Severity severity, bool enabled) {
setEnabledInternal(GLenum(source), GL_DONT_CARE, GLenum(severity), {}, enabled);
}
/** @overload */
static void setEnabled(Source source, bool enabled) {
setEnabledInternal(GLenum(source), GL_DONT_CARE, GL_DONT_CARE, {}, enabled);
}
/** @overload */
static void setEnabled(Type type, Severity severity, bool enabled) {
setEnabledInternal(GL_DONT_CARE, GLenum(type), GLenum(severity), {}, enabled);
}
/** @overload */
static void setEnabled(Type type, bool enabled) {
setEnabledInternal(GL_DONT_CARE, GLenum(type), GL_DONT_CARE, {}, enabled);
}
/** @overload */
static void setEnabled(Severity severity, bool enabled) {
setEnabledInternal(GL_DONT_CARE, GL_DONT_CARE, GLenum(severity), {}, enabled);
}
/** @overload */
static void setEnabled(bool enabled) {
setEnabledInternal(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, {}, enabled);
}
/**
* @brief Set debug message callback
*
@ -322,6 +371,10 @@ class MAGNUM_EXPORT DebugMessage {
static MAGNUM_LOCAL void insertImplementationGremedy(Source, Type, UnsignedInt, Severity, Containers::ArrayReference<const char> string);
#endif
static void setEnabledInternal(GLenum source, GLenum type, GLenum severity, std::initializer_list<UnsignedInt> ids, bool enabled);
static MAGNUM_LOCAL void controlImplementationNoOp(GLenum, GLenum, GLenum, std::initializer_list<UnsignedInt>, bool);
static MAGNUM_LOCAL void controlImplementationKhr(GLenum source, GLenum type, GLenum severity, std::initializer_list<UnsignedInt> ids, bool enabled);
static MAGNUM_LOCAL void callbackImplementationNoOp(Callback, const void*);
static MAGNUM_LOCAL void callbackImplementationKhr(Callback callback, const void* userParam);
};

2
src/Magnum/Implementation/DebugState.cpp

@ -38,6 +38,7 @@ DebugState::DebugState(Context& context, std::vector<std::string>& extensions):
getLabelImplementation = &AbstractObject::getLabelImplementationKhr;
labelImplementation = &AbstractObject::labelImplementationKhr;
messageInsertImplementation = &DebugMessage::insertImplementationKhr;
messageControlImplementation = &DebugMessage::controlImplementationKhr;
messageCallbackImplementation = &DebugMessage::callbackImplementationKhr;
} else {
@ -63,6 +64,7 @@ DebugState::DebugState(Context& context, std::vector<std::string>& extensions):
#endif
} else messageInsertImplementation = &DebugMessage::insertImplementationNoOp;
messageControlImplementation = &DebugMessage::controlImplementationNoOp;
messageCallbackImplementation = &DebugMessage::callbackImplementationNoOp;
}
}

1
src/Magnum/Implementation/DebugState.h

@ -39,6 +39,7 @@ struct DebugState {
void(*labelImplementation)(GLenum, GLuint, Containers::ArrayReference<const char>);
void(*messageInsertImplementation)(DebugMessage::Source, DebugMessage::Type, UnsignedInt, DebugMessage::Severity, Containers::ArrayReference<const char>);
void(*messageControlImplementation)(GLenum, GLenum, GLenum, std::initializer_list<UnsignedInt>, bool);
void(*messageCallbackImplementation)(DebugMessage::Callback, const void*);
GLint maxLabelLength, maxLoggedMessages, maxMessageLength;

3
src/Magnum/Renderer.h

@ -86,7 +86,8 @@ class MAGNUM_EXPORT Renderer {
/**
* Debug output
* @see @ref DebugMessage, @ref Feature::DebugOutputSynchronous
* @see @ref DebugMessage, @ref DebugMessage::setEnabled(),
* @ref Feature::DebugOutputSynchronous
* @requires_gl43 %Extension @extension{KHR,debug}
* @requires_es_extension %Extension @es_extension{KHR,debug}
*/

16
src/Magnum/Test/DebugGLTest.cpp

@ -44,6 +44,8 @@ class DebugGLTest: public AbstractOpenGLTester {
void insertMessage();
void insertMessageFallback();
void setMessageEnabled();
void deprecated();
};
@ -52,6 +54,8 @@ DebugGLTest::DebugGLTest() {
&DebugGLTest::insertMessage,
&DebugGLTest::insertMessageFallback,
&DebugGLTest::setMessageEnabled,
#ifdef MAGNUM_BUILD_DEPRECATED
&DebugGLTest::deprecated
#endif
@ -109,6 +113,18 @@ void DebugGLTest::insertMessageFallback() {
MAGNUM_VERIFY_NO_ERROR();
}
void DebugGLTest::setMessageEnabled() {
if(!Context::current()->isExtensionSupported<Extensions::GL::KHR::debug>())
CORRADE_SKIP(Extensions::GL::KHR::debug::string() + std::string(" is not supported"));
/* Try at least some combinations */
DebugMessage::setEnabled(DebugMessage::Source::Application, true);
DebugMessage::setEnabled(DebugMessage::Source::Application, DebugMessage::Type::UndefinedBehavior, {3168, 35487, 234487}, false);
DebugMessage::setEnabled(true);
MAGNUM_VERIFY_NO_ERROR();
}
#ifdef MAGNUM_BUILD_DEPRECATED
void DebugGLTest::deprecated() {
#ifdef __GNUC__

Loading…
Cancel
Save