#include #include #include #include SDL_Window *window; SDL_Renderer *render; SDL_Surface *image; SDL_Texture *texture; Sint64 interval; Sint64 nowTick; int framecounter; void my_ending(void) { if (texture != NULL) SDL_DestroyTexture(texture); if (render != NULL) SDL_DestroyRenderer(render); if (window != NULL) SDL_DestroyWindow(window); SDL_Quit(); } void my_startup(void) { if (SDL_Init(SDL_INIT_EVERYTHING) < 0) my_ending(); window = SDL_CreateWindow("SDL2 Window", 100, 100, 640, 480, 0); if (window == NULL) { SDL_Log("Could not create window\n"); my_ending(); } render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (render == NULL) { SDL_Log("Could not create renderer\n"); my_ending(); } // image = SDL_LoadBMP("sample.bmp"); image = IMG_Load("sample.png"); if (image == NULL) { SDL_Log("Could not load image\n"); my_ending(); } texture = SDL_CreateTextureFromSurface(render, image); SDL_FreeSurface(image); } int quits(void) { SDL_Event events; if (SDL_PollEvent(&events)) { switch (events.type) { case SDL_QUIT: return 0; break; case SDL_KEYDOWN: if (events.key.keysym.sym == SDLK_ESCAPE || events.key.keysym.sym == SDLK_q) return 0; break; default: break; } } return 1; } void draw(void) { // clear with background color SDL_SetRenderDrawColor(render, 0, 64, 136, 255); SDL_RenderClear(render); SDL_Rect src, dst; src.x = 0; src.y = 0; src.w = 256; src.h = 256; dst.w = src.w; dst.h = src.h; double pi = 3.14159; for (int i = 0; i < 16; i++) { double x_rad = (framecounter * 3.8 + i * 12) * pi / 180.0; double y_rad = (framecounter * 2.0 + i * 12) * pi / 180.0; int x = (int)(320.0 + 160 * sin(x_rad)); int y = (int)(240.0 + 120 * sin(y_rad)); dst.x = x - dst.w / 2; dst.y = y - dst.h / 2; SDL_RenderCopy(render, texture, &src, &dst); } SDL_RenderPresent(render); } void my_wait_init(void) { interval = (Sint64)SDL_GetPerformanceFrequency() / 60; nowTick = 0; } void my_wait(void) { while (SDL_TRUE) { if (((Sint64)SDL_GetPerformanceCounter() - nowTick) >= interval) { break; } SDL_Delay(0); } nowTick = SDL_GetPerformanceCounter(); } int main(int argc, char *args[]) { my_startup(); my_wait_init(); framecounter = 0; while (quits() != 0) { draw(); my_wait(); framecounter++; } my_ending(); return 0; }