10 int win_width, win_height;
11 int max_xscroll, max_yscroll;
15 unsigned int img[IMG_W * IMG_H];
17 unsigned int start_tm;
18 unsigned int num_frames;
22 SDL_Renderer *sdlrend;
26 int main(int argc, char **argv)
28 SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
30 if(SDL_CreateWindowAndRenderer(800, 600, 0, &win, &sdlrend) == -1) {
31 fprintf(stderr, "failed to set video mode\n");
34 SDL_SetWindowTitle(win, "SDL pixel drawing benchmark");
36 printf("SDL2 video driver: %s\n", SDL_GetCurrentVideoDriver());
42 start_tm = SDL_GetTicks();
45 while(SDL_PollEvent(&ev)) {
51 if(ev.key.keysym.sym == 27) goto done;
71 int i, j, xor, r, g, b;
75 for(i=0; i<IMG_H; i++) {
76 for(j=0; j<IMG_W; j++) {
78 r = (xor >> 1) & 0xff;
80 b = (xor << 1) & 0xff;
81 *ptr++ = b | (g << 8) | (r << 16);
88 max_xscroll = IMG_W - win_width;
89 max_yscroll = IMG_H - win_height;
91 if(!(sdltex = SDL_CreateTexture(sdlrend, SDL_PIXELFORMAT_XRGB8888,
92 SDL_TEXTUREACCESS_STREAMING, win_width, win_height))) {
93 fprintf(stderr, "failed to create SDL texture\n");
103 unsigned int tm = SDL_GetTicks() - start_tm;
105 float t = tm / 256.0f;
106 int xoffs = (int)((sin(t) * 0.5f + 0.5f) * max_xscroll);
107 int yoffs = (int)((cos(t) * 0.5f + 0.5f) * max_yscroll);
108 unsigned int *start = img + yoffs * IMG_W + xoffs;
110 SDL_UpdateTexture(sdltex, 0, start, IMG_W * 4);
111 SDL_RenderCopy(sdlrend, sdltex, 0, 0);
112 SDL_RenderPresent(sdlrend);
116 interv = tm - start_tm;
118 unsigned int fps = 100000 * num_frames / interv;
119 printf("SDL2: %.2f fps\n", fps / 100.0f);