Поскольку нет принятого ответа, я добавляю некоторую информацию, я хотел просто добавить то, что еще не было сказано Шоном в его ответе.
TexelFetch обрабатывает текстуру как изображение, поэтому вы можете получить доступ именно к содержимому пикселей. Вы обычно делаете это, когда вам нужен именно этот контент, что встречается редко, но полезно:
- Некоторые фильтры постобработки (Guassian blur использует интерполяцию образца текстуры и поэтому не может использовать TexelFetch)
- Когда вершинам нужно читать данные из текстур, а это операция, зависящая от 2 координат
Tex2D рассматривает текстуру как текстуру. Вы не хотите точное содержание пикселя, но вы хотите наиболее реалистичный результат. Стандартное чтение текстур - очень сложная операция, которая включает в себя чтение интерполированных данных с одного или нескольких уровней MIP-карт, а затем снова интерполирует. Все эти дорогостоящие операции должны избегать визуальных артефактов.
GL_NEAREST не будет работать так же, потому что на самых дальних полигонах вы читаете данные на меньшем уровне mipmap, которые не совпадают с точными данными, которые вы читали бы из выборки texel.
Есть один случай, когда Tex2D (почти) работает так же, как TexelFetch:
- фильтр GL_NEAREST
- Вы используете неполную пирамиду MipMap с 1 уровнем
- ваши UV не являются нормализованными компонентами вершин (но вы должны нормализовать их в шейдере)