Last active
May 30, 2022 10:58
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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