Framebuffer access?


Tharos

Still Fresh
Joined
Dec 24, 2005
Messages
52
Ich bin gerade dabei den Lynx-Emulator Handy auf den GP2x zu bringen (siehe auch http://forums.ngemu.com/sdlemu-official-forum/67232-handy-sdl-v0-1-opensource-based-upon-handy-v0-90-a.html).
Da Rendering mit SDL_Rects zu langsam ist, wollte ich direkt in den Framebuffer schreiben. Funktioniert von der Geschwindigkeit her zwar, allerdings ist die Ausgabe nicht so wie sie sein soll (siehe Bilder im ngemu-Thread).

Was an dem Code hier könnte falsch sein?
col enthält einen rgb888 Value, den ich zu einem rgb565 konvertiere (ich hoffe mal das die Umrechnung stimmt - die Farben sehen mal richtig aus)
Code:
    for(y=0;y<(LynxHeight);y++)
    {
		for(x=0;x<(LynxWidth);x++)
		{
		    col=*lstTemp++;
		    
			Uint16 dst = ((col&0x00F80000)>>8)|
            		     ((col&0x0000FC00)>>5)|
                   		 ((col&0x000000F8)>>3); 
			
			gp2xfb[x+240*y]=(Uint16)dst;

Framebuffer wird vorher angelegt:
Code:
	printf("open fbdev\n");
	gp2xfbdev=open("/dev/fb0", O_RDWR);
	printf("create blah\n");
	gp2xfb=(Uint16 *)mmap(0, 320*240*sizeof(Uint16), PROT_WRITE, MAP_SHARED, gp2xfbdev, 0);

Leider produziert der Code das etwas zerstörte Bild...
 
Code:
<i>
</i>for(y=0;y<(LynxHeight);y++)
    {
      for(x=0;x<(LynxWidth);x++)
      {
          col=*lstTemp++;
         
         Uint16 dst = ((col&0x00F80000)>>8)|
                       ((col&0x0000FC00)>>5)|
                          ((col&0x000000F8)>>3);
         
         //gp2xfb[x+240*y]=(Uint16)dst;
        gp2xfb[x + 320 * y] = (Uint16)dst;//  :-)

:lol: GP32 port ???
 
args - dummer fehler ;)

danke - jetzt läuft es 1a :)

bissarl cleanup und ihr bekommt ne binary.
 
Back
Top