2012-08-03 10 views

Odpowiedz

5

Czy na Androida lub iPhone'a, na powierzchni OpenGL masz metod takich jak: onSurfaceCreated i onSurfaceChanged, wyrobić w sobie nawyk sprowadzać mundurów i atrybutów tutaj w tych 2 metod.

Jedynym sposobem można zrobić rendering szybciej (które wkrótce staną się priorytetem, gdy kod krzyże 1000 linii kodu) jest tylko o konieczności gluseprogram, glbindbuffer, struktura wiąże i innych wiąże wewnątrz metody onDrawFrame, zawsze cache Zmienne wewnątrz onSurfaceCreated i OnSurfaceChanged

+2

Dobra odpowiedź. Atrybuty, uniformy i inne zmienne używane wewnątrz shaderów powinny być buforowane w metodach init(), a nie w metodach draw_Frame(). – divyaSharma

8

Która droga jest lepsza?

Pomyśl o tym. Bez względu na to, jak szybko są one glGetUniformLocation i glGetAttribLocation, nie mogą one być szybsze niż po prostu pobranie zmiennej. Jeśli więc martwisz się wydajnością, użyj metody, która jest zawsze szybsza.

3

Zgodnie z moimi testami, pobranie takich lokalizacji zajęło około 100 ~ 200 razy tyle czasu, ile potrzeba na pojedyncze wywołanie glDrawElements. Jest to tylko oszacowanie oparte na System.nanoTime(), ale myślę, że jest to oszczędne, aby powiedzieć, że warto przechowywać je w zmiennych przy inicjalizacji.

+0

To jest o wiele lepsza odpowiedź. (Mam nadzieję, że dane są poprawne, ale mogę to sobie wyobrazić, ponieważ pobieranie atrybutów jest synchroniczne, a rysowanie nie jest). –

Powiązane problemy