2012-02-06 22 views
5

Jest to związane z Switch shader program in WebGL, ale chciałem ponownie zadać pytanie teraz mam jaśniejszy pomysł problemu i co chcę zapytać.Jaki stan został utracony/zresetowany po uruchomieniu programu glUseProgram?

Próbuję przełączać się między różnymi programami cieniującymi, ale nie mogę sprawić, aby rzeczy były poprawnie renderowane podczas przełączania programu cieniującego w tym samym renderowaniu. Myślę, że stan został utracony lub zresetowany po wywołaniu glUseProgram().

Jaki stan został utracony lub zresetowany po tym połączeniu? Innymi słowy, co jest potrzebne do ponownego wiązania po glUseProgram()?

Odpowiedz

0

Jest możliwe, że twoje tablice wierzchołków i tablice wierzchołków attrib mają różne lokalizacje w innych programów (takich jak this.locATex), te same problemy mogą wystąpić z powiązaniami tekstury i mundurów prób dla przykładu. Musisz zapytać o te lokalizacje i "uniformy jednostkowe tekstur", które musisz zainicjować samodzielnie dla każdego programu indywidualnie i związać swoje tablice i tekstury odpowiednio przed rysowaniem. Dalsze wiązania "na drugim końcu" również mogą pękać, na przykład lokalizacje danych fragmentów. Ale proponuję, podać trochę kodu, zanim wynalezione zostaną nowe problemy :-).

+1

Dziękuję za poradę, ale szukałem bardziej ogólnej porady, na przykład, czy muszę ponownie ustawić mundury, czy też zachowują swoją wartość? Czy atrybuty lub jednolite lokalizacje zachowują swoją wartość dla jednego programu? Czy teksturowanie należy ponownie włączyć? I tak dalej. – AshleysBrain

+0

Po połączeniu programu są zachowywane lokalizacje i rzeczywiste jednolite lokalizacje i wartości. Jednolite bufory mogą być powiązane z większą liczbą programów. Nie trzeba ponownie włączać teksturowania, ponieważ nie używasz potoków o ustalonej funkcji. – Sam

+0

Jednostka tekstur ma wiele punktów mocowania, można na przykład powiązać tekstury 2D i 3D i uzyskać do nich dostęp za pomocą odpowiedniego samplera próbnika. – Sam

Powiązane problemy