// // Copyright 2015 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. //
// Debug.cpp: Defines debug state used for GL_KHR_debug
#include"libANGLE/Debug.h"
#include"common/debug.h"
#include <algorithm> #include <tuple>
namespace
{ constchar *GLSeverityToString(GLenum severity)
{ switch (severity)
{ case GL_DEBUG_SEVERITY_HIGH: return"HIGH"; case GL_DEBUG_SEVERITY_MEDIUM: return"MEDIUM"; case GL_DEBUG_SEVERITY_LOW: return"LOW"; case GL_DEBUG_SEVERITY_NOTIFICATION: default: return"NOTIFICATION";
}
}
constchar *EGLMessageTypeToString(egl::MessageType messageType)
{ switch (messageType)
{ case egl::MessageType::Critical: return"CRITICAL"; case egl::MessageType::Error: return"ERROR"; case egl::MessageType::Warn: return"WARNING"; case egl::MessageType::Info: default: return"INFO";
}
}
constchar *GLMessageTypeToString(GLenum type)
{ switch (type)
{ case GL_DEBUG_TYPE_ERROR: return"error"; case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: return"deprecated behavior"; case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: return"undefined behavior"; case GL_DEBUG_TYPE_PORTABILITY: return"portability"; case GL_DEBUG_TYPE_PERFORMANCE: return"performance"; case GL_DEBUG_TYPE_MARKER: return"marker"; case GL_DEBUG_TYPE_PUSH_GROUP: return"start of group"; case GL_DEBUG_TYPE_POP_GROUP: return"end of group"; case GL_DEBUG_TYPE_OTHER: default: return"other message";
}
}
} // namespace
namespace gl
{
Debug::Control::Control() {}
Debug::Control::~Control() {}
Debug::Control::Control(const Control &other) = default;
Debug::Group::Group() {}
Debug::Group::~Group() {}
Debug::Group::Group(const Group &other) = default;
if (!isMessageEnabled(source, type, id, severity))
{ return;
}
if (mCallbackFunction != nullptr)
{ // TODO(geofflang) Check the synchronous flag and potentially flush messages from another // thread.
mCallbackFunction(source, type, id, severity, static_cast<GLsizei>(message.length()),
message.c_str(), mCallbackUserParam);
} else
{ if (mMessages.size() >= mMaxLoggedMessages)
{ // Drop messages over the limit return;
}
if (messageLog != nullptr)
{ // Check that this message can fit in the message buffer if (messageStringIndex + m.message.length() + 1 > static_cast<size_t>(bufSize))
{ break;
}
std::string msg = message; if (repeatLast)
{
msg += " (this message will no longer repeat)";
}
// Release the lock before we call insertMessage. It will re-acquire the lock.
insertMessage(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_PERFORMANCE, 0, severity, std::move(msg),
gl::LOG_INFO, angle::EntryPoint::GLInvalid);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.