From 65382a166340f454b2de2292f27dca1b910bbc28 Mon Sep 17 00:00:00 2001 From: odweta Date: Sun, 4 Oct 2026 20:43:45 +0200 Subject: [PATCH] add README.md --- README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c761557 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# Dangerzone + +## A tiny game engine / software renderer using SDL for framebuffer visualization + +#### Features + +1. Put Pixel + +``` +void put_pixel(unsigned int x, unsigned int y, uint32_t color); +``` + +- Lets you color one given pixel in the framebuffer. + +2. Clear Framebuffer + +``` +void clear_framebuffer(uint32_t color); +``` + +- Lets you fill the entire framebuffer with one color. + +#### Usage + +The main function of a program that uses this engine should look something like this: + +``` +int main() { + // initialize the engine + if (engine_init( + client_poll_event, + client_update_framebuffer + )) { + // start the main game loop + engine_start(); + // once the engine finishes, end gracefully + engine_stop(); + return 0; + } else { + return 1; + } +} +``` + +The `client_poll_event()` and `client_update_framebuffer()` are two special functions that let you poll events and update the framebuffer respectively. (Shocking, I know.) You are supposed to define them yourself and pass them as function pointers to `engine_init()`. + +Polling events allows you to handle mouse clicks, keyboard key presses, quitting the program and so on. + +Updating the framebuffer means changing color values in the respective struct and thus getting an image on the screen. + +An excerpt from the main game loop is below: + +``` +... + +// main game loop +while(game_state->is_running) { + uint64_t start = SDL_GetPerformanceCounter(); + + // poll events + while (SDL_PollEvent(&game_state->event)) { + internal_state->engine_poll_events(); + } + + // call the user-defined framebuffer manipulation function + internal_state->engine_update_framebuffer(); + + ... +} + +... +``` + +If you want to modify the values for things like the window size or window name, (for now) go into `src/engine/engine.h` and change them there on the `#define` lines. \ No newline at end of file