Map renderer sampler tokens to OpenGL

This commit is contained in:
2026-06-02 18:28:25 +02:00
parent c5c31f0a56
commit 647dd81992
5 changed files with 77 additions and 2 deletions

View File

@@ -124,6 +124,7 @@ constexpr std::uint32_t gl_texture_wrap_t = 0x2803U;
constexpr std::uint32_t gl_texture_wrap_r = 0x8072U;
constexpr std::uint32_t gl_texture_border_color = 0x1004U;
constexpr std::uint32_t gl_repeat = 0x2901U;
constexpr std::uint32_t gl_mirrored_repeat = 0x8370U;
constexpr std::uint32_t gl_clamp_to_border = 0x812DU;
constexpr std::uint32_t gl_clamp_to_edge = 0x812FU;
constexpr std::uint32_t gl_texture0 = 0x84C0U;
@@ -820,6 +821,34 @@ std::uint32_t clamp_to_border_texture_wrap() noexcept
return gl_clamp_to_border;
}
OpenGlEnumMapping sampler_filter_for_renderer_filter(pp::renderer::SamplerFilter filter) noexcept
{
switch (filter) {
case pp::renderer::SamplerFilter::nearest:
return OpenGlEnumMapping { .value = gl_nearest, .supported = true };
case pp::renderer::SamplerFilter::linear:
return OpenGlEnumMapping { .value = gl_linear, .supported = true };
default:
return OpenGlEnumMapping {};
}
}
OpenGlEnumMapping sampler_address_mode_for_renderer_mode(pp::renderer::SamplerAddressMode mode) noexcept
{
switch (mode) {
case pp::renderer::SamplerAddressMode::clamp_to_edge:
return OpenGlEnumMapping { .value = gl_clamp_to_edge, .supported = true };
case pp::renderer::SamplerAddressMode::repeat:
return OpenGlEnumMapping { .value = gl_repeat, .supported = true };
case pp::renderer::SamplerAddressMode::mirrored_repeat:
return OpenGlEnumMapping { .value = gl_mirrored_repeat, .supported = true };
case pp::renderer::SamplerAddressMode::clamp_to_border:
return OpenGlEnumMapping { .value = gl_clamp_to_border, .supported = true };
default:
return OpenGlEnumMapping {};
}
}
std::uint32_t active_texture_unit(std::uint32_t unit_index) noexcept
{
return gl_texture0 + unit_index;

View File

@@ -159,6 +159,10 @@ struct OpenGlWindowsWglContextConfig {
[[nodiscard]] std::uint32_t repeat_texture_wrap() noexcept;
[[nodiscard]] std::uint32_t clamp_to_edge_texture_wrap() noexcept;
[[nodiscard]] std::uint32_t clamp_to_border_texture_wrap() noexcept;
[[nodiscard]] OpenGlEnumMapping sampler_filter_for_renderer_filter(
pp::renderer::SamplerFilter filter) noexcept;
[[nodiscard]] OpenGlEnumMapping sampler_address_mode_for_renderer_mode(
pp::renderer::SamplerAddressMode mode) noexcept;
[[nodiscard]] std::uint32_t active_texture_unit(std::uint32_t unit_index) noexcept;
[[nodiscard]] std::uint32_t texture_cube_map_target() noexcept;
[[nodiscard]] std::uint32_t cube_map_allocation_face_texture_target(std::uint32_t face_index) noexcept;