/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ static void quit(int rc) { if (sprites) { SDL_free(sprites); } if (positions) { SDL_free(positions); } if (velocities) { SDL_free(velocities); } CommonQuit(state); exit(rc); }
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ static void quit(int rc) { int i; if (context != NULL) { for (i = 0; i < state->num_windows; i++) { if (context[i]) { SDL_GL_DeleteContext(context[i]); } } SDL_free(context); } CommonQuit(state); exit(rc); }
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ static void quit(int rc) { CommonQuit(state); exit(rc); }
/* ../test/common.h */ static void dao__CommonQuit( DaoProcess *_proc, DaoValue *_p[], int _n ) { CommonState* state = (CommonState*) DaoValue_TryCastCdata( _p[0], dao_type_CommonState ); CommonQuit( state ); }
int main(int argc, char *argv[]) { int mouse_begin_x = -1, mouse_begin_y = -1; int i, done; SDL_Event event; Uint32 then, now, frames; /* Initialize parameters */ num_objects = NUM_OBJECTS; /* Initialize test framework */ state = CommonCreateState(argv, SDL_INIT_VIDEO); if (!state) { return 1; } for (i = 1; i < argc;) { int consumed; consumed = CommonArg(state, i); if (consumed == 0) { consumed = -1; if (SDL_strcasecmp(argv[i], "--blend") == 0) { if (argv[i + 1]) { if (SDL_strcasecmp(argv[i + 1], "none") == 0) { blendMode = SDL_BLENDMODE_NONE; consumed = 2; } else if (SDL_strcasecmp(argv[i + 1], "mask") == 0) { blendMode = SDL_BLENDMODE_MASK; consumed = 2; } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { blendMode = SDL_BLENDMODE_BLEND; consumed = 2; } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { blendMode = SDL_BLENDMODE_ADD; consumed = 2; } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { blendMode = SDL_BLENDMODE_MOD; consumed = 2; } } } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { cycle_color = SDL_TRUE; consumed = 1; } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { cycle_alpha = SDL_TRUE; consumed = 1; } else if (SDL_isdigit(*argv[i])) { num_objects = SDL_atoi(argv[i]); consumed = 1; } } if (consumed < 0) { fprintf(stderr, "Usage: %s %s [--blend none|mask|blend|add|mod] [--cyclecolor] [--cyclealpha]\n", argv[0], CommonUsage(state)); return 1; } i += consumed; } if (!CommonInit(state)) { return 2; } /* Create the windows and initialize the renderers */ for (i = 0; i < state->num_windows; ++i) { SDL_SelectRenderer(state->windows[i]); SDL_SetRenderDrawColor(0xA0, 0xA0, 0xA0, 0xFF); SDL_RenderClear(); } srand(time(NULL)); /* Main render loop */ frames = 0; then = SDL_GetTicks(); done = 0; while (!done) { /* Check for events */ ++frames; while (SDL_PollEvent(&event)) { CommonEvent(state, &event, &done); switch (event.type) { case SDL_MOUSEBUTTONDOWN: if (event.button.which == 0) { mouse_begin_x = event.button.x; mouse_begin_y = event.button.y; } break; case SDL_MOUSEBUTTONUP: if (event.button.which == 0) { if (event.button.button == 3) add_line(mouse_begin_x, mouse_begin_y, event.button.x, event.button.y); if (event.button.button == 1) add_rect(mouse_begin_x, mouse_begin_y, event.button.x, event.button.y); } break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case 'l': if (event.key.keysym.mod & KMOD_SHIFT) num_lines = 0; else add_line(rand() % 640, rand() % 480, rand() % 640, rand() % 480); break; case 'r': if (event.key.keysym.mod & KMOD_SHIFT) num_rects = 0; else add_rect(rand() % 640, rand() % 480, rand() % 640, rand() % 480); break; } break; case SDL_WINDOWEVENT: switch (event.window.event) { case SDL_WINDOWEVENT_EXPOSED: SDL_SelectRenderer(SDL_GetWindowFromID(event.window.windowID)); SDL_SetRenderDrawColor(0xA0, 0xA0, 0xA0, 0xFF); SDL_RenderClear(); break; } break; default: break; } } for (i = 0; i < state->num_windows; ++i) { SDL_SelectRenderer(state->windows[i]); SDL_SetRenderDrawColor(0xA0, 0xA0, 0xA0, 0xFF); SDL_RenderClear(); DrawRects(state->windows[i]); DrawPoints(state->windows[i]); DrawRectRectIntersections(state->windows[i]); DrawLines(state->windows[i]); DrawRectLineIntersections(state->windows[i]); SDL_RenderPresent(); } } CommonQuit(state); /* Print out some timing information */ now = SDL_GetTicks(); if (now > then) { double fps = ((double) frames * 1000) / (now - then); printf("%2.2f frames per second\n", fps); } return 0; }