2013-09-30 25 views
7

Ponieważ nie jestem ekspertem, proszę, nie traktuj tego pytania głupio. Przeczytałem kilka tutoriali, w których parametry tekstury zostały ustawione za pomocą glTexParameter. Mówię o GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R itd .. Nagle natknęłam się na samouczek, który teraz używał glSamplerParameter do ustawienia tych parametrów.Jaka jest różnica między glTexParameter i glSamplerParameter

widzę istnieją pewne wspólne parametry między glTexParameter i glSamplerParameter podobne (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, GL_TEXTURE_MIN_LOD etc), a są takie, które są stosowane tylko w glTexParameter (GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_SWIZZLE_R etc). Doskonale rozumiem te niezbyt częste, ponieważ przecież glTexParameter działa na obrazie, a te parametry określają atrybuty image per se.

Ale nie bardzo rozumiem, dlaczego istnieją pewne parametry, które są wspólne między tymi 2 wywołania GL. Które powinno się stosować, gdy? Moim zdaniem parametry próbkowania, takie jak (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, itp.) Powinny mieć zastosowanie tylko do sampler (glSamplerParameter), a nie do glTexParameter.

Proszę mi pomóc zrozumieć różnicę między dwoma.

Odpowiedz

10

glSamplerParameter jest stosunkowo nowy. Sposób próbkowania tekstury jest w rzeczywistości właściwością rzeczy wykonującej próbkowanie, a nie samej tekstury - nie tylko w kategoriach semantycznych, ale w rzeczywistym, rzeczywistym sprzęcie.

Oprócz chęci reprezentowania rzeczy tak, jak faktycznie działają na sprzęcie, wiązanie dwóch niepowiązanych ze sobą elementów może kosztować wydajność. Jeśli uczynisz sposób, w jaki coś jest próbkowane, właściwość samplera, np. możesz próbkować tę samą teksturę na dwa różne sposoby w obrębie tego samego modułu cieniującego. Jeśli jest to właściwość tekstury, musisz przesłać tę samą teksturę dwa razy lub napisać wielodrożny moduł cieniujący.

Dlatego te dwie rzeczy są teraz rozdzielane.

+0

Brzmi jak przy użyciu glSamplerParameter jest lepszy pod wieloma względami. Czy możesz wskazać przypadki, w których używanie glTexParameter ma swoje zalety? – viktorzeid

+3

@kvikram: Naprawdę nie ma żadnych = P Obiekty Samplera są tak, jak powinny działać przez cały czas, i sposób, w jaki działał już od lat w D3D. Posiadanie stanu samplera oddzielnie od obiektu tekstury jest ogromnym bodźcem, możesz zmienić tryb filtra, po prostu wiążąc inny próbnik z TMU. Są to funkcje OpenGL 3.3, ale dość szeroko obsługiwane. –

+0

Dziękuję wam obu. – viktorzeid

2

Spójrz tutaj na reference about Sampler Objects I here from geeks3d

Został on dodany do rdzenia OpenGL w wersji 3.3 (tak powinno być całkiem dobrze dostosowany do dziś).

Generalnie oddziela pobieranie próbek od tekstur od danych tekstury. Wcześniej było to zarówno zadanie obiektu tekstury (co było dość nieefektywne i problematyczne). Teraz nowe rozwiązanie zapewnia dużą elastyczność.

Parametry są takie same jak dla obiektów tekstur ale odnosi się wyłącznie do pobierania próbek: GL_TEXTURE_WRAP_S​, GL_TEXTURE_WRAP_T​, GL_TEXTURE_WRAP_R​, GL_TEXTURE_MIN_FILTER​, GL_TEXTURE_MAG_FILTER​, GL_TEXTURE_BORDER_COLOR​, GL_TEXTURE_MIN_LOD​, GL_TEXTURE_MAX_LOD​, GL_TEXTURE_LOD_BIAS​, GL_TEXTURE_COMPARE_MODE​, or GL_TEXTURE_COMPARE_FUNC​