2012-04-04 10 views
6

Po prostu wywołuję glEnableClientState() jeden raz w interfejsie onSurfaceCreated() interfejsu . Np:Kiedy należy wywołać funkcje glEnableClientState() i glDisableClientState() w systemie Android

public class GLRenderer implements GLSurfaceView.Renderer { 
    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
     ... 
} 

Po że nie wywołuj je ponownie. Nigdy nie odwołuję się do metody glDisableClientState(). Ale widzę, że wielu programistów nazywa obie metody często owijając je wokół wszystkich wywołań rysunkowych.

Czy coś jest nie tak z moim podejściem? Czy może to dobra praktyka, a może bardziej efektywna metoda owijania ich wokół wszystkich połączeń rysunkowych?

Odpowiedz

3

Nie sądzę, aby coś było nie tak z twoim podejściem, pod warunkiem, że wszystkie twoje połączenia remisowe wymagają tego samego stanu. Jeśli rysujesz coś bez normalnych/kolorów, nie chcesz mieć włączonej normalnej/kolorowej tablicy, itp.

Jeśli wszystkie twoje obiekty z pewnością wykorzystają te same tablice, twoja metoda jest prawdopodobnie najlepsza , ponieważ można wyeliminować niepotrzebne połączenia OpenGL. Wyłączenie wszystkiego po każdym obiekcie jest potencjalnie gorsze dla wydajności, ale ogólnie bezpieczniej jest, aby przypadkowo nie pozostawić włączonego czegoś, czego nie chcesz.

+0

Dziękuję. Stwierdziłem, że 'glEnableClientState()'/'glDisableClientState()' są najczęściej używane w przykładowym kodzie i bibliotekach prawdopodobnie po to, aby były bezpieczne, że potrzebne tablice są włączone i oczywiście wyłączają one używane tablice po rysowaniu, aby uniknąć negatywnej interferencji z inny kod rysunkowy (który może nie używać niektórych z włączonych tablic). –

Powiązane problemy