Domanda

Sto programmando un'applicazione per un processore a 32 bit con memoria limitata (512k flash, 32k RAM).

La display su questo dispositivo è 128x160 con colore a 16 bit, che normalmente consumerebbe 40k di RAM se lo bufferizzassi sul mio processore. Non ho molta RAM, quindi sto cercando tecniche, suggerimenti, trucchi, idee per generare al volo i dati dello schermo.

Cose che potrebbero aiutare:

  • Forse conosci una risorsa per questo tipo di limitazione
  • Forse hai generato una grafica accattivante al volo
  • Esiste un algoritmo generico che potrei usare per combinare elementi nella memoria del programma (compresa la fusione alfa) al volo mentre eseguo la scansione del display
  • Semplici tecniche di rendering vettoriale (o sorgente gratuita (bsd / mit / apache))
  • ???

Ho un moltiplicatore, ma nessun processore a virgola mobile. Il display stesso ha un controller e una memoria molto semplici per il display, ma le letture e le scritture sono costose, quindi non voglio usarlo come spazio di lavoro se posso evitarlo.

-Adam

È stato utile?

Soluzione

In un certo senso, ci si trova nella stessa situazione degli sviluppatori di giochi in cui al tempo dei Tandys, degli Spettri e dei primi PC. Quindi, ecco la mia raccomandazione:

Dovresti leggere gli scritti di Michael Abrash sulla grafica del computer. Sono stati scritti in un'epoca in cui un coprocessore a virgola mobile era un componente hardware opzionale e descrivono molte delle tecniche di base (linee di Bresenham, ecc.) Utilizzate nei vecchi (presumibilmente "cattivi") giorni resi dal software .

Puoi leggere la maggior parte del suo " Black Book " qui .

Inoltre, è possibile trovare molti dei vecchi file BBS che la maggior parte delle persone usava nel corso della giornata per imparare la programmazione grafica qui . Cerca solo grafica, linee e cosa no.

Spero che ti aiuti!

Aggiornamento: ricordo anche di aver usato this nei miei primi tentativi di disegnare cose sullo schermo. Non posso dire quanto tempo ho trascorso cercando di capire la matematica dietro (beh, per essere onesti, avevo 15 anni all'epoca). Ottima (e semplice) introduzione al 3D, e una premier molto bella su trasformazioni, riempitivi poligonali e interpolazione.

Altri suggerimenti

Che tipo di dati mostrerai sullo schermo?

Se non si tratta di immagini fotografiche, potresti prendere in considerazione l'utilizzo di una tavolozza. Ad esempio: una tavolozza di 256 colori che utilizza 8 bit per pixel richiederebbe 20 kb (più 256 x 2 byte per la tabella di ricerca) che è almeno migliore di 40 kb.

Credo che la tecnica di base per affrontare questo tipo di situazione sia quella di dividere lo schermo in strisce orizzontali strette, e di bufferare solo due di queste strisce nella RAM. Verrà visualizzata una striscia mentre si esegue il rendering della successiva verso il basso. Quando il "raggio" di scansione colpisce la striscia successiva (e fa scattare un'interruzione per farti catturare), scambia i due e inizi a disegnare la striscia successiva verso il basso.

Un brutto effetto collaterale di questo è che hai limiti di tempistica difficili su quanto tempo puoi spendere per il rendering di ogni striscia. Quindi immagino che sarebbe allettante restare con qualcosa di noioso ma con prestazioni prevedibili, come gli sprite.

Leggermente offtopico ma funziona così l'hardware 3D per Nintendo DS. Puoi vederlo se provi a eseguire il rendering di troppi poligoni attorno alla stessa coordinata y: i polis sfarfalleranno e cadranno casualmente mentre l'aggiornamento dello schermo supera l'hardware di rendering.

Inoltre, suggerirei al suggerimento dell'altro poster di utilizzare il rendering palettizzato. È molto difficile fare matematica veloce su pixel a 16 bit, ma più veloce a 8 bit se sei intelligente su come disporre la tavolozza.

Alcune idee che combinerebbero una bella grafica e poca memoria:

  • Memorizza sfondi e sprite in flash.
  • Memorizza la grafica generata dinamicamente nella RAM usando una tavolozza a metà dei byte.
  • Utilizzare la funzione di finestra del driver LCD per aggiornare solo la parte dello schermo che è necessario.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top