Compilation with TCC, The Tiny C Compiler:
tcc test_sdl2.c -lSDL2
Also see these video tutorials:
#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdbool.h> | |
#include <time.h> | |
#include <string.h> | |
#include <SDL2/SDL.h> | |
// Normally SDL2 will redefine the main entry point of the program for Windows applications | |
// this doesn't seem to play nice with TCC, so we just undefine the redefinition | |
#ifdef __TINYC__ | |
#undef main | |
#endif | |
// Utility macros | |
#define CHECK_ERROR(test, message) \ | |
do { \ | |
if((test)) { \ | |
fprintf(stderr, "%s\n", (message)); \ | |
exit(1); \ | |
} \ | |
} while(0) | |
// Get a random number from 0 to 255 | |
int randInt(int rmin, int rmax) { | |
return rand() % rmax + rmin; | |
} | |
// Window dimensions | |
static const int width = 800; | |
static const int height = 600; | |
int main(int argc, char **argv) { | |
// Initialize the random number generator | |
srand(time(NULL)); | |
// Initialize SDL | |
CHECK_ERROR(SDL_Init(SDL_INIT_VIDEO) != 0, SDL_GetError()); | |
// Create an SDL window | |
SDL_Window *window = SDL_CreateWindow("Hello, SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL); | |
CHECK_ERROR(window == NULL, SDL_GetError()); | |
// Create a renderer (accelerated and in sync with the display refresh rate) | |
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); | |
CHECK_ERROR(renderer == NULL, SDL_GetError()); | |
// Initial renderer color | |
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); | |
bool running = true; | |
SDL_Event event; | |
while(running) { | |
// Process events | |
while(SDL_PollEvent(&event)) { | |
if(event.type == SDL_QUIT) { | |
running = false; | |
} else if(event.type == SDL_KEYDOWN) { | |
const char *key = SDL_GetKeyName(event.key.keysym.sym); | |
if(strcmp(key, "C") == 0) { | |
SDL_SetRenderDrawColor(renderer, randInt(0, 255), randInt(0, 255), randInt(0, 255), 255); | |
} else if(strcmp(key, "Q") == 0) { | |
running = false; | |
} | |
} | |
} | |
// Clear screen | |
SDL_RenderClear(renderer); | |
// Draw | |
// Show what was drawn | |
SDL_RenderPresent(renderer); | |
} | |
// Release resources | |
SDL_DestroyRenderer(renderer); | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return 0; | |
} | |
the tcc -impdef command doenst work for me,it says that there is no such thing as '-impdef',im using the latest tcc