Rozumiem główne różnice między texelFetch
i texture
, ale mam kilka pytań dotyczących szczegółów:
- Czy
texelFetch
wiąże się to z utratą wydajności? Takich jak nieużywanie pamięci podręcznej lub coś takiego? - Czy są
texelFetch
itexture
wymienne podczas używaniaGL_NEAREST
?
opengl
textures
performance
Martin Perry
źródło
źródło
Odpowiedzi:
texelFetch
jest zupełnie inny niżtexture
.texture
jest zwykłą funkcją dostępu do tekstury, która obsługuje filtrowanie i znormalizowane ([0,1]
) współrzędne tekstury.texelFetch
uzyskuje bezpośredni dostęp do tekstu w teksturze (bez filtrowania) przy użyciu nienormalizowanych współrzędnych (np.(64,64)
w tekstelu środkowej w teksturach 128 x 128(.5,.5)
w porównaniu ze współrzędnymi znormalizowanymi).źródło
texture
lub potrzebujesz sprzętu, aby nie filtrował, a więc musisz użyćtexelFetch
).texelFetch
jest to szybsze i wystarcza filtrowanie najbliższego sąsiada, nie można zmienić kontekstu na filtrowanie NN z jakiegokolwiek powodu, uzasadnione byłoby preferowanie gotexture
.texelFetch
itexture
działają inaczej w fundamentalny sposób. Zobacz także dane wejściowe: współrzędne tekstury vs współrzędne znormalizowane. Służą do różnych celów. Jedno jest nie tylko optymalizacją drugiego.Ponieważ nie ma żadnej akceptowanej odpowiedzi, dodaję trochę informacji, chciałem po prostu dodać rzeczy, które nie zostały jeszcze powiedziane przez Seana w jego odpowiedzi.
TexelFetch traktuje teksturę jak obraz, dzięki czemu można uzyskać dostęp do dokładnie zawartości pikseli. Zwykle robisz to, gdy potrzebujesz dokładnie tej treści, co jest rzadkie, ale przydatne:
Tex2D traktuje teksturę jako teksturę. Nie chcesz dokładnej zawartości piksela, ale chcesz uzyskać najbardziej realistyczny wynik. Standardowy odczyt tekstur jest bardzo złożoną operacją i obejmuje odczyt interpolowanych danych z jednego lub więcej poziomów mipmap, a następnie interpolację. Wszystkie te kosztowne operacje mają na celu uniknięcie artefaktów wizualnych.
GL_NEAREST nie będzie działał tak samo, ponieważ na najdalszych wielokątach odczytujesz dane na mniejszym poziomie mipmap, co nie jest dokładnie tymi samymi danymi, które odczytywałbyś z pobierania texel.
Jest jeden przypadek, w którym Tex2D (prawie) działa tak samo jak TexelFetch:
źródło