Map renderer blend tokens to OpenGL
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -34,6 +34,11 @@ struct OpenGlTextureParameter {
|
||||
std::uint32_t value = 0;
|
||||
};
|
||||
|
||||
struct OpenGlEnumMapping {
|
||||
std::uint32_t value = 0;
|
||||
bool supported = false;
|
||||
};
|
||||
|
||||
struct OpenGlReadbackFormat {
|
||||
std::uint32_t pixel_format = 0;
|
||||
std::uint32_t component_type = 0;
|
||||
@@ -137,6 +142,10 @@ struct OpenGlWindowsWglContextConfig {
|
||||
[[nodiscard]] std::uint32_t one_minus_source_alpha_blend_factor() noexcept;
|
||||
[[nodiscard]] std::uint32_t add_blend_equation() noexcept;
|
||||
[[nodiscard]] std::uint32_t max_blend_equation() noexcept;
|
||||
[[nodiscard]] OpenGlEnumMapping blend_factor_for_renderer_factor(
|
||||
pp::renderer::BlendFactor factor) noexcept;
|
||||
[[nodiscard]] OpenGlEnumMapping blend_equation_for_renderer_op(
|
||||
pp::renderer::BlendOp op) noexcept;
|
||||
[[nodiscard]] std::uint32_t rgba8_internal_format() noexcept;
|
||||
[[nodiscard]] std::uint32_t rgba16f_internal_format() noexcept;
|
||||
[[nodiscard]] std::uint32_t rgba32f_internal_format() noexcept;
|
||||
|
||||
Reference in New Issue
Block a user