#include<kos.h>
#include<stdio.h>
#include<SDL.h>
#include<SDL_dreamcast.h>
#define NFRAMES 1000
/* Real coords (texture width and height) for hardware scaled. */
#define TXR_X 512
#define TXR_Y 256
/* Screen coords */
#define SCR_X 320
#define SCR_Y 240
static SDL_Surface *screen;
void testme(char *flags)
{
int tick=0;
Uint32 inicio,final;
SDL_FillRect(screen,NULL,-1);
fflush(stdout); SDL_Delay(100);
inicio=SDL_GetTicks();
while(inicio==SDL_GetTicks());
while(tick<NFRAMES)
{
SDL_Rect rect;
rect.x=2;
rect.y=2;
rect.w=SCR_X-4;
rect.h=SCR_Y-4;
SDL_FillRect(screen,&rect,tick);
/* CAUTION DIRECT ACCESS: line pitch no always is width*bytes_per_color
unsigned short *buf=screen->pixels;
int i,j;
for(i=0;i<SCR_Y;i++)
for(j=0;j<SCR_X;j++)
buf[j+i*(screen->pitch>>1)]=tick+i;
*/
SDL_Flip(screen);
tick++;
}
final=SDL_GetTicks()-1;
printf(" - '%s' -> Ticks=%i, FPS=%i\n",flags,final-inicio, (NFRAMES*1000)/(final-inicio));
}
/* HARDWARE SCALED: ONLY FOR TEXTURED DRIVER !
NO FULLSCREEN
IF FULLSCREEN + TEXTURED_DRIVER = DMA_DRIVER */
void hardware_scaled_test()
{
screen=SDL_SetVideoMode(TXR_X,TXR_Y,16,SDL_HWSURFACE);
SDL_DC_SetWindow(SCR_X,SCR_Y);
testme("SDL_HWSURFACE");
}
/* HARDWARE SCALED AND DOUBLEBUF: ONLY FOR TEXTURED DRIVER ! */
void hardware_scaled_double_buffer_test()
{
screen=SDL_SetVideoMode(TXR_X,TXR_Y,16,SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_DC_SetWindow(SCR_X,SCR_Y);
testme("SDL_HWSURFACE|SDL_DOUBLEBUF");
}
/* DOUBLE BUFFER : FAST !!!! */
void double_buffer_test()
{
screen=SDL_SetVideoMode(SCR_X,SCR_Y,16,SDL_FULLSCREEN|SDL_DOUBLEBUF|SDL_HWSURFACE);
testme("SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN");
}
/* NORMAL */
void normal_test()
{
screen=SDL_SetVideoMode(SCR_X,SCR_Y,16,SDL_FULLSCREEN|SDL_HWSURFACE);
testme("SDL_HWSURFACE|SDL_FULLSCREEN");
}
int main()
{
puts("\n\n * SDL-DC : Video drivers test.");
SDL_DC_ShowAskHz(SDL_FALSE);
SDL_DC_Default60Hz(SDL_FALSE);
SDL_DC_VerticalWait(SDL_FALSE);
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) >= 0)
{
puts("\n-------------------\n| TEXTURED DRIVER |\n-------------------");
SDL_DC_SetVideoDriver(SDL_DC_TEXTURED_VIDEO);
hardware_scaled_test();
hardware_scaled_double_buffer_test();
puts("\n-----------------\n| DIRECT DRIVER |\n-----------------");
SDL_DC_SetVideoDriver(SDL_DC_DIRECT_VIDEO);
double_buffer_test();
normal_test();
puts("\n--------------\n| DMA DRIVER |\n--------------");
SDL_DC_SetVideoDriver(SDL_DC_DMA_VIDEO);
double_buffer_test();
normal_test();
SDL_Quit();
}
return 0;
}