KontekstWebGL - rozmiary zmiennych tablicowych ponad vertex shader wzywa
Próbuję narysować krzywe Beziera w płótnie. Osiągnąłem, aby narysować krzywe kwadratowe i sześcienne z poziomu modułu cieniującego, ale miałem do tej pory zmienną jednolitą dla każdego punktu kontrolnego.
Klikam więc na moim płótnie, dodam punkty i gdy mam dość (odpowiednio 3 i 4), rysuję krzywą.
Teraz próbuję generalizować krzywe Beziera. Chociaż udało mi się to osiągnąć po stronie JavaScript, mam wrażenie, że lepiej byłoby zrobić to po stronie modułu cieniującego, ponieważ szybkość renderowania zostałaby znacznie zwiększona.
Chciałbym więc narysować moją krzywą, skoro tylko mam co najmniej dwa punkty. Mogłem jednak dodawać punkty i rysować krzywą za pomocą każdego punktu, w kolejności jako punktów kontrolnych.
Wyjaśnienie
Tak wiem, że to nie jest możliwe, aby ustawić dynamiczną tablicę w GLSL, ale jest to possibliy dynamicznie zadeklarować tablicę GLSL w oparciu o zmiennej JS?
Jeśli moje pytanie jest niejasne (wiem, że mam problemy z formułowaniem rzeczy od razu), pozwól mi wyjaśnić na przykładzie.
uniform vec2 uMyPoints[<length>];
Więc to jest to, co chciałbym osiągnąć, ale oczywiście rozmiar tablicy musi być stała, zgodnie z zaleceniami GLSL.
Jednak z mojego punktu widzenia mam wrażenie, że powinienem móc ustawić length
ze zmiennej JS. Mam intuicję, że rozmiar tablicy w GLSL byłby stały przez cały czas wykonywania różnych shaderów podczas renderowania, ale mógł się zmieniać z jednego renderowania na inny.
Pytanie
Więc moje pytanie brzmi: Na podstawie tych Znasz dobry sposób lub sztuczki, aby móc zestaw stałym GLSL ze zmiennej javascript?
Jeśli wydaje się to możliwe, bardzo mi to pomoże. Dzięki za uwagę.
W gruncie porównania:?.. Jak moglibyśmy ustawić "numLights" in this example z JS
Odpowiedź
podstawienie String pasuje do moich potrzeb ładnie Chociaż jest to trochę trudne, to zrobić dobrze Dalsze badania pozwoliły mi dowiedzieć się, że ukryty rozmiar macierzy jest dostępny Open GL ES wersja 3, z której powinny korzystać przyszłe wersje WebGL, ale już nie.
Z drugiej strony druga sugestia nie odpowiada moim potrzebom Dokładnie chciałem tego uniknąć N punktów w module cieniującym, ponieważ ta liczba punktów może się zmienić.
Dzięki za odpowiedź;)