PDA

Ver la versión completa : Uso del double buffering



cdrman
10/12/2005, 07:54
Holas, acabo de empezar a programar para gp32. La verdad es que voy un poco perdido con el tema del double buffering, he hecho algo, va bien, pero no acabo de entender porque.

while(1)
{
// Borramos pantalla
GpRectFill(NULL,&gpDraw[nflip],0,0,gpDraw[nflip].buf_w,gpDraw
[nflip].buf_h,0x0);
// Pintamos
GpRectFill(NULL,&gpDraw[nflip],i,j,25,25,210);
ReadControls();
if (UP)
j-=5;
if (DOWN)
j+=5;
if (LEFT)
i-=5;
if (RIGHT)
i+=5;

// cambiamos de pantalla
nflip=!nflip;
GpSurfaceFlip(&gpDraw[nflip]);
}



Funciona bien, va fino, almenos en el emu, pero es que no entiendo el sentido de mi codigo, es decir, lo que hago aki es modificar el buffer 0, ke es el que se ve en la pantalla, luego cambio al buffer 1 y lo pinto y vuevlo a cambiar al 0. No tendria ke estar alguna cosa al reves¿?
Si alguien puede explicarme bien como va el double buffering, o el triple, o lo ke sea, .. porke no lo veo nada claro.



Gracias!!!

Petiso
10/12/2005, 08:15
Pues: Si pintas directamente a la pantalla, provoca efectos raros (parpadeos y demás) en la pantalla (muy molestos).

Para esto, se pinta siempre en un segundo bufer, y una vez has acavado de pintar, se canvian los bufers. El que has pintado, pasa ser el de la pantalla, y el que era de la pantalla, lo utilizas para pintar la siguiente vez.

Ta claro ?

Igualmente tu codigo esta mal, seria:
GpSurfaceFlip(&gpDraw[nflip]);
nflip=!nflip;

O sea: haces el bufer pintado el de la pantalla, y trabajas en la siguiente iteracion con el buffer que no es el de la pantalla.

Bye !

cdrman
10/12/2005, 09:02
Gracias.

Es lo que yo decia, no lo veia claro, el cambio de nflip tenia ke ir al final, ahora lo veo mas claro. muchisimas gracias.