Je comprends les principales différences entre texelFetch
et texture
, mais j'ai quelques questions sur les détails:
- Cela
texelFetch
implique- t-il une pénalité de performance? Comme ne pas utiliser de cache ou autre? - Sont
texelFetch
ettexture
interchangeables lors de l'utilisationGL_NEAREST
?
opengl
textures
performance
Martin Perry
la source
la source
Réponses:
texelFetch
est assez différent detexture
.texture
est votre fonction d'accès aux textures habituelle qui gère le filtrage et[0,1]
les coordonnées de texture normalisées ( ).texelFetch
accède directement à un texel dans la texture (pas de filtrage) en utilisant des coordonnées non normalisées (par exemple,(64,64)
dans le texel moyen dans une texture 128x128 vs(.5,.5)
en coordonnées normalisées).la source
texture
vous devez donc l'utiliser, soit vous avez besoin du matériel pour ne pas filtrer et vous devez donc utilisertexelFetch
).texelFetch
c'est plus rapide et que le filtrage du plus proche voisin suffit, vous ne pouvez pas changer le contexte en filtrage NN pour une raison quelconque, il serait raisonnable de le préférertexture
.texelFetch
ettexture
travaillez différemment de manière fondamentale. Voir aussi les entrées: coordonnées de texture vs coordonnées normalisées. Ils servent à des fins différentes. L'un n'est pas seulement une optimisation de l'autre.Puisqu'il n'y a pas de réponse acceptée, j'ajoute quelques informations, je voulais juste ajouter des choses qui n'ont pas déjà été dites par Sean dans sa réponse.
TexelFetch traite la texture comme une image, vous pouvez donc accéder exactement au contenu des pixels. Vous le faites généralement lorsque vous avez besoin exactement de ce contenu, ce qui est rare mais utile:
Tex2D traite la texture comme une texture. Vous ne voulez pas le contenu exact d'un pixel, mais vous voulez le résultat le plus réaliste. Une lecture de texture standard est une opération très complexe qui implique la lecture de données interpolées à partir d'un ou plusieurs niveaux de mipmap, puis elle interpole à nouveau. Toutes ces opérations coûteuses visent à éviter les artefacts visuels.
GL_NEAREST ne fonctionnera pas de la même manière car sur les polygones les plus éloignés, vous lisez des données dans le plus petit niveau de mipmap, ce qui n'est pas exactement les mêmes données que vous liriez à partir d'une extraction de texels.
Il y a un cas où Tex2D fonctionne (presque) de la même manière que TexelFetch:
la source