70 lines
1.8 KiB
Markdown
70 lines
1.8 KiB
Markdown
# Dangerzone
|
|
|
|
## A tiny game engine / software renderer using SDL for framebuffer visualization.
|
|
|
|
#### Features
|
|
|
|
1. Put Pixel - Lets you color one given pixel in the framebuffer.
|
|
|
|
```c
|
|
void put_pixel(unsigned int x, unsigned int y, uint32_t color);
|
|
```
|
|
|
|
2. Clear Framebuffer - Lets you fill the entire framebuffer with one color.
|
|
|
|
```c
|
|
void clear_framebuffer(uint32_t color);
|
|
```
|
|
|
|
#### Usage
|
|
|
|
The main function of a program that uses this engine should look something like this:
|
|
|
|
```c
|
|
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:
|
|
|
|
```c
|
|
...
|
|
|
|
// 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 `include/engine.h` and change them there on the `#define` lines. |