Я понимаю основные различия между texelFetch
и texture
, но у меня есть несколько вопросов о деталях:
- Влечет ли это
texelFetch
снижение производительности? Например, не использовать кеш или что-то подобное? - Являются ли
texelFetch
иtexture
взаимозаменяемы при использованииGL_NEAREST
?
opengl
textures
performance
Мартин Перри
источник
источник
Ответы:
texelFetch
сильно отличается отtexture
.texture
ваша обычная функция доступа к текстуре, которая обрабатывает фильтрацию и нормализованные ([0,1]
) координаты текстуры.texelFetch
напрямую получает доступ к текселю в текстуре (без фильтрации), используя ненормализованные координаты (например,(64,64)
в текселе со средним значением в текстуре 128x128 против(.5,.5)
нормализованных координат).источник
texture
либо вам необходимо аппаратное обеспечение, чтобы не выполнять фильтрацию, и поэтому необходимо использоватьtexelFetch
).texelFetch
это быстрее и достаточно фильтрации ближайших соседей, вы не можете изменить контекст на NN-фильтрацию по какой-либо причине, было бы разумно предпочесть егоtexture
.texelFetch
иtexture
работать по-разному в основных направлениях. Смотрите также входные данные: координаты текстуры против нормализованных координат. Они служат разным целям. Один не просто оптимизация другого.Поскольку нет принятого ответа, я добавляю некоторую информацию, я хотел просто добавить то, что еще не было сказано Шоном в его ответе.
TexelFetch обрабатывает текстуру как изображение, поэтому вы можете получить доступ именно к содержимому пикселей. Вы обычно делаете это, когда вам нужен именно этот контент, что встречается редко, но полезно:
Tex2D рассматривает текстуру как текстуру. Вы не хотите точное содержание пикселя, но вы хотите наиболее реалистичный результат. Стандартное чтение текстур - очень сложная операция, которая включает в себя чтение интерполированных данных с одного или нескольких уровней MIP-карт, а затем снова интерполирует. Все эти дорогостоящие операции должны избегать визуальных артефактов.
GL_NEAREST не будет работать так же, потому что на самых дальних полигонах вы читаете данные на меньшем уровне mipmap, которые не совпадают с точными данными, которые вы читали бы из выборки texel.
Есть один случай, когда Tex2D (почти) работает так же, как TexelFetch:
источник