Map renderer sampler state to OpenGL
This commit is contained in:
@@ -116,6 +116,9 @@ constexpr std::uint32_t gl_texture_cube_map_negative_y = 0x8518U;
|
||||
constexpr std::uint32_t gl_texture_cube_map_positive_z = 0x8519U;
|
||||
constexpr std::uint32_t gl_texture_cube_map_negative_z = 0x851AU;
|
||||
constexpr std::uint32_t gl_linear = 0x2601U;
|
||||
constexpr std::uint32_t gl_nearest_mipmap_nearest = 0x2700U;
|
||||
constexpr std::uint32_t gl_linear_mipmap_nearest = 0x2701U;
|
||||
constexpr std::uint32_t gl_nearest_mipmap_linear = 0x2702U;
|
||||
constexpr std::uint32_t gl_linear_mipmap_linear = 0x2703U;
|
||||
constexpr std::uint32_t gl_nearest = 0x2600U;
|
||||
constexpr std::uint32_t gl_texture_mag_filter = 0x2800U;
|
||||
@@ -940,6 +943,34 @@ OpenGlEnumMapping sampler_filter_for_renderer_filter(pp::renderer::SamplerFilter
|
||||
}
|
||||
}
|
||||
|
||||
OpenGlEnumMapping sampler_min_filter_for_renderer_filters(
|
||||
pp::renderer::SamplerFilter min_filter,
|
||||
pp::renderer::SamplerFilter mip_filter) noexcept
|
||||
{
|
||||
switch (min_filter) {
|
||||
case pp::renderer::SamplerFilter::nearest:
|
||||
switch (mip_filter) {
|
||||
case pp::renderer::SamplerFilter::nearest:
|
||||
return OpenGlEnumMapping { .value = gl_nearest_mipmap_nearest, .supported = true };
|
||||
case pp::renderer::SamplerFilter::linear:
|
||||
return OpenGlEnumMapping { .value = gl_nearest_mipmap_linear, .supported = true };
|
||||
default:
|
||||
return OpenGlEnumMapping {};
|
||||
}
|
||||
case pp::renderer::SamplerFilter::linear:
|
||||
switch (mip_filter) {
|
||||
case pp::renderer::SamplerFilter::nearest:
|
||||
return OpenGlEnumMapping { .value = gl_linear_mipmap_nearest, .supported = true };
|
||||
case pp::renderer::SamplerFilter::linear:
|
||||
return OpenGlEnumMapping { .value = gl_linear_mipmap_linear, .supported = true };
|
||||
default:
|
||||
return OpenGlEnumMapping {};
|
||||
}
|
||||
default:
|
||||
return OpenGlEnumMapping {};
|
||||
}
|
||||
}
|
||||
|
||||
OpenGlEnumMapping sampler_address_mode_for_renderer_mode(pp::renderer::SamplerAddressMode mode) noexcept
|
||||
{
|
||||
switch (mode) {
|
||||
@@ -956,6 +987,28 @@ OpenGlEnumMapping sampler_address_mode_for_renderer_mode(pp::renderer::SamplerAd
|
||||
}
|
||||
}
|
||||
|
||||
OpenGlSamplerState sampler_state_for_renderer_sampler_desc(pp::renderer::SamplerDesc desc) noexcept
|
||||
{
|
||||
const auto min_filter = sampler_min_filter_for_renderer_filters(desc.min_filter, desc.mip_filter);
|
||||
const auto mag_filter = sampler_filter_for_renderer_filter(desc.mag_filter);
|
||||
const auto address_u = sampler_address_mode_for_renderer_mode(desc.address_u);
|
||||
const auto address_v = sampler_address_mode_for_renderer_mode(desc.address_v);
|
||||
const auto address_w = sampler_address_mode_for_renderer_mode(desc.address_w);
|
||||
|
||||
return OpenGlSamplerState {
|
||||
.min_filter = min_filter.value,
|
||||
.mag_filter = mag_filter.value,
|
||||
.wrap_s = address_u.value,
|
||||
.wrap_t = address_v.value,
|
||||
.wrap_r = address_w.value,
|
||||
.supported = min_filter.supported
|
||||
&& mag_filter.supported
|
||||
&& address_u.supported
|
||||
&& address_v.supported
|
||||
&& address_w.supported,
|
||||
};
|
||||
}
|
||||
|
||||
std::uint32_t active_texture_unit(std::uint32_t unit_index) noexcept
|
||||
{
|
||||
return gl_texture0 + unit_index;
|
||||
|
||||
Reference in New Issue
Block a user