Ich bin mit Metall auf iOS mit den folgenden Fragment-Shader:Metall: lineare Texturfilterung funktioniert nicht erwartet, da
constexpr sampler s(coord::normalized,
address::clamp_to_zero,
filter::linear);
fragment half4 passThroughFragment(VertexInOut inFrag [[stage_in]],
texture2d<float> tex [[ texture(0) ]])
{
return half4(tex.sample(s, inFrag.uv));
}
Meine Textur ist ein 4x4-Bild. Trotz des Filtersatzes linear, erhalte ich folgendes Bild, mit nächsten Nachbarn Filterung:
Es scheint, dass mein uv ist in Ordnung ist, da, wenn ich die Fragment-Shader wie folgt ändern:
return half4(0, inFrag.uv.x, inFrag.uv.y, 1);
ich das erwartete Bild:
Gibt es noch etwas, was ich tun muss, damit die lineare Filterung anders funktioniert als filter::linear
?
Wenn Ihnen das nicht bekannt ist, können Sie die Tabelle [Metal Pixel Format Capabilities] von Apple (https://developer.apple.com/metal/capabilities/) einsehen. In der Zeile für das Format, mit dem Sie arbeiten, suchen Sie in der Spalte für Ihr Feature-Set (das nach Betriebssystem und Version gruppiert ist) nach "Filter" oder "Alle". –