summaryrefslogtreecommitdiff
path: root/softrender.h
blob: e417ab2a10381bb77ccffd6cb192528169db6392 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdint.h>

typedef struct {
    // TODO(kard): define byte order
    uint32_t *pixels;
    uint32_t width;
    uint32_t height;
    uint32_t stride;
} soft_Canvas;

void soft_clear(soft_Canvas c, uint32_t color);
void soft_draw_rect(soft_Canvas c, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t color);

// TODO(kard): prefix stripping

#ifdef SOFTRENDER_IMPLEMENTATION

void soft_clear(soft_Canvas c, uint32_t color) {
    soft_draw_rect(c, 0, 0, c.width - 1, c.height - 1, color);
}

// TODO(kard): probably bounds checking
// TODO(kard): alpha blending maybe
void soft_draw_rect(soft_Canvas c, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t color) {
    uint32_t *row = c.pixels + (y0 * c.stride);

    for (uint32_t y = y0; y <= y1; y++, row += c.stride) {
        for (uint32_t x = x0; x <= x1; x++) {
            row[x] = color;
        }
    }
}

#endif // SOFTRENDER_IMPLEMENTATION