Per mostrare la grafica sullo schermo, il Nintendo DS utilizza una struttura a strati, chiamati anche layer o background. Il programmatore ha a disposizione un determinato numero di background che possono essere mostrati contemporaneamente su ciascuno dei due schermi, a seconda della modalità grafica impostata. Esistono 5 tipologie differenti di background:
text: viene anche detto tile background, perché è diviso in blocchi di 8x8 pixel, detti tiles (in italiano "mattonelle", "piastrelle", "tessere"), a 16 o 256 colori. La memoria deve essere impostata in modo tale da contenere sia le singole tessere, cioè le immagini grafiche vere e proprie, sia la mappa, cioè lo schema che permette di posizionare correttamente una determinata tessera su di un punto specifico dello schermo. Questo tipo di background supporta un massimo di 64x64 tessere (o 512x512 pixel); le mappe vengono gestite in blocchi di grandezza 32x32, organizzati in zone consecutive di memoria. In tabella sono descritte le varie tipologie di background di tipo text con i relativi defines per impostarle.
Tipologia: BgType_Text4Bpp, BgType_Text8Bpp
PIXELS | MAP SIZE | TILES LAYOUT | DEFINE |
---|---|---|---|
256 x 256 | 2 kb | 32 x 32 | BgSize_T_256x256 |
256 x 512 | 4 kb | 32 x 64 | BgSize_T_256x512 |
512 x 256 | 4 kb | (32 x 32) + (32 x 32) | BgSize_T_512x256 |
512 x 512 | 8 kb | (32 x 32) + (32 x 32) + (32 x 32) + (32 x 32) | BgSize_T_512x512 |
PIXELS | MAP SIZE | TILES LAYOUT | DEFINE |
---|---|---|---|
128 x 128 | 256 bytes | 16 x 16 | BgSize_R_128x128 |
256 x 256 | 1 kb | 32 x 32 | BgSize_R_256x256 |
512 x 512 | 4 kb | 64 x 64 |
BgSize_R_512x512 |
1024 x 1024 | 16 kb | 128 x 128 |
BgSize_R_1024x1024 |
PIXELS | MAP SIZE | TILES LAYOUT | DEFINE |
---|---|---|---|
128 x 128 | 256 bytes | 16 x 16 | BgSize_R_128x128 |
256 x 256 | 1 kb | 32 x 32 | BgSize_R_256x256 |
512 x 512 | 4 kb | 64 x 64 |
BgSize_R_512x512 |
1024 x 1024 | 16 kb | 128 x 128 |
BgSize_R_1024x1024 |
PIXELS | MAP SIZE (8bpp) | DEFINE | MAP SIZE (16bpp) | DEFINE |
---|---|---|---|---|
128 x 128 | 16 kb | BgSize_B8_128x128 | 32 kb | BgSize_B16_128x128 |
256 x 256 | 64 kb | BgSize_B8_256x256 | 128 kb | BgSize_B16_256x256 |
512 x 256 |
128 kb | BgSize_B8_512x256 | 256 kb | BgSize_B16_512x256 |
512 x 512 | 256 kb | BgSize_B8_512x512 | 512 kb | BgSize_B16_512x512 |
Una cosa importante da sapere è che ognuno dei due motori grafici può mostrare contemporaneamente a schermo un numero massimo di 4 background. Inoltre il motore principale può muovere delle scene 3D, ma solamente sul background 0.
In aggiunta ai layer per i background esiste un ulteriore layer che viene utilizzato per gli sprites, cioè tutte quelle parti grafiche in movimento che sono tipiche dei giochi 2D: si pensi alle navicelle spaziali di Space Invaders oppure ai fantasmini di Pacman. Parleremo più approfonditamente della gestione di questo layer più avanti.
Come già accennato, lo schermo del Nintendo DS mette a disposizione diverse modalità grafiche di funzionamento, ognuna delle quali dotata di una differente combinazione di background.
Mode 0 |
4 background text |
Mode 1 | 3 background text + 1 background rotation |
Mode 2 | 2 background text + 2 background rotation |
Mode 3 |
3 background text + 1 background extended rotation |
Mode 4 | 2 background text + 1 background rotation + 1 background extended rotation |
Mode 5 | 2 background text + 2 background extended rotation |
Mode 6 | 1 background text + 1 background extended rotation di 1024x512 (o 512x1024), disponibile solo per il motore principale |
Nella tabella seguente sono schematizzate tutte le modalità grafiche, con le tipologia di background disponibili e il motore (main o sub) con il quale si possono utilizzare.
MODE | DEFINES | MAIN | SUB | BG0 | BG1 | BG2 | BG3 |
---|---|---|---|---|---|---|---|
0 |
MODE_0_2D/MODE_0_3D | sì |
sì | Text / 3D | Text | Text | Text |
1 | MODE_1_2D/MODE_1_3D | sì | sì | Text / 3D | Text | Text | Rotation |
2 | MODE_2_2D/MODE_2_3D | sì | sì | Text / 3D | Text | Rotation | Rotation |
3 | MODE_3_2D/MODE_3_3D | sì | sì | Text / 3D | Text | Text | Extended |
4 | MODE_4_2D/MODE_4_3D | sì | sì | Text / 3D | Text | Rotation | Extended |
5 | MODE_5_2D/MODE_5_3D | sì | sì | Text / 3D | Text | Extended | Extended |
6 | MODE_6_2D/MODE_6_3D | sì | no | Text / 3D | Extended (1024x512 o 512x1024) | ||
FRAMEBUFFER: | |||||||
MODE_FB0 | sì | no | accesso diretto al video dalla memoria principale | ||||
MODE_FB1 | sì | no | accesso diretto al video da VRAM_A in modalità LCD | ||||
MODE_FB2 | sì | no | accesso diretto al video da VRAM_B in modalità LCD | ||||
MODE_FB3 | sì | no | accesso diretto al video da VRAM_C in modalità LCD |
Come si è già accennato, la modalità 3D è disponibile nativamente solo sul motore principale e solo sul background 0; inoltre è possibile attivare il 3D in ogni modalità video, eccezion fatta per la modalità framebuffer. Utilizzando degli artifici è possibile visualizzare delle scene tridimensionali su entrambi gli schermi, ma al costo di un dimezzamento del frame rate.
Per commenti e chiarimenti: http://www.lazaruspascal.it/index.php?topic=78.0