GLSL, tablica tekstur o różnej wielkości

Podczas wykonywania wielowątkowości w GLSL, czy istnieje i tak indeksowalna tablica próbników, gdzie każda Tekstura ma inny rozmiar? Ta składnia nie jest poprawna:

uniform sampler2D texArray[5];

W tej chwili wydaje się, że jedyną opcją jest samodzielne tworzenie samplerów:

uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
uniform sampler2D tex5;
/ Align = "center" bgcolor = "# e0ffe0 " / cesarz japonii / / align = center / Jest jakieś rozwiązanie?
 10
Author: grivescorbett, 2012-08-20

2 answers

Ta składnia nie jest poprawna:

Kto tak mówi? Tablice próbników z pewnością są poprawne(w zależności od wersji). To, jak je używasz, to inna sprawa.

GLSL 1.20 i nowsze nie pozwalają na tworzenie tablic próbnikowych.

W GLSL od 1.30 do 3.30 możesz mieć tablice samplera, ale z poważnymi ograniczeniami indeksu. Indeks musi być całkowym wyrażeniem stałym. Tak więc, podczas gdy możesz zadeklarować tablicę samplera, nie możesz pętli ponad to.

GLSL 4.00 i nowsze pozwalają indeksowi być " dynamicznie jednorodnym wyrażeniem całkowym ". Termin ten zasadniczo oznacza, że wszystkie instancje shadera (w ramach tego samego wywołania draw) muszą uzyskać te same wartości.

W GLSL 4.00+ można więc zapętlać stały zakres i indeksować tablicę próbników z licznikiem pętli. Możesz nawet uzyskać Indeks z jednolitej zmiennej. To, czego nie możesz zrobić, to mieć indeks zależny od wejścia do etapu shadera (chyba że ta wartość jest taka sama we wszystkich wystąpieniach wywołanych przez polecenie renderowania) lub pochodzi z wartości pochodzącej z dostępu tekstury (chyba że ta wartość jest taka sama we wszystkich wystąpieniach wywołanych przez polecenie renderowania), lub coś w tym stylu.

Jedynym wymogiem na teksturach umieszczonych w tablicach próbników jest to, że pasują one do typu próbnika. Więc musisz użyć GL_TEXTURE_2D na wszystkich elementach tablicy sampler2D. Poza tym tekstury mogą mieć dowolną liczbę różnic, w tym Rozmiar. Tablica istnieje, aby ułatwić kodowanie; nie zmienia semantyki tego, co tam jest.

I pamiętaj: każdy pojedynczy element w tablicy próbnika musi być powiązany z własną jednostką obrazu tekstury.

 20
Author: Nicol Bolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-04 01:05:42

Czy w każdym razie istnieje indeksowalna tablica próbników, gdzie każda Tekstura ma inny rozmiar?

Jeszcze nie. Może to zostanie dodane do późniejszej wersji OpenGL w dół drogi, ale wątpię.
/ Align = "left" / Jest jakieś rozwiązanie?

Jako obejście można użyć tekstur tablicy i używać tylko podregionów każdej warstwy. Użyj tablicy vec4, aby zapisać każdy obrazek na każda warstwa.

 1
Author: datenwolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-20 02:55:20