by 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: Select all
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: Select all
// 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: Select all
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: Select all
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: Select all
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 wrote: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 ?
Last edited by totorigolo on 13 Jan 2012, 23:08, edited 3 times in total.
nRGBlib, bibliothèque graphique en couleurs pour Ndless 3 !
pdf2png, un convertisseur de pdf en png, conçu pour être utilisé avec
mViewer CX !