76 if (!target.has_value()) {
81 GLint mag_filter =
ToParam(desc.mag_filter);
85 if (texture.GetTextureDescriptor().mip_count > 1) {
86 min_filter =
ToParam(desc.min_filter, desc.mip_filter);
88 min_filter =
ToParam(desc.min_filter);
91 gl.TexParameteri(*target, GL_TEXTURE_MIN_FILTER, min_filter);
92 gl.TexParameteri(*target, GL_TEXTURE_MAG_FILTER, mag_filter);
101 if (*target != GL_TEXTURE_EXTERNAL_OES &&
102 gl.GetCapabilities()->SupportsTextureMaxLevel()) {
103 const GLint max_level =
104 static_cast<GLint
>(texture.GetTextureDescriptor().mip_count) - 1;
105 gl.TexParameteri(*target, GL_TEXTURE_MAX_LEVEL, max_level);
108 const auto supports_decal_mode =
109 gl.GetCapabilities()->SupportsDecalSamplerAddressMode();
114 ToAddressMode(desc.height_address_mode, supports_decal_mode);
116 gl.TexParameteri(*target, GL_TEXTURE_WRAP_S, wrap_s);
117 gl.TexParameteri(*target, GL_TEXTURE_WRAP_T, wrap_t);
122 const GLfloat border_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
131 const uint32_t max_anisotropy =
132 gl.GetCapabilities()->GetMaxSamplerAnisotropy();
133 if (max_anisotropy > 1) {
134 const GLfloat anisotropy[1] = {
static_cast<GLfloat
>(
135 std::clamp<uint32_t>(desc.max_anisotropy, 1u, max_anisotropy))};
const SamplerDescriptor & GetDescriptor() const
static GLint ToAddressMode(SamplerAddressMode mode, bool supports_decal_sampler_address_mode)
static GLint ToParam(MinMagFilter minmag_filter)
constexpr std::optional< GLenum > ToTextureTarget(TextureType type)
#define IMPELLER_GL_TEXTURE_BORDER_COLOR
#define IMPELLER_GL_CLAMP_TO_BORDER
#define IMPELLER_GL_TEXTURE_MAX_ANISOTROPY