Commit de2935dd by Alexey Knyazev Committed by Commit Bot

Add PackedEnums for blend state parameters

Bug: angleproject:4394, angleproject:2169 Change-Id: I6c218af3871a1215c2b103847250bbc782159cb3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2149645Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 4d10efbc
......@@ -254,6 +254,102 @@ std::ostream &operator<<(std::ostream &os, DrawElementsType value)
return os;
}
std::ostream &operator<<(std::ostream &os, BlendEquationType value)
{
switch (value)
{
case BlendEquationType::Add:
os << "GL_FUNC_ADD";
break;
case BlendEquationType::Min:
os << "GL_MIN";
break;
case BlendEquationType::Max:
os << "GL_MAX";
break;
case BlendEquationType::Subtract:
os << "GL_FUNC_SUBTRACT";
break;
case BlendEquationType::ReverseSubtract:
os << "GL_FUNC_REVERSE_SUBTRACT";
break;
default:
os << "GL_INVALID_ENUM";
break;
}
return os;
}
std::ostream &operator<<(std::ostream &os, BlendFactorType value)
{
switch (value)
{
case BlendFactorType::Zero:
os << "GL_ZERO";
break;
case BlendFactorType::One:
os << "GL_ONE";
break;
case BlendFactorType::SrcColor:
os << "GL_SRC_COLOR";
break;
case BlendFactorType::OneMinusSrcColor:
os << "GL_ONE_MINUS_SRC_COLOR";
break;
case BlendFactorType::SrcAlpha:
os << "GL_SRC_ALPHA";
break;
case BlendFactorType::OneMinusSrcAlpha:
os << "GL_ONE_MINUS_SRC_ALPHA";
break;
case BlendFactorType::DstAlpha:
os << "GL_DST_ALPHA";
break;
case BlendFactorType::OneMinusDstAlpha:
os << "GL_ONE_MINUS_DST_ALPHA";
break;
case BlendFactorType::DstColor:
os << "GL_DST_COLOR";
break;
case BlendFactorType::OneMinusDstColor:
os << "GL_ONE_MINUS_DST_COLOR";
break;
case BlendFactorType::SrcAlphaSaturate:
os << "GL_SRC_ALPHA_SATURATE";
break;
case BlendFactorType::ConstantColor:
os << "GL_CONSTANT_COLOR";
break;
case BlendFactorType::OneMinusConstantColor:
os << "GL_ONE_MINUS_CONSTANT_COLOR";
break;
case BlendFactorType::ConstantAlpha:
os << "GL_CONSTANT_ALPHA";
break;
case BlendFactorType::OneMinusConstantAlpha:
os << "GL_ONE_MINUS_CONSTANT_ALPHA";
break;
case BlendFactorType::Src1Alpha:
os << "GL_SRC1_ALPHA_EXT";
break;
case BlendFactorType::Src1Color:
os << "GL_SRC1_COLOR_EXT";
break;
case BlendFactorType::OneMinusSrc1Color:
os << "GL_ONE_MINUS_SRC1_COLOR_EXT";
break;
case BlendFactorType::OneMinusSrc1Alpha:
os << "GL_ONE_MINUS_SRC1_ALPHA_EXT";
break;
default:
os << "GL_INVALID_ENUM";
break;
}
return os;
}
std::ostream &operator<<(std::ostream &os, VertexAttribType value)
{
switch (value)
......
......@@ -323,6 +323,129 @@ ANGLE_VALIDATE_PACKED_ENUM(DrawElementsType, UnsignedInt, GL_UNSIGNED_INT);
std::ostream &operator<<(std::ostream &os, DrawElementsType value);
enum class BlendEquationType
{
Add = 0, // GLenum == 0x8006
Min = 1, // GLenum == 0x8007
Max = 2, // GLenum == 0x8008
Unused = 3,
Subtract = 4, // GLenum == 0x800A
ReverseSubtract = 5, // GLenum == 0x800B
InvalidEnum = 6,
EnumCount = 6
};
template <>
constexpr BlendEquationType FromGLenum<BlendEquationType>(GLenum from)
{
const GLenum scaled = (from - GL_FUNC_ADD);
return (scaled == static_cast<GLenum>(BlendEquationType::Unused) ||
scaled >= static_cast<GLenum>(BlendEquationType::EnumCount))
? BlendEquationType::InvalidEnum
: static_cast<BlendEquationType>(scaled);
}
constexpr GLenum ToGLenum(BlendEquationType from)
{
return static_cast<GLenum>(from) + GL_FUNC_ADD;
}
ANGLE_VALIDATE_PACKED_ENUM(BlendEquationType, Add, GL_FUNC_ADD);
ANGLE_VALIDATE_PACKED_ENUM(BlendEquationType, Min, GL_MIN);
ANGLE_VALIDATE_PACKED_ENUM(BlendEquationType, Max, GL_MAX);
ANGLE_VALIDATE_PACKED_ENUM(BlendEquationType, Subtract, GL_FUNC_SUBTRACT);
ANGLE_VALIDATE_PACKED_ENUM(BlendEquationType, ReverseSubtract, GL_FUNC_REVERSE_SUBTRACT);
std::ostream &operator<<(std::ostream &os, BlendEquationType value);
enum class BlendFactorType
{
Zero = 0, // GLenum == 0
One = 1, // GLenum == 1
MinSrcDstType = 2,
SrcColor = 2, // GLenum == 0x0300
OneMinusSrcColor = 3, // GLenum == 0x0301
SrcAlpha = 4, // GLenum == 0x0302
OneMinusSrcAlpha = 5, // GLenum == 0x0303
DstAlpha = 6, // GLenum == 0x0304
OneMinusDstAlpha = 7, // GLenum == 0x0305
DstColor = 8, // GLenum == 0x0306
OneMinusDstColor = 9, // GLenum == 0x0307
SrcAlphaSaturate = 10, // GLenum == 0x0308
MaxSrcDstType = 10,
MinConstantType = 11,
ConstantColor = 11, // GLenum == 0x8001
OneMinusConstantColor = 12, // GLenum == 0x8002
ConstantAlpha = 13, // GLenum == 0x8003
OneMinusConstantAlpha = 14, // GLenum == 0x8004
MaxConstantType = 14,
// GL_EXT_blend_func_extended
Src1Alpha = 15, // GLenum == 0x8589
Src1Color = 16, // GLenum == 0x88F9
OneMinusSrc1Color = 17, // GLenum == 0x88FA
OneMinusSrc1Alpha = 18, // GLenum == 0x88FB
InvalidEnum = 19,
EnumCount = 19
};
template <>
constexpr BlendFactorType FromGLenum<BlendFactorType>(GLenum from)
{
if (from <= 1)
return static_cast<BlendFactorType>(from);
if (from >= GL_SRC_COLOR && from <= GL_SRC_ALPHA_SATURATE)
return static_cast<BlendFactorType>(from - GL_SRC_COLOR + 2);
if (from >= GL_CONSTANT_COLOR && from <= GL_ONE_MINUS_CONSTANT_ALPHA)
return static_cast<BlendFactorType>(from - GL_CONSTANT_COLOR + 11);
if (from == GL_SRC1_ALPHA_EXT)
return BlendFactorType::Src1Alpha;
if (from >= GL_SRC1_COLOR_EXT && from <= GL_ONE_MINUS_SRC1_ALPHA_EXT)
return static_cast<BlendFactorType>(from - GL_SRC1_COLOR_EXT + 16);
return BlendFactorType::InvalidEnum;
}
constexpr GLenum ToGLenum(BlendFactorType from)
{
const GLenum value = static_cast<GLenum>(from);
if (value <= 1)
return value;
if (from >= BlendFactorType::MinSrcDstType && from <= BlendFactorType::MaxSrcDstType)
return value - 2 + GL_SRC_COLOR;
if (from >= BlendFactorType::MinConstantType && from <= BlendFactorType::MaxConstantType)
return value - 11 + GL_CONSTANT_COLOR;
if (from == BlendFactorType::Src1Alpha)
return GL_SRC1_ALPHA_EXT;
return value - 16 + GL_SRC1_COLOR_EXT;
}
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, Zero, GL_ZERO);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, One, GL_ONE);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, SrcColor, GL_SRC_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusSrcColor, GL_ONE_MINUS_SRC_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, SrcAlpha, GL_SRC_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusSrcAlpha, GL_ONE_MINUS_SRC_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, DstAlpha, GL_DST_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusDstAlpha, GL_ONE_MINUS_DST_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, DstColor, GL_DST_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusDstColor, GL_ONE_MINUS_DST_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, SrcAlphaSaturate, GL_SRC_ALPHA_SATURATE);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, ConstantColor, GL_CONSTANT_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusConstantColor, GL_ONE_MINUS_CONSTANT_COLOR);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, ConstantAlpha, GL_CONSTANT_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusConstantAlpha, GL_ONE_MINUS_CONSTANT_ALPHA);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, Src1Alpha, GL_SRC1_ALPHA_EXT);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, Src1Color, GL_SRC1_COLOR_EXT);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusSrc1Color, GL_ONE_MINUS_SRC1_COLOR_EXT);
ANGLE_VALIDATE_PACKED_ENUM(BlendFactorType, OneMinusSrc1Alpha, GL_ONE_MINUS_SRC1_ALPHA_EXT);
std::ostream &operator<<(std::ostream &os, BlendFactorType value);
enum class VertexAttribType
{
Byte = 0, // GLenum == 0x1400
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment