X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fblend.h;h=874230c682c9ccf82e21c88a644f1dc61aa6034d;hb=ea689bc784d3cda28c2b1b558a294fe52236f7dd;hp=e04aef49c2474cc7be4c49382044518331a6c9a2;hpb=160e9eea29bd10034733d59507fa1bcca36be401;p=libs%2Fgl.git diff --git a/source/core/blend.h b/source/core/blend.h index e04aef49..874230c6 100644 --- a/source/core/blend.h +++ b/source/core/blend.h @@ -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(static_cast(m1)|static_cast(m2)); }