#include #include #include #include #include #include #include struct GLTraitsTest : protected GLBase { template void static test_value() { using Traits = GLTraits::Value; static_assert( std::is_empty::value, "GLTraits::Value must be empty" ); #define GLTRAITS_TEST_VALUE(NAME, VALUE) \ << std::left << std::setw(35) << " " NAME ":" << VALUE << "\n" #define GLTRAITS_TEST_VALUE_DEC(NAME) \ GLTRAITS_TEST_VALUE(#NAME, std::dec << Traits::NAME) #define GLTRAITS_TEST_VALUE_BOOL(NAME) \ GLTRAITS_TEST_VALUE(#NAME, std::boolalpha << Traits::NAME) #define GLTRAITS_TEST_VALUE_HEX(NAME) \ GLTRAITS_TEST_VALUE(#NAME, str_enum_(Traits::NAME)) #define GLTRAITS_TEST_VALUE_ENUM(NAME, SUFFIX) \ GLTRAITS_TEST_VALUE( \ #NAME #SUFFIX, \ str_##NAME##_(Traits::NAME##SUFFIX) \ ) std::cout << "Value<" << Traits::name << ">" << "\n" GLTRAITS_TEST_VALUE_DEC(columns) GLTRAITS_TEST_VALUE_DEC(rows) GLTRAITS_TEST_VALUE_ENUM(glsl,) GLTRAITS_TEST_VALUE_ENUM(format,) GLTRAITS_TEST_VALUE_ENUM(type,) GLTRAITS_TEST_VALUE_ENUM(internal_format,) GLTRAITS_TEST_VALUE_ENUM(internal_format, _srgb) GLTRAITS_TEST_VALUE_ENUM(internal_format, _compressed) GLTRAITS_TEST_VALUE_ENUM(internal_format, _compressed_srgb) GLTRAITS_TEST_VALUE_BOOL(integer) GLTRAITS_TEST_VALUE_HEX(id); } template void static test_value_id() { using Traits = GLTraits::ValueID; static_assert( std::is_empty::value, "GLTraits::ValueID must be empty" ); std::cout << "ValueID<" << str_enum_(id) << ">" << "\n" << " " << GLTraits::Value::name << "\n"; } }; int main() { GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); GLTraitsTest::test_value_id(); }