Move sampler parameter mapping to renderer gl
This commit is contained in:
@@ -43,6 +43,7 @@ constexpr std::uint32_t gl_texture_mag_filter = 0x2800U;
|
||||
constexpr std::uint32_t gl_texture_min_filter = 0x2801U;
|
||||
constexpr std::uint32_t gl_texture_wrap_s = 0x2802U;
|
||||
constexpr std::uint32_t gl_texture_wrap_t = 0x2803U;
|
||||
constexpr std::uint32_t gl_texture_wrap_r = 0x8072U;
|
||||
constexpr std::uint32_t gl_clamp_to_edge = 0x812FU;
|
||||
|
||||
[[nodiscard]] bool contains(std::string_view text, std::string_view needle) noexcept
|
||||
@@ -213,4 +214,27 @@ std::span<const OpenGlTextureParameter> default_render_target_texture_parameters
|
||||
return parameters;
|
||||
}
|
||||
|
||||
std::array<OpenGlTextureParameter, 5> sampler_parameters_for_filter_wrap(
|
||||
std::uint32_t filter,
|
||||
std::uint32_t wrap) noexcept
|
||||
{
|
||||
return {
|
||||
OpenGlTextureParameter { .name = gl_texture_wrap_s, .value = wrap },
|
||||
OpenGlTextureParameter { .name = gl_texture_wrap_t, .value = wrap },
|
||||
OpenGlTextureParameter { .name = gl_texture_wrap_r, .value = wrap },
|
||||
OpenGlTextureParameter { .name = gl_texture_min_filter, .value = filter },
|
||||
OpenGlTextureParameter { .name = gl_texture_mag_filter, .value = filter },
|
||||
};
|
||||
}
|
||||
|
||||
std::array<OpenGlTextureParameter, 2> sampler_filter_parameters(
|
||||
std::uint32_t filter_min,
|
||||
std::uint32_t filter_mag) noexcept
|
||||
{
|
||||
return {
|
||||
OpenGlTextureParameter { .name = gl_texture_min_filter, .value = filter_min },
|
||||
OpenGlTextureParameter { .name = gl_texture_mag_filter, .value = filter_mag },
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <span>
|
||||
#include <string_view>
|
||||
@@ -44,5 +45,11 @@ struct OpenGlTextureParameter {
|
||||
[[nodiscard]] std::span<const std::uint32_t> panopainter_cube_face_texture_targets() noexcept;
|
||||
[[nodiscard]] std::uint32_t cube_face_texture_target(std::uint32_t face_index) noexcept;
|
||||
[[nodiscard]] std::span<const OpenGlTextureParameter> default_render_target_texture_parameters() noexcept;
|
||||
[[nodiscard]] std::array<OpenGlTextureParameter, 5> sampler_parameters_for_filter_wrap(
|
||||
std::uint32_t filter,
|
||||
std::uint32_t wrap) noexcept;
|
||||
[[nodiscard]] std::array<OpenGlTextureParameter, 2> sampler_filter_parameters(
|
||||
std::uint32_t filter_min,
|
||||
std::uint32_t filter_mag) noexcept;
|
||||
|
||||
}
|
||||
|
||||
@@ -304,11 +304,12 @@ void Sampler::set(GLint filter /*= GL_LINEAR*/, GLint wrap /*= GL_CLAMP_TO_EDGE*
|
||||
App::I->render_task([=]
|
||||
{
|
||||
#if USE_SAMPLER
|
||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, wrap);
|
||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, wrap);
|
||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_R, wrap);
|
||||
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, filter);
|
||||
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, filter);
|
||||
for (const auto parameter : pp::renderer::gl::sampler_parameters_for_filter_wrap(
|
||||
static_cast<std::uint32_t>(filter),
|
||||
static_cast<std::uint32_t>(wrap)))
|
||||
{
|
||||
glSamplerParameteri(id, static_cast<GLenum>(parameter.name), static_cast<GLint>(parameter.value));
|
||||
}
|
||||
#endif // USE_SAMPLER
|
||||
});
|
||||
}
|
||||
@@ -317,8 +318,12 @@ void Sampler::set_filter(GLint filter_min, GLint filter_mag)
|
||||
App::I->render_task([=]
|
||||
{
|
||||
#if USE_SAMPLER
|
||||
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, filter_min);
|
||||
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, filter_mag);
|
||||
for (const auto parameter : pp::renderer::gl::sampler_filter_parameters(
|
||||
static_cast<std::uint32_t>(filter_min),
|
||||
static_cast<std::uint32_t>(filter_mag)))
|
||||
{
|
||||
glSamplerParameteri(id, static_cast<GLenum>(parameter.name), static_cast<GLint>(parameter.value));
|
||||
}
|
||||
#endif // USE_SAMPLER
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user