2012-08-03 20 views

Respuesta

5

Ya sea en Android o iPhone, para una superficie de OpenGL tendrá métodos como: onSurfaceCreated y onSurfaceChanged, entrar en el hábito de ir a buscar los uniformes y atributos aquí en estos 2 métodos.

La única manera en que puede hacer una representación más rápida (que pronto será su prioridad cuando el código cruza 1000 líneas de código) es tan solo por tener gluseprogram, glbindbuffer, textura une y otras se une dentro método onDrawFrame, siempre caché variables en onSurfaceCreated y onSurfaceChanged

+2

Buena respuesta. Los atributos, uniformes y otras variables utilizadas dentro de los sombreadores deben almacenarse en caché dentro de los métodos init() y no en los métodos draw_Frame(). – divyaSharma

8

¿Qué camino es mejor?

Piensa en ello. No importa qué tan rápido sean glGetUniformLocation y glGetAttribLocation, ellos no pueden ser más rápidos que simplemente ir a buscar una variable. Entonces, si le preocupa el rendimiento, utilice el método que siempre es más rápido.

3

De acuerdo con mis pruebas, la búsqueda de tales ubicaciones tomó aproximadamente 100 ~ 200 veces la cantidad de tiempo que toma una sola llamada glDrawElements. Esta es solo una estimación basada en System.nanoTime(), pero creo que es fácil decir que vale la pena almacenarlas en variables durante la inicialización.

+0

Esta es una respuesta mucho mejor. (Espero que los datos sean correctos, por supuesto, pero podría imaginarlo, porque obtener atributos es sincrónico y el dibujo no lo es). –

Cuestiones relacionadas