cg-from-scratch/include/window/window.h

53 lines
1.2 KiB
C

#ifndef WINDOW_H
#define WINDOW_H
#include "aliases.h"
#include "mem_arena.h"
#include "vector/vec.h"
#include <SDL2/SDL_video.h>
#include <stdbool.h>
typedef struct {
u8 a;
u8 b;
u8 g;
u8 r;
} rgba_t;
typedef struct {
union {
rgba_t rgba;
u32 colour;
};
} colour_t;
typedef struct {
u32 width;
u32 height;
u32 half_width;
u32 half_height;
const char *title;
SDL_Window *window;
SDL_Surface *front_buffer;
SDL_Surface *back_buffer;
f32 *z_buffer;
} window_t;
bool init_window(Arena *arena, window_t *wnd, u32 width, u32 height,
const char *title);
void close_window(window_t *wnd);
void clear_window(window_t *wnd, colour_t colour);
void set_pixel(window_t *wnd, i32 x, i32 y, colour_t colour);
void set_z_pixel(window_t *wnd, i32 x, i32 y, f32 value);
f32 get_z_pixel(const window_t *wnd, i32 x, i32 y);
void swap_buffers(window_t *wnd);
vec3f_t window_to_viewport(const window_t *wnd, i32 x, i32 y, vec3f_t viewport);
vec2i_t viewport_to_window(const window_t *wnd, f32 x, f32 y, vec3f_t viewport);
colour_t colour_add_colour(colour_t a, colour_t b);
colour_t colour_mul(colour_t colour, f32 scalar);
#endif // !WINDOW_H