24. juni 2008 - 11:52Der er
3 kommentarer og 1 løsning
Hjælp til Pointer magi
Jeg ønsker ved et simpelt kald som her: paintPixel(_X, _Y, _DATA) at male den aktuelle pixel i memory med _DATA
Jeg er ikke skap til pointer magi og kan ikke få det til at virke helt dynamisk. Hvis det er noget du kan klare så er fakta her:
Jeg har en framebuffer af variabel størrelse (_WIDTH og _HIGHT) Jeg har 32 bit pr adresse i framebuffer Jeg har en variabel farvedybte(1,2,4,8,16 og 24bit) pr px på framebuffer (_BPP) Pixels er placeret fortløbende i memory med 32px pr memory adresse ved 1 BBP og ned til 1px ved 24bit(placeret på bit 0-23)
Jeg vil gerne se noget virklig trylleri i håb om at lære nogle trix.
void paintPixel(unsigned _X, unsigned _Y, unsigned _DATA) { switch(_BPP) { case 8: static_cast<unsigned char *>(framebuffer)[_X + _Y * _WIDTH] = _DATA; break; case 16: static_cast<unsigned short *>(framebuffer)[_X + _Y * _WIDTH] = _DATA; break; case 24: static_cast<unsigned int *>(framebuffer)[_X + _Y * _WIDTH] = _DATA & 0x00FFFFFF; break; } }
Hvad vil du med 1, 2, og 4 bit opløsningnerne? De vil sikkert være langsommere, ikke bare på grund af de ekstra beregninger (en division og en modulus per pixel), men også fordi værdier der allerede findes i framebufferen skal nulstilles inden nye værdier kan skrives. Hvis du ikke gjorde det, ville følgende:
paintPixel_1bit(0,0, 1); paintPixel_1bit(0,0, 0);
stadigvæk have en værdi af 1 på position 0,0. Det er dog nemt nok at lave:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.