71 {
73
75 return false;
76 }
78
79 GLint mag_filter =
ToParam(desc.mag_filter);
80
81
82 GLint min_filter;
83 if (
texture.GetTextureDescriptor().mip_count > 1) {
84 min_filter =
ToParam(desc.min_filter, desc.mip_filter);
85 } else {
86 min_filter =
ToParam(desc.min_filter);
87 }
88
89 gl.TexParameteri(*
target, GL_TEXTURE_MIN_FILTER, min_filter);
90 gl.TexParameteri(*
target, GL_TEXTURE_MAG_FILTER, mag_filter);
91
92
93
94
95
96
97
98
99 if (*
target != GL_TEXTURE_EXTERNAL_OES &&
100 gl.GetCapabilities()->SupportsTextureMaxLevel()) {
101 const GLint max_level =
102 static_cast<GLint
>(
texture.GetTextureDescriptor().mip_count) - 1;
103 gl.TexParameteri(*
target, GL_TEXTURE_MAX_LEVEL, max_level);
104 }
105
106 const auto supports_decal_mode =
107 gl.GetCapabilities()->SupportsDecalSamplerAddressMode();
108
109 const auto wrap_s =
111 const auto wrap_t =
112 ToAddressMode(desc.height_address_mode, supports_decal_mode);
113
114 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_S, wrap_s);
115 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_T, wrap_t);
116
119
120 const GLfloat border_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
122 }
123
124 return true;
125}
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