Entendo as principais diferenças entre texelFetch
e texture
, mas tenho algumas perguntas sobre os detalhes:
- Será que
texelFetch
envolvem uma penalidade de desempenho? Como não usar um cache ou algo assim? - São
texelFetch
etexture
intercambiáveis quando se usaGL_NEAREST
?
opengl
textures
performance
Martin Perry
fonte
fonte
Respostas:
texelFetch
é bem diferente detexture
.texture
é sua função usual de acesso à textura que lida com as[0,1]
coordenadas de filtragem e textura normalizada ( ).texelFetch
acessa diretamente um texel na textura (sem filtragem) usando coordenadas não normalizadas (por exemplo,(64,64)
no texel ish médio em uma textura de 128x128 vs(.5,.5)
em coordenadas normalizadas).fonte
texture
-lo ou precisa do hardware para não fazer a filtragem e, portanto, deve usartexelFetch
)texelFetch
for mais rápido e a filtragem de vizinho mais próximo for suficiente, você não poderá alterar o contexto para NN por qualquer motivo, seria razoável preferir issotexture
.texelFetch
etexture
trabalhar de forma diferente de maneiras fundamentais. Veja também as entradas: coordenadas de textura versus coordenadas normalizadas. Eles servem a propósitos diferentes. Um não é apenas uma otimização do outro.Como não há resposta aceita, adiciono algumas informações, queria apenas adicionar coisas que ainda não foram ditas por Sean em sua resposta.
O TexelFetch trata a textura como uma Imagem, para que você possa acessar exatamente o conteúdo de pixels. Você costuma fazer isso quando precisa exatamente desse conteúdo, em poucas ocasiões, porém úteis:
O Tex2D trata a textura como uma textura. Você não deseja o conteúdo exato de um pixel, mas deseja o resultado mais realista. Uma leitura de textura padrão é uma operação muito complexa e envolve a leitura de dados interpolados de um ou mais níveis de mipmap e, em seguida, interpola novamente. Todas essas operações caras são para evitar artefatos visuais.
GL_NEAREST não funcionará da mesma maneira, porque nos polígonos mais distantes você está lendo dados no nível mipmap menor, que não são os mesmos dados exatos que você leria de uma busca texel.
Há um caso em que o Tex2D (quase) funciona da mesma forma que o TexelFetch:
fonte