Browse Source

Debug operator for Context::Flags.

pull/203/merge
Vladimír Vondruš 9 years ago
parent
commit
b83b122005
  1. 11
      src/Magnum/Context.cpp
  2. 6
      src/Magnum/Context.h
  3. 9
      src/Magnum/Platform/magnum-info.cpp
  4. 14
      src/Magnum/Test/ContextTest.cpp

11
src/Magnum/Context.cpp

@ -31,6 +31,7 @@
#include <iostream> /* for initialization log redirection */
#include <string>
#include <unordered_map>
#include <Corrade/Containers/EnumSet.hpp>
#include <Corrade/Utility/Arguments.h>
#include <Corrade/Utility/Debug.h>
#include <Corrade/Utility/String.h>
@ -876,6 +877,16 @@ Debug& operator<<(Debug& debug, const Context::Flag value) {
return debug << "Context::Flag(" << Debug::nospace << reinterpret_cast<void*>(GLint(value)) << Debug::nospace << ")";
}
Debug& operator<<(Debug& debug, const Context::Flags value) {
return Containers::enumSetDebugOutput(debug, value, "Context::Flags{}", {
Context::Flag::Debug,
Context::Flag::NoError,
#ifndef MAGNUM_TARGET_GLES
Context::Flag::RobustAccess
#endif
});
}
#endif
#endif

6
src/Magnum/Context.h

@ -562,11 +562,17 @@ class MAGNUM_EXPORT Context {
bool _displayInitializationLog;
};
#ifndef MAGNUM_TARGET_WEBGL
CORRADE_ENUMSET_OPERATORS(Context::Flags)
#endif
CORRADE_ENUMSET_OPERATORS(Context::DetectedDrivers)
#ifndef MAGNUM_TARGET_WEBGL
/** @debugoperatorclassenum{Magnum::Context,Magnum::Context::Flag} */
MAGNUM_EXPORT Debug& operator<<(Debug& debug, Context::Flag value);
/** @debugoperatorclassenum{Magnum::Context,Magnum::Context::Flags} */
MAGNUM_EXPORT Debug& operator<<(Debug& debug, Context::Flags value);
#endif
/** @hideinitializer

9
src/Magnum/Platform/magnum-info.cpp

@ -278,14 +278,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat
#ifndef MAGNUM_TARGET_GLES
Debug() << "Core profile:" << (c.isCoreProfile() ? "yes" : "no");
#endif
Debug() << "Context flags:";
for(const auto flag: {Context::Flag::Debug,
Context::Flag::NoError,
#ifndef MAGNUM_TARGET_GLES
Context::Flag::RobustAccess
#endif
})
if(c.flags() & flag) Debug() << " " << flag;
Debug() << "Context flags:" << c.flags();
Debug() << "Supported GLSL versions:";
const std::vector<std::string> shadingLanguageVersions = c.shadingLanguageVersionStrings();

14
src/Magnum/Test/ContextTest.cpp

@ -34,10 +34,12 @@ struct ContextTest: TestSuite::Tester {
explicit ContextTest();
void debugFlag();
void debugFlags();
};
ContextTest::ContextTest() {
addTests({&ContextTest::debugFlag});
addTests({&ContextTest::debugFlag,
&ContextTest::debugFlags});
}
void ContextTest::debugFlag() {
@ -50,6 +52,16 @@ void ContextTest::debugFlag() {
#endif
}
void ContextTest::debugFlags() {
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_SKIP("No context flags on Emscripten yet.");
#else
std::ostringstream out;
Debug(&out) << Context::Flags{} << (Context::Flag::Debug|Context::Flag::NoError) << (Context::Flag::Debug|Context::Flag(0xded0));
CORRADE_COMPARE(out.str(), "Context::Flags{} Context::Flag::Debug|Context::Flag::NoError Context::Flag::Debug|Context::Flag(0xded0)\n");
#endif
}
}}
CORRADE_TEST_MAIN(Magnum::Test::ContextTest)

Loading…
Cancel
Save