commit 1fe344817e7589e5a34cbbb0c8a588b84b4a112d Author: odweta Date: Sun Oct 4 10:11:22 2026 +0200 ininial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fd105d5 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +CC := gcc +LIBS := `pkg-config --libs sdl2` +INC := `pkg-config --cflags sdl2` +SRC := src/main.c +OUT := build/main + +build: $(SRC) + $(CC) -o $(OUT) $< $(INC) $(LIBS) + +run: build + $(OUT) + +.PHONY: build run \ No newline at end of file diff --git a/build/main b/build/main new file mode 100755 index 0000000..14b1fc6 Binary files /dev/null and b/build/main differ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..e0845de --- /dev/null +++ b/src/main.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include +#include +#include + +#define WIDTH 320 +#define HEIGHT 200 + +uint32_t framebuffer[WIDTH * HEIGHT]; + +void put_pixel(unsigned int x, unsigned int y, uint32_t color) { + framebuffer[WIDTH * y + x] = color; +} + +int main() { + if (SDL_Init(SDL_INIT_VIDEO) != 0) { + fprintf(stderr, "SDL_Init failed! %s\n", SDL_GetError()); + return EXIT_FAILURE; + } + + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *texture; + SDL_Event event; + bool is_running = true; + + window = SDL_CreateWindow( + "SDL Framebuffer", 0, 0, + WIDTH, HEIGHT, 0 + ); + if (window == NULL) { + fprintf(stderr, "SDL_CreateWindow failed! %s\n", SDL_GetError()); + SDL_Quit(); + return EXIT_FAILURE; + } + + renderer = SDL_CreateRenderer(window, 0, 0); + if (renderer == NULL) { + fprintf(stderr, "SDL_CreateRenderer failed! %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + SDL_Quit(); + return EXIT_FAILURE; + } + + texture = SDL_CreateTexture( + renderer, SDL_PIXELFORMAT_XRGB8888, + SDL_TEXTUREACCESS_STREAMING, + WIDTH, HEIGHT + ); + if (texture == NULL) { + fprintf(stderr, "SDL_CreateTexture failed! %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + SDL_DestroyRenderer(renderer); + SDL_Quit(); + return EXIT_FAILURE; + } + + for (int i = 0; i < 20; i++) { + for (int j = 0; j < 20; j++) { + put_pixel(i, j, 0x00FF00); + } + } + + while (is_running) { + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT) { + is_running = false; + } + } + + SDL_UpdateTexture(texture, NULL, framebuffer, WIDTH * sizeof(uint32_t)); + + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); + } + + SDL_DestroyTexture(texture); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + + SDL_Quit(); + + return EXIT_SUCCESS; +} \ No newline at end of file