2012-04-04 8 views
6

Ho appena chiamato glEnableClientState() una volta nel onSurfaceCreated() metodo di interfaccia GLSurfaceView.Renderer. Es .:Quando dovrei chiamare glEnableClientState() e glDisableClientState() in 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); 
     ... 
} 

Dopo di che non li invoco più. Non invoco mai il metodo glDisableClientState(). Ma vedo che molti programmatori chiamano entrambi i metodi, spesso avvolgendoli attorno a tutte le chiamate di disegno.

C'è qualcosa di sbagliato nel mio approccio? O è una buona pratica o forse più efficiente usare l'approccio di avvolgerli attorno a tutte le chiamate di disegno?

risposta

3

Non penso che ci sia qualcosa di sbagliato nell'approccio, a condizione che tutte le chiamate di prelievo richiedano lo stesso stato. Se stai disegnando qualcosa senza normali/colori, non vuoi che l'array normale/colore sia abilitato, ecc.

Se tutti gli oggetti sono sicuri di utilizzare gli stessi array, allora il tuo metodo è probabilmente il migliore , in quanto è possibile eliminare chiamate opengl non necessarie. Disabilitare tutto dopo ogni oggetto è potenzialmente peggiore per le prestazioni, ma in generale è più sicuro che non lascerai accidentalmente qualcosa che non vuoi.

+0

Grazie. Ho capito che glEnableClientState() '/' glDisableClientState() 'sono più utilizzati nel codice di esempio e nelle librerie probabilmente per essere sicuri che gli array necessari siano abilitati e, naturalmente, disabilitano gli array usati dopo il disegno per evitare un'interferenza negativa con un altro codice di disegno (che non può utilizzare alcuni degli array abilitati). –

Problemi correlati