]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/blend.h
Make various enums use uint8_t as their underlying type
[libs/gl.git] / source / core / blend.h
index ad7ba241bd1b1028e7e1bea45b5477f6b66245f6..50ea13bd28a897bd6bc3fa491baffaeb66cb8ab4 100644 (file)
@@ -8,7 +8,7 @@
 namespace Msp {
 namespace GL {
 
-enum BlendEquation
+enum BlendEquation: std::uint8_t
 {
        ADD,
        SUBTRACT,
@@ -17,7 +17,7 @@ enum BlendEquation
        MAX
 };
 
-enum BlendFactor
+enum BlendFactor: std::uint8_t
 {
        ZERO,
        ONE,
@@ -35,8 +35,18 @@ enum BlendFactor
        ONE_MINUS_CONSTANT_ALPHA
 };
 
+enum ColorWriteMask: std::uint8_t
+{
+       WRITE_NONE = 0,
+       WRITE_RED = 1,
+       WRITE_GREEN = 2,
+       WRITE_BLUE = 4,
+       WRITE_ALPHA = 8,
+       WRITE_ALL = 15
+};
+
 /**
-Blends incoming fragments with those already in the framebuffer.
+Blends incoming fragment color values with those already in the framebuffer.
 */
 struct Blend
 {
@@ -51,19 +61,21 @@ struct Blend
                void factors(BlendFactor, BlendFactor);
        };
 
-       bool enabled;
-       BlendEquation equation;
-       BlendFactor src_factor;
-       BlendFactor dst_factor;
-       Color constant;
+       bool enabled = false;
+       BlendEquation equation = ADD;
+       BlendFactor src_factor = ONE;
+       BlendFactor dst_factor = ZERO;
+       Color constant = { 0.0f, 0.0f, 0.0f, 0.0f };
+       ColorWriteMask write_mask = WRITE_ALL;
 
-       Blend();
+       Blend() = default;
        Blend(BlendFactor, BlendFactor);
        Blend(BlendEquation, BlendFactor, BlendFactor);
 };
 
-unsigned get_gl_blend_equation(BlendEquation);
-unsigned get_gl_blend_factor(BlendFactor);
+
+inline ColorWriteMask operator|(ColorWriteMask m1, ColorWriteMask m2)
+{ return static_cast<ColorWriteMask>(static_cast<int>(m1)|static_cast<int>(m2)); }
 
 void operator>>(const LexicalConverter &, BlendEquation &);
 void operator<<(LexicalConverter &, BlendEquation);
@@ -71,7 +83,12 @@ void operator<<(LexicalConverter &, BlendEquation);
 void operator>>(const LexicalConverter &, BlendFactor &);
 void operator<<(LexicalConverter &, BlendFactor);
 
+void operator>>(const LexicalConverter &, ColorWriteMask &);
+void operator<<(LexicalConverter &, ColorWriteMask);
+
 } // namespace GL
 } // namespace Msp
 
+#include "blend_backend.h"
+
 #endif