2011-10-10 11 views
5

Utilizzo un ParticleSystem con PointSprites (ispirato a Cocos2D Source). Ma mi chiedo come ricostruire la funzionalità per OpenGL ES 2,0GLSL PointSprite per il sistema di particelle

glEnable(GL_POINT_SPRITE_OES); 
glEnableClientState(GL_POINT_SIZE_ARRAY_OES); 
glPointSizePointerOES(GL_FLOAT,sizeof(PointSprite),(GLvoid*) (sizeof(GL_FLOAT)*2)); 
glDisableClientState(GL_POINT_SIZE_ARRAY_OES); 
glDisable(GL_POINT_SPRITE_OES); 

questi generano BAD_ACCESS quando si utilizza un 2.0 contesto OpenGL ES. Dovrei semplicemente andare con 2 TRIANGLES per PointSprite? Ma questo probabilmente non è molto efficace (overhead per i vertici extra).

EDIT: Così, il mio nuovo problema con la soluzione suggerita da: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

è una possibilità di passare molte dimensioni diverse in una chiamata in batch. Ho pensato di usare un Attributo invece di un Uniforme, ma poi avrei dovuto passare sempre un PointSize ai miei ombreggiatori - anche se non sto disegnando GL_POINTS. Quindi, forse un secondo shader (uno shader solo per GL_POINTS) ?! Non sono a conoscenza del sovraccarico per il passaggio degli shader a ogni frame della routine di disegno (perché se si utilizza il sistema di particelle, desidero rendere naturalmente anche GL_TRIANGLES regolare senza un pointSize) ... Qualche idea su questo?

+1

Questo dovrebbe essere quello che stai cercando: http://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528 – rgngl

+0

Grazie! Quel collegamento è molto utile. Quindi, il mio unico problema con questa soluzione è la possibilità di fare qualcosa di simile come "glPointSizePointerOES" su GLSL (sul link si suggerisce di usare un'uniforme per la dimensione in punti - così tanti punti diversi con dimensioni diverse non sono disegnabili in una chiamata batch con glDrawArrays). Ho pensato di usare un Attributo invece di un Uniforme, ma poi avrei dovuto passare sempre un PointSize ai miei ombreggiatori - anche se non sto disegnando GL_POINTS. Quindi, forse un secondo shader (uno shader solo per GL_POINTS) ?! Qualche idea su questo? – Constantin

risposta

0

Così facendo la cosa qui come ho già commentato qui è quello che vi serve: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

E per i quali l'approccio di andare, posso neanche dirvi di usare shader diversi per i diversi tipi di drawable nell'applicazione o semplicemente un'altra uniforme booleana nel tuo shader e abilita e disabilita la modifica dello gl_PointSize tramite il tuo codice shader. Di solito dipende da te. Ciò che è necessario tenere a mente è che la modifica del programma shader è una delle operazioni più dispendiose in termini di tempo, pertanto in questo caso il disegno dello stesso tipo di oggetti in un batch sarà migliore. Non sono sicuro che l'uso di un'istruzione if nel codice dello shader darà un enorme impatto sulle prestazioni.