de totorigolo » 13 Jan 2012, 17:40
Oups, excuse moi j'ai pas fait mon dernier push hier soir, qui enlevait bcp de remarques que tu fais. Je viens de le faire, et j'ai appliqué tes suggestions qui ne me posent pas problème.
EDIT: Pas encore fini de faire ce que tu m'as dis. C'est bon le push est fait et le post suivant en parle 
- Code: Tout sélectionner
if (x < 0 || x >= 320 || y < 0 || y >= 240) // SCREEN_WIDTH et SCREEN_HEIGHT ?
return;
C'était pour un petit debug, et j'ai oublié de les remettre.
- Code: Tout sélectionner
// 4 bpp <- Ok
if (!has_colors) // Devrait être !has_colors || !lcd_isincolors()
Le problème avec lcd_isincolor() maintenant, c'est que j'aurais encore mes problèmes de liaison de libndls -> obligé d'utiliser la fonction dans le main du programme.
- Code: Tout sélectionner
char col = ((c.R / 8) + (c.G / 4) + (c.B / 8)) / 48; // 3 * 16 // Incorrect: c.R, c.G et c.B ne sont pas des valeurs 8 bits ;)
Comment faire alors pour accéder à R, G et B ? Si je comprends bien, pas possible avec les bit fields (j'ai mis int16_t parce que je croyais que ça n'avait aucune importance avec le bit field) ? Si oui, je sais comment faire pour les récupérer autrement.
- Code: Tout sélectionner
unsigned char* p = (unsigned char*)(SCREEN_BASE_ADDRESS + ((x >> 1) + (y << 7) + (y << 5))); //
//*p = (x & 1) ? ((*p & 0xF0) | col) : ((*p & 0x0F) | (col << 4)); // Ceci serait correct.
*p = c.raw; // Incorrect: écrit une couleur 16 bits qui n'a rien à voir, au lieu de col que tu viens juste de calculer :)
Là encore un test, que j'ai enlevé avec mon commit non pushé (

) J'ai essayé ça parce que vous aviez dis d'essayer en 16 bpp, ce que j'avoue ne pas avoir très bien compris. (faut pas oublier formation SdZ

)
- Code: Tout sélectionner
volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS; // Pourquoi volatile ?
volatile unsigned char *ptr; // Idem
ptr = scr_base + sizeof(uint16_t) * (x + SCREEN_WIDTH * y); // Je ne savais pas d'où venait ce "2" ^^
// Rouge 0-31 Vert 0-63 Bleu 0-31
*(volatile unsigned short*)ptr = c.raw; // OK, mais pourquoi volatile ? :)
J'utilise ces volatiles car j'ai repris, à l'origine, ces lignes du sample "color" de Ndless (le copié-collé-adapté-mais-conforme de ce code est disponible dans RGBstrips()).
Lionel Debroux a écrit:Pour que le compilo puisse optimiser beaucoup plus, je pense que comme ExtGraph, tu devrais faire des macros de pixel séparées pour 4 bpp et 16 bpp, et séparer les chemins de code 4 bpp et 16 bpp dans toutes les fonctions qui appellent actuellement setPixel

Si tu veux que je fasse des macros, comment faire pour pouvoir avoir la compatibilité des progs' avec 4bpp & 16bpp sans recompiler ?
Dernière édition par totorigolo le 13 Jan 2012, 23:08, édité 3 fois.
nRGBlib, bibliothèque graphique en couleurs pour Ndless 3 !
pdf2png, un convertisseur de pdf en png, conçu pour être utilisé avec
mViewer CX !
