73 {
75
77 return false;
78 }
80
81 GLint mag_filter =
ToParam(desc.mag_filter);
82
83
84 GLint min_filter;
85 if (
texture.GetTextureDescriptor().mip_count > 1) {
86 min_filter =
ToParam(desc.min_filter, desc.mip_filter);
87 } else {
88 min_filter =
ToParam(desc.min_filter);
89 }
90
91 gl.TexParameteri(*
target, GL_TEXTURE_MIN_FILTER, min_filter);
92 gl.TexParameteri(*
target, GL_TEXTURE_MAG_FILTER, mag_filter);
93
94
95
96
97
98
99
100
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);
106 }
107
108 const auto supports_decal_mode =
109 gl.GetCapabilities()->SupportsDecalSamplerAddressMode();
110
111 const auto wrap_s =
113 const auto wrap_t =
114 ToAddressMode(desc.height_address_mode, supports_decal_mode);
115
116 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_S, wrap_s);
117 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_T, wrap_t);
118
121
122 const GLfloat border_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
124 }
125
126
127
128
129
130
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))};
137 }
138
139 return true;
140}
const SamplerDescriptor & GetDescriptor() const
constexpr std::optional< GLenum > ToTextureTarget(TextureType type)
static GLint ToAddressMode(SamplerAddressMode mode, bool supports_decal_sampler_address_mode)
static GLint ToParam(MinMagFilter minmag_filter)
#define IMPELLER_GL_TEXTURE_BORDER_COLOR
#define IMPELLER_GL_CLAMP_TO_BORDER
#define IMPELLER_GL_TEXTURE_MAX_ANISOTROPY