Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
Tuesday 1 November 2011 - 12:30
Messaggio
#1
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Per chiunque fosse esasperato dall'orribile modulo di stampa di testo tramite console su DS, vi offro questo piccolo pezzo di codice in grado di stampare in maniera un po' più decente su entrambi gli schermi in modalità Text BG, e soprattutto usando font proporzionali e inviabili a qualsiasi coordinata dello schermo. I sorgenti, seppur provvisori e ancora un po' incompleti, li potete trovare qui con tanto di esempio pratico preso da una SVN di un progetto di porting a cui stavo lavorando.
Nell'esempio sono forniti due font, uno 8x8 e uno 16x16. Volendone creare di altri, andate nella SVN sotto Source\fontmake e prendete il programma esempio che sta lì. Modificandolo a dovere potrete creare qualsiasi font di sostituzione. NOTA: L'unica parte che per ora non funziona affatto è la cancellazione delle linee di testo, ma non dovrebbe essere troppo complessa da sistemare. Questo problema è dovuto al fatto che il codice è riciclato in massa da un progetto di stampa su canvas bitmap, ovvero un sistema logico di impressione dei pixel abbastanza diverso rispetto a quello dei tile su DS. Esempio:
Messaggio modificato da Gemini il Thursday 3 November 2011 - 14:07 -------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Saturday 5 November 2011 - 14:13
Messaggio
#2
|
|
![]() Fanatic GBA/NDS Gruppo: Membri Messaggi: 1.238 Iscritto il: Mon 10 November 2008 - 21:27 Utente Nr.: 32.045 Feedback: 0 (0%) |
È triste vedere come a nessuno freghi niente che arrivi Maria Renard a tirare pizze anche su DS .-.
-------------------- |
|
|
|
Saturday 5 November 2011 - 14:58
Messaggio
#3
|
|
![]() Fanatic GBA/NDS Gruppo: Moderatori Messaggi: 1.195 Iscritto il: Thu 31 May 2007 - 10:06 Da: Minkowski space Utente Nr.: 18.491 Feedback: 1 (100%) Codice Amico:2921-9207-0800 |
È triste vedere come a nessuno freghi niente che arrivi Maria Renard a tirare pizze anche su DS .-. Mi sono perso qualcosa? Credevo fosse un mero placeholder, o Gemini ha fatto qualche annuncio in merito? ^ _ ^ -------------------- |
|
|
|
Saturday 5 November 2011 - 15:06
Messaggio
#4
|
|
![]() Fanatic GBA/NDS Gruppo: Membri Messaggi: 1.238 Iscritto il: Mon 10 November 2008 - 21:27 Utente Nr.: 32.045 Feedback: 0 (0%) |
Mi sono perso qualcosa? Credevo fosse un mero placeholder, o Gemini ha fatto qualche annuncio in merito? ^ _ ^ Quarta riga del primo paragrafo: "li potete trovare qui con tanto di esempio pratico preso da una SVN di un progetto di porting a cui stavo lavorando." -------------------- |
|
|
|
Saturday 5 November 2011 - 15:20
Messaggio
#5
|
|
![]() Fanatic GBA/NDS Gruppo: Moderatori Messaggi: 1.195 Iscritto il: Thu 31 May 2007 - 10:06 Da: Minkowski space Utente Nr.: 18.491 Feedback: 1 (100%) Codice Amico:2921-9207-0800 |
Mi sono perso qualcosa? Credevo fosse un mero placeholder, o Gemini ha fatto qualche annuncio in merito? ^ _ ^ Quarta riga del primo paragrafo: "li potete trovare qui con tanto di esempio pratico preso da una SVN di un progetto di porting a cui stavo lavorando." Sì l'avevo letto (col font 32 riesco ancora a leggere, nonostante tutto, ma sei gentilissimo ad indicarmene numero di riga e paragrafo), credevo fosse stato aperto un topic in merito come per il progetto originale o che ci fosse stato un annuncio esternamente. -------------------- |
|
|
|
Saturday 5 November 2011 - 16:32
Messaggio
#6
|
|
![]() Boss GBA/NDS Gruppo: Membri Messaggi: 486 Iscritto il: Sun 13 April 2008 - 21:07 Da: 0xdeadbeef Utente Nr.: 26.789 Feedback: 0 (0%) |
La console nelle libnds è solo e soltanto di debug, si può abusare degli sprite o (meglio) dell engine 3D per avere qualcosa di presentabile
-------------------- |
|
|
|
Saturday 5 November 2011 - 21:22
Messaggio
#7
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Per fortuna il mio codice non fa abuso di sprite o altre risorse molto "consumabili".
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Saturday 5 November 2011 - 22:43
Messaggio
#8
|
|
|
Expert GBA/NDS Gruppo: Membri Messaggi: 1.708 Iscritto il: Thu 20 December 2007 - 18:35 Da: Messina Utente Nr.: 23.776 Feedback: 0 (0%) |
La versione PSX com'è combinata?
Scusate l'off topic, ma visto che ci siamo chiedo xD -------------------- |
|
|
|
Monday 7 November 2011 - 00:50
Messaggio
#9
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Una revisione più o meno recente si può trovare su quest'altra SVN.
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Monday 21 November 2011 - 11:27
Messaggio
#10
|
|
|
Utente GBARL Gruppo: Membri Messaggi: 52 Iscritto il: Mon 10 November 2008 - 15:12 Utente Nr.: 32.035 Feedback: 1 (100%) |
[...] vi offro questo piccolo pezzo di codice in grado di stampare in maniera un po' più decente su entrambi gli schermi in modalità Text BG, e soprattutto usando font proporzionali e inviabili a qualsiasi coordinata dello schermo. [...] ... scusami, non ho mica capito in che modo riesci a rendere dei font proporzionali su un TextBG Grazie! |
|
|
|
Tuesday 22 November 2011 - 20:10
Messaggio
#11
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Utilizzo una serie di calcoli (semplici shift e salti su puntatore) per spostare la grafica tile del font e disegnare sul TextBG come fosse un canvas, per il resto faccio il mapping su tilemap con indici incrementali in modo che i tile del canvas corrispondano fedelmente a ciò che deve uscire su schermo.
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Tuesday 22 November 2011 - 21:56
Messaggio
#12
|
|
![]() Boss GBA/NDS Gruppo: Membri Messaggi: 486 Iscritto il: Sun 13 April 2008 - 21:07 Da: 0xdeadbeef Utente Nr.: 26.789 Feedback: 0 (0%) |
Quindi disegni su un canvas lineare e poi spezzetti tutto in tile ?
-------------------- |
|
|
|
Wednesday 23 November 2011 - 01:52
Messaggio
#13
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Disegno a blocchi logici di 8x8, niente canvas lineare (si perderebbe troppo tempo a convertire).
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Wednesday 23 November 2011 - 11:19
Messaggio
#14
|
|
![]() DsOs Developer Gruppo: Membri Messaggi: 2.740 Iscritto il: Tue 7 June 2005 - 09:23 Da: Vico Equense(NA) Utente Nr.: 5.122 Feedback: 6 (100%) Codice Amico:2664-2091-2256 |
Cioè fai qualcosa del tipo:
CODICE int x=100; int y=120; int c=RGB15(31, 0, 31); tile[(x>>3)+(y<<2)][(x&7)+((y&7)<<3)]=c; Ho capito bene? -------------------- |
|
|
|
Wednesday 23 November 2011 - 19:32
Messaggio
#15
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Quello è rendering a 16 bpp, mentre il mio funziona su TextBG a 4 bpp. La funzione che imprime i dati è questa:
CODICE /*======================================================================
Does all the actual pixel impression. Processes 8x? segments. =======================================================================*/ void RenderCanvasChar(BMP_CANVAS* canvas, u32 *conv, int x, int y, int ch_width, int ch_height) { int i, trest, row_width, j; u32 shift, *ccanvas, *tcanvas; // fast reference ccanvas=canvas->bitmap; row_width=canvas->row_w; // set tile rest trest=x%T_WIDTH; // seek canvas to x and y ccanvas+=(x/T_WIDTH)*T_SIZE; ccanvas+=(y/T_WIDTH*0x100)+(y%T_WIDTH); // next 4 pixels in the canvas tcanvas=ccanvas+T_SIZE/*ccanvas+1*/; shift=trest*4; for(i=0, j=y%T_WIDTH; i<ch_height; i++, j++) { if(j>=T_WIDTH) {ccanvas+=0x100-T_SIZE; j=0;} // shift new tile to the right and include into the old buffer *ccanvas|=conv[i]<<shift; ccanvas++; } trest+=ch_width; // trest+ 1~8 if(trest>T_WIDTH) { trest-=T_WIDTH; shift=(ch_width-trest)*4; // move pixels to the right for(i=0, j=y%T_WIDTH; i<ch_height; i++, j++) { if(j>=T_WIDTH) {tcanvas+=0x100-T_SIZE; j=0;} *tcanvas|=conv[i]>>shift; tcanvas++; } } } -------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Thursday 24 November 2011 - 13:17
Messaggio
#16
|
|
|
Utente GBARL Gruppo: Membri Messaggi: 52 Iscritto il: Mon 10 November 2008 - 15:12 Utente Nr.: 32.035 Feedback: 1 (100%) |
Capito. Usi un 32x32 text BG dove nella mappa hai messo tutti i 1024 tile disponibili, e poi disegni sui tile come se fosse una bitmap organizzata a blocchi di 8x8 pixel invece che un'array lineare. A questo punto i caratteri non li carichi nemmeno in VRAM.
Solo mi chiedevo: qual'è il vantaggio di questo invece di usare un BG in modo bitmap? Che non c'è il modo 16 colori? Che puoi usare anche il BG0 o BG1 se vuoi? O altri vantaggi? |
|
|
|
Thursday 24 November 2011 - 20:33
Messaggio
#17
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Sostanzialmente con il layer in bitmap puoi disegnare solo su uno dei due schermi e rimani a corto di altri BG supplementari, oltre a dover fare tutte le operazioni a 16 bit (non il massimo della velocità). Con la mia configurazione puoi scrivere il testo su qualsiasi BG e stratificare anche se necessario.
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Friday 25 November 2011 - 09:59
Messaggio
#18
|
|
|
Utente GBARL Gruppo: Membri Messaggi: 52 Iscritto il: Mon 10 November 2008 - 15:12 Utente Nr.: 32.035 Feedback: 1 (100%) |
con il layer in bitmap puoi disegnare solo su uno dei due schermi no, probabilmente confondi con il modo FrameBuffer, che c'è solo sul MAIN engine. La modalità bitmap è possibile sui BG2 e BG3 in modo rotazionale esteso sia sul MAIN che sul SUB engine... oltre a dover fare tutte le operazioni a 16 bit (non il massimo della velocità). La modalità bitmap supporta anche i bitmap a 256 colori (8 bit per pixel, non 16). quello che intendo dire, in breve, è: solo nel caso che due BG in modalità bitmap non siano sufficienti sarei disposto ad utilizzare un BG in modo tiled per usarlo -sostanzialmente- come se fosse una bitmap, complicandomi però la vita nel blitting sulla memoria organizzata come archivio delle tessere... |
|
|
|
Friday 25 November 2011 - 13:31
Messaggio
#19
|
|
![]() Expert GBA/NDS Gruppo: Membri Messaggi: 1.440 Iscritto il: Sun 18 July 2004 - 17:15 Da: Lecce Utente Nr.: 1.149 Feedback: 0 (0%) |
Il punto è che non si tratta di nulla di complicato, anzi. Nelle librerie Nintendo fanno praticamente la stessa roba, anche se con molti più giri e livelli di astrazione.
-------------------- ![]() Il modo migliore per discutere con i pazzi è non discuterci affatto. E per chi si sente sempre attaccato da tutto e tutti, questo link è l'ideale. Sempre per i paranoici fissati: il mio nome non è Michele, boccalo'. :) Allestimento a breve di un parco interamente dedicato ai castori: che si apra la gara a chi rosica di più in mezzo a ragazzini, patologie e caselli (Ron Hubbard approverebbe); a seguire un nuovo atto de "I poracci" di XXCentury. |
|
|
|
Monday 12 December 2011 - 18:16
Messaggio
#20
|
|
![]() Special User Gruppo: Membri Messaggi: 111 Iscritto il: Wed 9 August 2006 - 09:19 Utente Nr.: 12.728 Feedback: 0 (0%) |
Decisamente interessante.
Vediamo se con questo sistema riesco a risolvere qualche problemino sull'esposizione di char che ho avuto nel mio progetto IOCEROSOCCER. Grazie dell'info Gemini. -------------------- DSORIC |
|
|
|
![]() ![]() |
|
Versione Lo-Fi | Oggi è il: Mon 20 May 2013- 12:46 |