+ switch(factor)
+ {
+ case ZERO: return GL_ZERO;
+ case ONE: return GL_ONE;
+ case SRC_COLOR: return GL_SRC_COLOR;
+ case ONE_MINUS_SRC_COLOR: return GL_ONE_MINUS_SRC_COLOR;
+ case SRC_ALPHA: return GL_SRC_ALPHA;
+ case ONE_MINUS_SRC_ALPHA: return GL_ONE_MINUS_SRC_ALPHA;
+ case DST_COLOR: return GL_DST_COLOR;
+ case ONE_MINUS_DST_COLOR: return GL_ONE_MINUS_DST_COLOR;
+ case DST_ALPHA: return GL_DST_ALPHA;
+ case ONE_MINUS_DST_ALPHA: return GL_ONE_MINUS_DST_ALPHA;
+ case CONSTANT_COLOR: return GL_CONSTANT_COLOR;
+ case ONE_MINUS_CONSTANT_COLOR: return GL_ONE_MINUS_CONSTANT_COLOR;
+ case CONSTANT_ALPHA: return GL_CONSTANT_ALPHA;
+ case ONE_MINUS_CONSTANT_ALPHA: return GL_ONE_MINUS_CONSTANT_ALPHA;
+ default: throw invalid_argument("get_gl_blend_factor");
+ }
+}
+
+void operator>>(const LexicalConverter &conv, BlendEquation &eq)
+{
+ const string &str = conv.get();
+ if(str=="ADD")
+ eq = ADD;
+ else if(str=="SUBTRACT")
+ eq = SUBTRACT;
+ else if(str=="REVERSE_SUBTRACT")
+ eq = REVERSE_SUBTRACT;
+ else if(str=="MIN")
+ eq = MIN;
+ else if(str=="MAX")
+ eq = MAX;
+ else
+ throw lexical_error(format("conversion of '%s' to BlendEquation", str));
+}
+
+void operator<<(LexicalConverter &conv, BlendEquation eq)
+{
+ switch(eq)
+ {
+ case ADD: conv.result("ADD"); break;
+ case SUBTRACT: conv.result("SUBTRACT"); break;
+ case REVERSE_SUBTRACT: conv.result("REVERSE_SUBTRACT"); break;
+ case MIN: conv.result("MIN"); break;
+ case MAX: conv.result("MAX"); break;
+ default: conv.result(format("BlendEquation(%#x)", static_cast<int>(eq)));
+ }