1) È necessario assegnare tutti i nomi di trama necessari. Uno per ogni trama che stai usando.
Il caricamento di una trama è un'operazione molto pesante che blocca la pipeline di rendering. Quindi, non dovresti mai caricare trame all'interno del tuo ciclo di gioco. Dovresti avere uno stato di caricamento prima dello stato dell'applicazione in cui esegui il rendering delle trame. Lo stato di caricamento è responsabile del caricamento di tutte le trame necessarie nel rendering. Quindi, quando hai bisogno di renderizzare la tua geometria, avrai caricato tutte le trame e non dovrai più preoccupartene.
Si noti che dopo aver non più necessario le trame, è necessario eliminarli utilizzando glDeleteTextures.
2) Se si intende per deduzione che sono necessarie trame diverse per livelli diversi o qualcosa di simile, è necessario elaborare i dati di livello nello stato di caricamento e decidere quali trame devono essere caricate.
D'altra parte, se è necessario dipingere del testo (come il punteggio corrente), le cose si complicano in OpenGL. Avrai le seguenti opzioni: prerender il testo necessario per trame (facile), implementa il tuo motore di font bitmap (più difficile) o usa la coppia Bitmap e Canvas per generare trame al volo (lento).
Se si dispone di un numero limitato di messaggi da mostrare durante il gioco, quindi probabilmente li prerenderò alle trame poiché l'implementazione è piuttosto banale.
Per il punteggio corrente è sufficiente avere una trama che abbia un glifo per i numeri da 0 a 9 e utilizzarlo per il rendering di valori arbitrari. L'implementazione sarà abbastanza semplice.
Se sono necessari testi localizzati più lunghi, è necessario iniziare a pensare alle trame generando al volo. Fondamentalmente si dovrebbe creare una bitmap in cui si esegue il rendering del testo utilizzando una tela. Quindi lo caricherai come trama e lo renderesti come qualsiasi altra trama. Dopo che non ne avrai più bisogno, lo elimineresti. Questa opzione è lenta e dovrebbe essere evitata all'interno del ciclo dell'applicazione.
3) Per quanto riguarda le trame e per ottenere il meglio dalla GPU dovresti tenere almeno le seguenti cose nella tua mente (queste cose diventeranno un po 'più avanzate, e dovresti preoccuparti di loro solo dopo aver ottenuto l'applicazione attivo e funzionante e se è necessario ottimizzare la frequenza dei fotogrammi):
- Ridurre al minimo le modifiche della trama poiché si tratta di un'operazione lenta. In modo ottimale dovresti rendere tutti gli oggetti usando la stessa texture in un batch. Quindi cambia la trama e rendi gli oggetti che ne hanno bisogno e così via.
- Utilizzare atlanti di trama per ridurre il numero di trame (e modifiche di trama)
- Se si dispone di molte trame, potrebbe essere necessario utilizzare altre profondità di bit di 8888 per inserire tutte le trame nella memoria. L'utilizzo di profondità di bit inferiori può anche migliorare le prestazioni.
Quando si dice "stato di caricamento", va bene che sia nello stesso momento in cui inizializzo il mio renderer? Il mio pensiero corrente è di inizializzare il mio grafico di scena e interrogare tutti gli oggetti nel grafico di scena per le trame che finiranno per richiedere (facendogli dedurre nomi dal modello di gioco). Ogni oggetto che richiedeva una trama sarebbe stato fornito con il "nome" intero OpenGL corrispondente delle trame richieste. Sembra strano? –
Mi piace modellare la logica di applicazione di alto livello utilizzando macchine a stati. Quindi il termine stato di caricamento. È assolutamente giusto farlo allo stesso tempo si fa il resto dell'inizializzazione. È solo questione di come si desidera progettare la logica dell'applicazione. Quindi sembra sano. – Lauri