Mercurial > sdl-ios-xcode
annotate test/testfill.c @ 4525:3abf0b9cafad
pelya 2010-07-12 03:53:48 PDT
In function GLES_RenderCopy() in SDL_renderer_gles.c:819 there is one memcpy()
that can be avoided if we're updating whole texture.
Because of that the SDL 1.3 in compatibility mode is working even slower than
software rendering in SDL 1.2.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 14 Jul 2010 07:31:35 -0700 |
parents | 5ea08f1c29d0 |
children |
rev | line source |
---|---|
3576
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* Simple program: Fill the screen with colors as fast as possible */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 #include <stdlib.h> |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 #include <stdio.h> |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 #include <string.h> |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 #include <time.h> |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 #include "SDL.h" |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 static void |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 quit(int rc) |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 SDL_Quit(); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 exit(rc); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 int |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 main(int argc, char *argv[]) |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 SDL_Surface *screen; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 int width, height; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 Uint8 video_bpp; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 Uint32 videoflags; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 Uint32 colors[3]; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 int i, done; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 SDL_Event event; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 Uint32 then, now, frames; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 /* Initialize SDL */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 if (SDL_Init(SDL_INIT_VIDEO) < 0) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 return (1); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 width = 640; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 height = 480; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 video_bpp = 8; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 videoflags = 0; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 while (argc > 1) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 --argc; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 if (strcmp(argv[argc - 1], "-width") == 0) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 width = atoi(argv[argc]); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 --argc; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 } else if (strcmp(argv[argc - 1], "-height") == 0) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 height = atoi(argv[argc]); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 --argc; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 } else if (strcmp(argv[argc - 1], "-bpp") == 0) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 video_bpp = atoi(argv[argc]); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 --argc; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 } else if (strcmp(argv[argc], "-fullscreen") == 0) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 videoflags ^= SDL_FULLSCREEN; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 } else { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 fprintf(stderr, |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 "Usage: %s [-width N] [-height N] [-bpp N] [-fullscreen]\n", |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 argv[0]); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 quit(1); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 /* Set video mode */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 screen = SDL_SetVideoMode(width, height, video_bpp, 0); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 if (!screen) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 fprintf(stderr, "Couldn't set %dx%d video mode: %s\n", |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 width, height, SDL_GetError()); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 quit(2); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 /* Get the colors */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 colors[0] = SDL_MapRGB(screen->format, 0xFF, 0x00, 0x00); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 colors[1] = SDL_MapRGB(screen->format, 0x00, 0xFF, 0x00); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 colors[2] = SDL_MapRGB(screen->format, 0x00, 0x00, 0xFF); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 /* Loop, filling and waiting for a keystroke */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 frames = 0; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 then = SDL_GetTicks(); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 done = 0; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 while (!done) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 /* Check for events */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 ++frames; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 while (SDL_PollEvent(&event)) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 switch (event.type) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 case SDL_MOUSEBUTTONDOWN: |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 SDL_WarpMouse(screen->w / 2, screen->h / 2); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 break; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 case SDL_KEYDOWN: |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 /* Any keypress quits the app... */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 case SDL_QUIT: |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 done = 1; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 break; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 default: |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 break; |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 SDL_FillRect(screen, NULL, colors[frames%3]); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 SDL_Flip(screen); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 /* Print out some timing information */ |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 now = SDL_GetTicks(); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 if (now > then) { |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 double fps = ((double) frames * 1000) / (now - then); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 printf("%2.2f frames per second\n", fps); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 } |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 SDL_Quit(); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 return (0); |
5ea08f1c29d0
Added testfill to test raw fill performance
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 } |