Ich verstehe die Hauptunterschiede zwischen texelFetch
und texture
, habe aber einige Fragen zu den Details:
- Handelt es sich
texelFetch
um eine Leistungsstrafe? Wie ohne Cache oder so? - Sind
texelFetch
undtexture
austauschbar bei der VerwendungGL_NEAREST
?
opengl
textures
performance
Martin Perry
quelle
quelle
Antworten:
texelFetch
ist ganz anders alstexture
.texture
ist Ihre übliche Texturzugriffsfunktion, die das Filtern und normalisierte ([0,1]
) Texturkoordinaten handhabt .texelFetch
greift direkt auf ein Texel in der Textur zu (keine Filterung), indem nicht normalisierte Koordinaten verwendet werden (z. B.(64,64)
im mittleren Texel in einer 128x128-Textur gegenüber(.5,.5)
in normalisierten Koordinaten).quelle
texture
oder die Hardware muss keine Filterung durchführen und müssen sie verwenden)texelFetch
).texelFetch
schneller ist und die Filterung nach nächsten Nachbarn ausreicht, können Sie den Kontext nicht auf NN-Filterung umstellen. Es wäre vernünftig, ihn vorzuziehentexture
.texelFetch
undtexture
auf grundsätzliche Weise anders arbeiten. Siehe auch die Eingaben: Texturkoordinaten vs. normalisierte Koordinaten. Sie dienen unterschiedlichen Zwecken. Das eine ist nicht nur eine Optimierung des anderen.Da es keine akzeptierte Antwort gibt, füge ich einige Informationen hinzu und wollte nur Dinge hinzufügen, die Sean noch nicht in seiner Antwort erwähnt hat.
TexelFetch behandelt die Textur als Bild, sodass Sie genau auf den Inhalt der Pixel zugreifen können. Normalerweise tun Sie dies, wenn Sie genau diesen Inhalt benötigen, was in wenigen, aber nützlichen Fällen der Fall ist:
Tex2D behandelt die Textur als Textur. Sie möchten nicht den genauen Inhalt eines Pixels, aber Sie möchten das realistischste Ergebnis. Ein standardmäßiges Texturlesen ist eine sehr komplexe Operation, bei der interpolierte Daten von einer oder mehreren Mipmap-Ebenen gelesen und anschließend erneut interpoliert werden. All diese teuren Operationen sollen visuelle Artefakte vermeiden.
GL_NEAREST funktioniert nicht gleich, da Sie auf den entferntesten Polygonen Daten auf der kleineren Mipmap-Ebene lesen, die nicht genau den Daten entsprechen, die Sie von einem Texelabruf gelesen haben.
In einem Fall funktioniert Tex2D (fast) genauso wie TexelFetch:
quelle