euh RGB555 il me semble que c A RRRRR GGGGG BBBBB
alors que la gp c RRRRR GGGGG BBBBB A donc faut juste faire un decalage de bit quoi
(suis pu trop sur faut verifier)
Je confirme:
RGB555 = A RRRRR GGGGG BBBBB
GP 16bit= RRRRR GGGGG BBBBB A
yoshi Le 10/06/2003 à 14:55 l'ecran de la gp32 :
tu peux avoir l'adresse en faisant
GPDRAWSURFACE gpDraw
GpLcdSurfaceGet(&gpDraw, 0);
// 0 étant le numero de l'ecran (0 et 1 pour un double buffering
puis gpDraw.o_buffer te donne l'adresse.
Ensuite tu dois savoir que le codage se fait de bas en haut et de gauche à droite.
Comme si tu codais sur PC avec l'écran basculé sur la gauche.
Le premier point et donc en bas à gauche et le dernier en haut à droite.
quand tu incremente l'adresse tu monte d'une ligne. Pour avancer vers la droite tu ajoute la hauteur.
Pour la palette lis le header gpgraphic tu y trouvera pleins d'info pas mal
par exemple :
#define GPC_PAL_RED_MASK 0xf800
#define GPC_PAL_GREEN_MASK 0x07c0
#define GPC_PAL_BLUE_MASK 0x003e
le bit 1 est le hight light bit Il donne une intensité plus grande au couleurs.
donc le codage est RRRRGGGGBBBBH que ce soit en mode 16 ou en paletté 8
pour créer une palette
GP_HPALETTE GpPaletteCreate(int entry_num, GP_PALETTEENTRY * pal_entry);
GP_PALETTEENTRY étant un tableau de short contenant la palette
Pour la rendre active
unsigned int GpPaletteRealize(void);
yoshi Le 10/06/2003 à 20:23 vu le code c'est normal que ça merde.
g = i donc g va de 0 à 256
hors la palette g est sur 5 bits soit de 0 à 31
donc g<<6 dépasse sur r de 3 bits
idem pour b qui dépasse sur b de 3bits
fait plutot comme ça
r = (int)((float)i * (32.0f / 256));
g = (int)((float)i * (32.0f / 256));
b = (int)((float)i * (32.0f / 256));
// Ca te donne un R sur 5 bits en rapport avec le range 0 à 256
puis palette[i] = (r & 0x1f) << 11 | (g & 0x1f) << 6 | (b & 0x1f) << 1;