]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/blend.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / core / blend.h
index e04aef49c2474cc7be4c49382044518331a6c9a2..874230c682c9ccf82e21c88a644f1dc61aa6034d 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,7 +35,7 @@ enum BlendFactor
        ONE_MINUS_CONSTANT_ALPHA
 };
 
-enum ColorWriteMask
+enum ColorWriteMask: std::uint8_t
 {
        WRITE_NONE = 0,
        WRITE_RED = 1,
@@ -46,7 +46,7 @@ enum ColorWriteMask
 };
 
 /**
-Blends incoming fragments with those already in the framebuffer.
+Blends incoming fragment color values with those already in the framebuffer.
 */
 struct Blend
 {
@@ -61,18 +61,29 @@ struct Blend
                void factors(BlendFactor, BlendFactor);
        };
 
-       bool enabled;
-       BlendEquation equation;
-       BlendFactor src_factor;
-       BlendFactor dst_factor;
-       Color constant;
-       ColorWriteMask write_mask;
+       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;
+       bool alpha_to_coverage = false;
 
-       Blend();
+       Blend() = default;
        Blend(BlendFactor, BlendFactor);
        Blend(BlendEquation, BlendFactor, BlendFactor);
+
+       bool operator==(const Blend &) const;
+       bool operator!=(const Blend &b) const { return !operator==(b); }
 };
 
+inline bool Blend::operator==(const Blend &other) const
+{
+       return enabled==other.enabled && equation==other.equation && src_factor==other.src_factor &&
+               dst_factor==other.dst_factor && constant==other.constant && write_mask==other.write_mask &&
+               alpha_to_coverage==other.alpha_to_coverage;
+}
+
 
 inline ColorWriteMask operator|(ColorWriteMask m1, ColorWriteMask m2)
 { return static_cast<ColorWriteMask>(static_cast<int>(m1)|static_cast<int>(m2)); }