#include #include #include #include #include const int WINDOW_WIDTH = 1024; const int WINDOW_HEIGHT = 768; const float scale_x = (float)WINDOW_WIDTH/(float)0xfff; const float scale_y = (float)WINDOW_HEIGHT/(float)0x7ff; int main( int argc, char **argv ) { SDL_Init( SDL_INIT_EVERYTHING ); atexit(SDL_Quit); SDL_Window *window = SDL_CreateWindow( "Frames", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN ); SDL_Renderer *renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED); SDL_RenderSetLogicalSize(renderer, WINDOW_WIDTH, WINDOW_HEIGHT); SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); FPSmanager fpsManager; SDL_initFramerate( &fpsManager ); SDL_setFramerate( &fpsManager, 60); bool bRunning = true; int frameCount = 0; Uint32 time = SDL_GetTicks(); int squares = 1; int pos, color; uint8_t w, h, r, g, b, a; uint16_t x, y; SDL_Rect rect; while ( bRunning ) { srand(0); SDL_Event ev; while ( SDL_PollEvent( & ev )) // Check event queue. { switch( ev.type ) { case SDL_QUIT: // when window is closed bRunning = false; break; case SDL_KEYDOWN: switch ( ev.key.keysym.sym ) { case SDLK_1: squares = 1; break; case SDLK_UP: squares *= 2; break; case SDLK_DOWN: squares /= 2; break; case SDLK_q: bRunning = false; break; } break; } } SDL_SetRenderDrawColor (renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear (renderer); for(int i = 0; i < squares; i++) { color = rand(); r = (color) & 0xff; g = (color >> 8) & 0xff; b = (color >> 16) & 0xff; a = (color >> 24) & 0xff; SDL_SetRenderDrawColor (renderer, r, g, b, a); pos = rand(); rect.x = (((pos) & 0x7ff) << 1) * scale_x; // 11 bits * 2 rect.y = (((pos >> 11) & 0x3ff) << 1) * scale_y; // 10 bits * 2 rect.w = ((pos >> 21) & 0x1f); // 5 bits rect.h = ((pos >> 27) & 0x1f); // 5 bits SDL_RenderFillRect(renderer, &rect); } if ( SDL_GetTicks() - time > 1000 ) { fprintf(stdout, "FPS %8d - Rects %8d\r", frameCount, squares); fflush(stdout); frameCount = 0; time = SDL_GetTicks(); } else { ++frameCount; } SDL_RenderPresent(renderer); SDL_framerateDelay(&fpsManager); } SDL_DestroyRenderer(renderer); renderer = NULL; SDL_DestroyWindow(window); window = NULL; return 0; }