72 {
73 if (
texture.NeedsMipmapGeneration()) {
75 << "Texture mip count is > 1, but the mipmap has not been generated. "
76 "Texture can not be sampled safely.";
77 return false;
78 }
79
81
83 return false;
84 }
86
87 GLint mag_filter =
ToParam(desc.mag_filter);
88
89
90 GLint min_filter;
91 if (
texture.GetTextureDescriptor().mip_count > 1) {
92 min_filter =
ToParam(desc.min_filter, desc.mip_filter);
93 } else {
94 min_filter =
ToParam(desc.min_filter);
95 }
96
97 gl.TexParameteri(*
target, GL_TEXTURE_MIN_FILTER, min_filter);
98 gl.TexParameteri(*
target, GL_TEXTURE_MAG_FILTER, mag_filter);
99
100 const auto supports_decal_mode =
101 gl.GetCapabilities()->SupportsDecalSamplerAddressMode();
102
103 const auto wrap_s =
105 const auto wrap_t =
106 ToAddressMode(desc.height_address_mode, supports_decal_mode);
107
108 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_S, wrap_s);
109 gl.TexParameteri(*
target, GL_TEXTURE_WRAP_T, wrap_t);
110
113
114 const GLfloat border_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
116 }
117
118 return true;
119}
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