From 791336736576f0f24c757915aace424fea4dac38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 26 Mar 2018 16:57:59 +0200 Subject: [PATCH] Trade: debug output for PhongMaterialData::Flag[s]. --- doc/changelog.dox | 5 +++++ src/Magnum/Trade/PhongMaterialData.cpp | 21 +++++++++++++++++++++ src/Magnum/Trade/PhongMaterialData.h | 6 ++++++ src/Magnum/Trade/Test/MaterialDataTest.cpp | 20 +++++++++++++++++++- 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index ac704328b..a15a7c498 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -73,6 +73,11 @@ See also: @ref Primitives::grid3DSolid() and @ref Primitives::grid3DWireframe() primitives +@subsubsection changelog-latest-new-trade Trade library + +- Debug output operator for @ref Trade::PhongMaterialData::Flag and + @ref Trade::PhongMaterialData::Flags + @subsection changelog-latest-buildsystem Build system - All plugin interfaces now implement diff --git a/src/Magnum/Trade/PhongMaterialData.cpp b/src/Magnum/Trade/PhongMaterialData.cpp index f39677029..f2679b8c7 100644 --- a/src/Magnum/Trade/PhongMaterialData.cpp +++ b/src/Magnum/Trade/PhongMaterialData.cpp @@ -25,6 +25,8 @@ #include "PhongMaterialData.h" +#include + namespace Magnum { namespace Trade { PhongMaterialData::PhongMaterialData(PhongMaterialData&& other) noexcept: AbstractMaterialData{std::move(other)}, _flags{other._flags}, _shininess{other._shininess} { @@ -98,4 +100,23 @@ UnsignedInt& PhongMaterialData::specularTexture() { return _specular.texture; } +Debug& operator<<(Debug& debug, const PhongMaterialData::Flag value) { + switch(value) { + #define _c(v) case PhongMaterialData::Flag::v: return debug << "Trade::PhongMaterialData::Flag::" #v; + _c(AmbientTexture) + _c(DiffuseTexture) + _c(SpecularTexture) + #undef _c + } + + return debug << "Trade::PhongMaterialData::Flag(" << Debug::nospace << reinterpret_cast(UnsignedByte(value)) << Debug::nospace << ")"; +} + +Debug& operator<<(Debug& debug, const PhongMaterialData::Flags value) { + return Containers::enumSetDebugOutput(debug, value, "Trade::PhongMaterialData::Flags{}", { + PhongMaterialData::Flag::AmbientTexture, + PhongMaterialData::Flag::DiffuseTexture, + PhongMaterialData::Flag::SpecularTexture}); +} + }} diff --git a/src/Magnum/Trade/PhongMaterialData.h b/src/Magnum/Trade/PhongMaterialData.h index 799d89e17..a1e3558f6 100644 --- a/src/Magnum/Trade/PhongMaterialData.h +++ b/src/Magnum/Trade/PhongMaterialData.h @@ -164,6 +164,12 @@ class MAGNUM_EXPORT PhongMaterialData: public AbstractMaterialData { CORRADE_ENUMSET_OPERATORS(PhongMaterialData::Flags) +/** @debugoperatorclassenum{PhongMaterialData::Flag} */ +MAGNUM_EXPORT Debug& operator<<(Debug& debug, PhongMaterialData::Flag value); + +/** @debugoperatorclassenum{PhongMaterialData::Flags} */ +MAGNUM_EXPORT Debug& operator<<(Debug& debug, PhongMaterialData::Flags value); + /* Ugly as hell. */ inline Color3 PhongMaterialData::ambientColor() const { diff --git a/src/Magnum/Trade/Test/MaterialDataTest.cpp b/src/Magnum/Trade/Test/MaterialDataTest.cpp index 2af3631bc..ed71bd005 100644 --- a/src/Magnum/Trade/Test/MaterialDataTest.cpp +++ b/src/Magnum/Trade/Test/MaterialDataTest.cpp @@ -44,6 +44,8 @@ class MaterialDataTest: public TestSuite::Tester { void constructMovePhongNoSpecularTexture(); void debugType(); + void debugPhongFlag(); + void debugPhongFlags(); }; MaterialDataTest::MaterialDataTest() { @@ -56,7 +58,9 @@ MaterialDataTest::MaterialDataTest() { &MaterialDataTest::constructMovePhongNoDiffuseTexture, &MaterialDataTest::constructMovePhongNoSpecularTexture, - &MaterialDataTest::debugType}); + &MaterialDataTest::debugType, + &MaterialDataTest::debugPhongFlag, + &MaterialDataTest::debugPhongFlags}); } void MaterialDataTest::constructPhong() { @@ -238,6 +242,20 @@ void MaterialDataTest::debugType() { CORRADE_COMPARE(out.str(), "Trade::MaterialType::Phong Trade::MaterialType(0xbe)\n"); } +void MaterialDataTest::debugPhongFlag() { + std::ostringstream out; + + Debug{&out} << PhongMaterialData::Flag::AmbientTexture << PhongMaterialData::Flag(0xf0); + CORRADE_COMPARE(out.str(), "Trade::PhongMaterialData::Flag::AmbientTexture Trade::PhongMaterialData::Flag(0xf0)\n"); +} + +void MaterialDataTest::debugPhongFlags() { + std::ostringstream out; + + Debug{&out} << (PhongMaterialData::Flag::DiffuseTexture|PhongMaterialData::Flag::SpecularTexture) << PhongMaterialData::Flags{}; + CORRADE_COMPARE(out.str(), "Trade::PhongMaterialData::Flag::DiffuseTexture|Trade::PhongMaterialData::Flag::SpecularTexture Trade::PhongMaterialData::Flags{}\n"); +} + }}} CORRADE_TEST_MAIN(Magnum::Trade::Test::MaterialDataTest)