#include #include extern void keydownHandler(SDL_Scancode); /* Predefined Screen Size */ #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 static float sdlUpdate = 33.f; /* Video Memory */ static uint32_t videoMemory[SCREEN_WIDTH * SCREEN_HEIGHT]; /* SDL static stuff */ static SDL_Window *window; static SDL_Renderer *renderer; static SDL_Texture *texture; static SDL_Cursor *cursor; static SDL_Event event; /* Function to init the SDL Window and dependencies */ void initWindow(){ if (SDL_Init(SDL_INIT_VIDEO)){ printf("Could not init SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* When we exit(CODE), then SDL_Quit is ran */ atexit(SDL_Quit); /* Init Window */ window = SDL_CreateWindow("Program", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, 0); if (window == NULL){ printf("Fatal! Could not create SDL Window: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Init Renderer */ renderer = SDL_CreateRenderer(window, -1, 2); if (renderer == NULL){ printf("Fatal! Could not create SDL Renderer: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Init Texture */ texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, SCREEN_WIDTH, SCREEN_HEIGHT); if (texture == NULL){ printf("Fatal! Could not create SDL Texture: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } if (SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_NONE)){ printf("Fatal! Could not set SDL blend mode: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Init the Cursor */ cursor = SDL_CreateSystemCursor(0); if (cursor == NULL){ printf("Fatal! Could not create SDL cursor: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } SDL_SetCursor(cursor); } /* Clear the framebuffer with a color */ void clearScreen(uint32_t pixels[], uint32_t color){ for (uint32_t i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT; i++) pixels[i] = color; } /* Get next events and do sm with it */ void pollEvents(){ while (SDL_PollEvent(&event)){ switch(event.type){ /* If Quit, we quit the Application lul */ case SDL_QUIT: printf("Quit at users request\n"); exit(EXIT_SUCCESS); break; /* Fetch pressed Keys */ case SDL_KEYDOWN: switch (event.key.keysym.scancode){ case SDL_SCANCODE_ESCAPE: printf("Quit at users request\n"); exit(0); break; default: keydownHandler(event.key.keysym.scancode); break; } break; default: break; } } } /* Update SDL Texture and Renderer with framebuffer */ void updateSDL(){ if (SDL_UpdateTexture(texture, NULL, videoMemory, (sizeof(uint32_t) * SCREEN_WIDTH))) { fprintf(stderr, "Could not update SDL texture: %s.\n", SDL_GetError()); exit(EXIT_FAILURE); } if (SDL_RenderCopy(renderer, texture, NULL, NULL)) { fprintf(stderr, "Could not display SDL texture: %s.\n", SDL_GetError()); exit(EXIT_FAILURE); } }