Skip to content

Instantly share code, notes, and snippets.

@8dcc
Last active May 30, 2022 10:58
Show Gist options
  • Save 8dcc/2b3ddbf950d26401a41dce95b019416b to your computer and use it in GitHub Desktop.
Save 8dcc/2b3ddbf950d26401a41dce95b019416b to your computer and use it in GitHub Desktop.
Draw a window example in C. Tested in arch with dwm and sdl2.
#!/bin/bash
# Check if sdl2 is installed
if [[ $(command -v sdl2-config) == "" ]]; then
echo "Cant' find sdl2. Exiting..."
exit 1;
fi
SDL_FLAGS=$(sdl2-config --cflags --libs)
if [[ $1 == "" ]]; then
echo "No arguments. Please enter a file. Exiting..."
exit 1;
fi
gcc -o output.o $1 $SDL_FLAGS
if [[ $2 == "comp" ]]; then
echo "Compiled! Running..."
./output.o
fi
#include <stdio.h>
#include "SDL.h"
#define WINDOW_W 300
#define WINDOW_H 300
#define RECT_SIZE 5
#define BACKGROUND_COLOR 20 // Will be used as rgb. Yes, only gray because I like it that way.
#define FPS 60
#define DELAY 0 // Add a custom delay in ms BETWEEN FRAMES
int main(int argc, char* argv[]) {
int grid[WINDOW_H/RECT_SIZE][WINDOW_W/RECT_SIZE];
// Clear the array
for (int y = 0; y < WINDOW_H/RECT_SIZE; y++) {
for (int x = 0; x < WINDOW_W/RECT_SIZE; x++) {
grid[y][x] = 0;
}
}
// Start SDL
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
SDL_Log("Unable to start: %s\n", SDL_GetError());
return 1;
}
printf("SLD started!\n");
// Create window
SDL_Window* fuckwindows = SDL_CreateWindow("I am a test!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_W, WINDOW_H, 0); // Don't know the meaning of the 0
if (!fuckwindows) {
printf("Error creating a window: %s\n", SDL_GetError());
SDL_Quit();
return 1;
}
printf("Window created!\n");
// Create renderer
Uint32 render_flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC;
SDL_Renderer* fuckrenderers = SDL_CreateRenderer(fuckwindows, -1, render_flags);
if (!fuckrenderers) {
printf("Error creating a renderer: %s\n", SDL_GetError());
SDL_DestroyWindow(fuckwindows);
SDL_Quit();
return 1;
}
printf("Renderer created!\n");
// Main loop
int running = 0, esc_pressed = 1;
SDL_Event fuckevents; // Create an event for the keys and shit
while (running == 0) {
// Events
while (SDL_PollEvent(&fuckevents)) {
switch (fuckevents.type) {
// Window is closed?
case SDL_QUIT:
running = 1;
break;
case SDL_KEYDOWN:
// Check the pressed key
switch (fuckevents.key.keysym.scancode) {
case SDL_SCANCODE_ESCAPE:
esc_pressed = 0;
printf("Esc key pressed!\n");
break;
default:
break;
}
break;
case SDL_KEYUP:
// Check the released key
switch (fuckevents.key.keysym.scancode) {
case SDL_SCANCODE_ESCAPE:
printf("Esc key released!\n");
esc_pressed = 1;
break;
default:
break;
}
break;
default:
break;
}
}
if (esc_pressed == 0) {
running = 1; // Exit with esc
}
// Clear window
SDL_SetRenderDrawColor(fuckrenderers, BACKGROUND_COLOR, BACKGROUND_COLOR, BACKGROUND_COLOR, 255);
SDL_RenderClear(fuckrenderers);
// Send to window
SDL_RenderPresent(fuckrenderers);
SDL_Delay(1000/FPS+DELAY); // Divide 1000ms to the frames in one seccond to know the wait time + delay
}
// End of the program
printf("Reached end of the program!\n");
SDL_DestroyRenderer(fuckrenderers);
SDL_DestroyWindow(fuckwindows);
SDL_Quit();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment