Struttura dati di gioco 2D in OpenGL ES 2.0

0

Sto provando a inventare alcune strutture dati per rendere la mia mappa su OpenGL. Saranno ~ 100x100 blocchi (quadrati) in totale, con ogni blocco di circa 100 pixel. Tuttavia, lo schermo mostrerà solo circa 20x10 di questi blocchi alla volta, a seconda della posizione del personaggio. Quindi da questo post:

link

Si dice che non dovrei fare molta allocazione con ByteBuffers. Quindi ecco gli approcci che ho trovato:

  1. Assegna tutti i 10.000 blocchi e cambia semplicemente i vertici su ogni frame, per quelli che devo visualizzare. Quindi nessuna allocazione dinamica, ma molto spazio iniziale.
  2. Assegna i blocchi solo quando ne ho bisogno. Quindi se in un frame mi sposto a sinistra, e devo mostrare nuovi blocchi, assegnerò 10 blocchi in OpenGL. In questo modo ho meno memoria allocata contemporaneamente. Comunque c'è un'allocazione dinamica e ho bisogno di impostare le trame su ogni fotogramma.
  3. Memorizza in cache alcuni blocchi di ogni tipo e aggiorna le informazioni del vertice per quanto ne ho bisogno, in questo modo non ho bisogno di allocare molto all'inizio e non ho bisogno di allocare nulla in modo dinamico. (Quindi avere 100 blocchi di muro, 100 blocchi di porte, 100 blocchi di pavimento, tutti impostati dall'inizio)

Qualcuno di questi approcci è il modo giusto per farlo? O come si potrebbe visualizzare una serie di Bitmap e aggiornare la loro posizione su ogni frame? O Java è una cattiva idea fin dall'inizio, anche per un semplice gioco 2D?

    
posta Mariano Sorgente 15.04.2014 - 06:32
fonte

1 risposta

1

~ 10.000 quads testurizzati è dell'ordine di ~ 1 MB. Mentre la dimensione massima del buffer varia in base alla GPU, 1 MB non dovrebbe essere un problema.

D'altra parte, anche se caricare ripetutamente dati geometrici sulla GPU in genere non è consigliabile, in questo caso potresti facilmente farla franca, con solo ~ 200 quad visibili alla volta.

Quindi mi aspetto che entrambi gli approcci vadano bene, a meno che tu non abbia come target dispositivi estremamente di fascia bassa.

Se disponevi di una tonnellata di geometria e troppo visibile in una schermata per caricarla ripetutamente, puoi dividere la geometria in diverse regioni di blocco e allocare / deallocare i buffer quando le regioni diventano visibili o invisibili.

    
risposta data 12.10.2014 - 10:02
fonte

Leggi altre domande sui tag