Map renderer blend tokens to OpenGL

This commit is contained in:
2026-06-02 18:21:52 +02:00
parent 1065183e75
commit b6c66f3e41
5 changed files with 103 additions and 2 deletions

View File

@@ -40,8 +40,12 @@ constexpr std::uint32_t gl_debug_severity_high = 0x9146U;
constexpr std::uint32_t gl_debug_severity_medium = 0x9147U;
constexpr std::uint32_t gl_debug_severity_low = 0x9148U;
constexpr std::uint32_t gl_debug_severity_notification = 0x826BU;
constexpr std::uint32_t gl_zero = 0U;
constexpr std::uint32_t gl_one = 1U;
constexpr std::uint32_t gl_src_alpha = 0x0302U;
constexpr std::uint32_t gl_one_minus_src_alpha = 0x0303U;
constexpr std::uint32_t gl_dst_alpha = 0x0304U;
constexpr std::uint32_t gl_one_minus_dst_alpha = 0x0305U;
constexpr std::uint32_t gl_line_smooth = 0x0B20U;
constexpr std::uint32_t gl_viewport = 0x0BA2U;
constexpr std::uint32_t gl_blend = 0x0BE2U;
@@ -55,6 +59,8 @@ constexpr std::uint32_t gl_texture_binding_cube_map = 0x8514U;
constexpr std::uint32_t gl_sampler_binding = 0x8919U;
constexpr std::uint32_t gl_func_add = 0x8006U;
constexpr std::uint32_t gl_max = 0x8008U;
constexpr std::uint32_t gl_func_subtract = 0x800AU;
constexpr std::uint32_t gl_func_reverse_subtract = 0x800BU;
constexpr std::uint32_t gl_program_point_size = 0x8642U;
constexpr std::uint32_t gl_array_buffer = 0x8892U;
constexpr std::uint32_t gl_element_array_buffer = 0x8893U;
@@ -693,6 +699,40 @@ std::uint32_t max_blend_equation() noexcept
return gl_max;
}
OpenGlEnumMapping blend_factor_for_renderer_factor(pp::renderer::BlendFactor factor) noexcept
{
switch (factor) {
case pp::renderer::BlendFactor::zero:
return OpenGlEnumMapping { .value = gl_zero, .supported = true };
case pp::renderer::BlendFactor::one:
return OpenGlEnumMapping { .value = gl_one, .supported = true };
case pp::renderer::BlendFactor::source_alpha:
return OpenGlEnumMapping { .value = gl_src_alpha, .supported = true };
case pp::renderer::BlendFactor::one_minus_source_alpha:
return OpenGlEnumMapping { .value = gl_one_minus_src_alpha, .supported = true };
case pp::renderer::BlendFactor::destination_alpha:
return OpenGlEnumMapping { .value = gl_dst_alpha, .supported = true };
case pp::renderer::BlendFactor::one_minus_destination_alpha:
return OpenGlEnumMapping { .value = gl_one_minus_dst_alpha, .supported = true };
default:
return OpenGlEnumMapping {};
}
}
OpenGlEnumMapping blend_equation_for_renderer_op(pp::renderer::BlendOp op) noexcept
{
switch (op) {
case pp::renderer::BlendOp::add:
return OpenGlEnumMapping { .value = gl_func_add, .supported = true };
case pp::renderer::BlendOp::subtract:
return OpenGlEnumMapping { .value = gl_func_subtract, .supported = true };
case pp::renderer::BlendOp::reverse_subtract:
return OpenGlEnumMapping { .value = gl_func_reverse_subtract, .supported = true };
default:
return OpenGlEnumMapping {};
}
}
std::uint32_t rgba8_internal_format() noexcept
{
return gl_rgba8;