#21056 - bogston - Sat May 22, 2004 3:16 pm
I'm learning GBA programming. This is a modification of a double buffer example. I don't believe it's works correctly. Also, I don't believe the two original examples worked correctly either. The problem is that I see the screen being painted. The examples are from gbajunkie and simpdemo. Using VisualBoyAdvance, will I still see the screen being painted using double buffer?
#include <gba.h>
u16 *bg_palette_mem = BG_PALETTE_MEM;
u16 *video_buffer = BACK_BUFFER;
void swap_buffer(void)
{
VSYNC();
if(REG_DISPCNT & DOUBLE_BUFFER)
{
REG_DISPCNT &= ~DOUBLE_BUFFER;
video_buffer = (u16 *) BACK_BUFFER;
}
else
{
REG_DISPCNT |= DOUBLE_BUFFER;
video_buffer = (u16 *) FRONT_BUFFER;
}
}
int main()
{
int i;
SET_MODE(MODE_4 | BG2_ENABLE);
*bg_palette_mem++ = RGB(31, 31, 31); // white
*bg_palette_mem++ = RGB(0, 31, 0); // green
*bg_palette_mem++ = RGB(31, 0, 0); // red
*bg_palette_mem++ = RGB(0, 31, 31); // cyan
// back buffer
i = 38400;
while(i--)
*video_buffer++ = 0x0303;
swap_buffer();
// front buffer
i = 38400;
while(i--)
*video_buffer++ = 0x0202;
swap_buffer();
}
#include <gba.h>
u16 *bg_palette_mem = BG_PALETTE_MEM;
u16 *video_buffer = BACK_BUFFER;
void swap_buffer(void)
{
VSYNC();
if(REG_DISPCNT & DOUBLE_BUFFER)
{
REG_DISPCNT &= ~DOUBLE_BUFFER;
video_buffer = (u16 *) BACK_BUFFER;
}
else
{
REG_DISPCNT |= DOUBLE_BUFFER;
video_buffer = (u16 *) FRONT_BUFFER;
}
}
int main()
{
int i;
SET_MODE(MODE_4 | BG2_ENABLE);
*bg_palette_mem++ = RGB(31, 31, 31); // white
*bg_palette_mem++ = RGB(0, 31, 0); // green
*bg_palette_mem++ = RGB(31, 0, 0); // red
*bg_palette_mem++ = RGB(0, 31, 31); // cyan
// back buffer
i = 38400;
while(i--)
*video_buffer++ = 0x0303;
swap_buffer();
// front buffer
i = 38400;
while(i--)
*video_buffer++ = 0x0202;
swap_buffer();
}