X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fblend.cpp;h=3327885c74c1ef34b7a5c1d111f22935a8639de0;hp=df4043e29fcfc228a557a7a5f54238d1f302f5e2;hb=94ee5852b42b05559069596e205dc2f000e6153f;hpb=e69287d99126a20326d713c9a44360f15c94d137 diff --git a/source/blend.cpp b/source/blend.cpp index df4043e2..3327885c 100644 --- a/source/blend.cpp +++ b/source/blend.cpp @@ -1,7 +1,10 @@ #include #include +#include #include "blend.h" +using namespace std; + namespace Msp { namespace GL { @@ -63,5 +66,62 @@ const Blend &Blend::additive_alpha() return blend; } +void operator>>(const LexicalConverter &conv, BlendFactor &factor) +{ + const string &str = conv.get(); + if(str=="ZERO") + factor = ZERO; + else if(str=="ONE") + factor = ONE; + else if(str=="SRC_COLOR") + factor = SRC_COLOR; + else if(str=="ONE_MINUS_SRC_COLOR") + factor = ONE_MINUS_SRC_COLOR; + else if(str=="SRC_ALPHA") + factor = SRC_ALPHA; + else if(str=="ONE_MINUS_SRC_ALPHA") + factor = ONE_MINUS_SRC_ALPHA; + else if(str=="DST_COLOR") + factor = DST_COLOR; + else if(str=="ONE_MINUS_DST_COLOR") + factor = ONE_MINUS_DST_COLOR; + else if(str=="DST_ALPHA") + factor = DST_ALPHA; + else if(str=="ONE_MINUS_DST_ALPHA") + factor = ONE_MINUS_DST_ALPHA; + else if(str=="CONSTANT_COLOR") + factor = CONSTANT_COLOR; + else if(str=="ONE_MINUS_CONSTANT_COLOR") + factor = ONE_MINUS_CONSTANT_COLOR; + else if(str=="CONSTANT_ALPHA") + factor = CONSTANT_ALPHA; + else if(str=="ONE_MINUS_CONSTANT_ALPHA") + factor = ONE_MINUS_CONSTANT_ALPHA; + else + throw lexical_error(format("conversion of '%s' to BlendFactor", str)); +} + +void operator<<(LexicalConverter &conv, BlendFactor factor) +{ + switch(factor) + { + case ZERO: conv.result("ZERO"); break; + case ONE: conv.result("ONE"); break; + case SRC_COLOR: conv.result("SRC_COLOR"); break; + case ONE_MINUS_SRC_COLOR: conv.result("ONE_MINUS_SRC_COLOR"); break; + case SRC_ALPHA: conv.result("SRC_ALPHA"); break; + case ONE_MINUS_SRC_ALPHA: conv.result("ONE_MINUS_SRC_ALPHA"); break; + case DST_COLOR: conv.result("DST_COLOR"); break; + case ONE_MINUS_DST_COLOR: conv.result("ONE_MINUS_DST_COLOR"); break; + case DST_ALPHA: conv.result("DST_ALPHA"); break; + case ONE_MINUS_DST_ALPHA: conv.result("ONE_MINUS_DST_ALPHA"); break; + case CONSTANT_COLOR: conv.result("CONSTANT_COLOR"); break; + case ONE_MINUS_CONSTANT_COLOR: conv.result("ONE_MINUS_CONSTANT_COLOR"); break; + case CONSTANT_ALPHA: conv.result("CONSTANT_ALPHA"); break; + case ONE_MINUS_CONSTANT_ALPHA: conv.result("ONE_MINUS_CONSTANT_ALPHA"); break; + default: conv.result(format("BlendFactor(%#x)", static_cast(factor))); + } +} + } // namespace GL } // namespace Msp