117 lines
2.7 KiB
C
117 lines
2.7 KiB
C
#ifndef GPU_H
|
|
#define GPU_H
|
|
|
|
struct sys_window;
|
|
|
|
#define GPU_TEXTURE_MAX_WIDTH 16384
|
|
#define GPU_TEXTURE_MAX_HEIGHT 16384
|
|
|
|
/* ========================== *
|
|
* Startup
|
|
* ========================== */
|
|
|
|
struct gpu_startup_receipt { i32 _; };
|
|
struct gpu_startup_receipt gpu_startup(struct sys_window *window);
|
|
|
|
/* ========================== *
|
|
* Texture
|
|
* ========================== */
|
|
|
|
enum gpu_texture_format {
|
|
GPU_TEXTURE_FORMAT_NONE,
|
|
GPU_TEXTURE_FORMAT_R8G8B8A8_UNORM,
|
|
GPU_TEXTURE_FORMAT_R8G8B8A8_UNORM_SRGB,
|
|
|
|
NUM_GPU_TEXTURE_FORMATS
|
|
};
|
|
|
|
enum gpu_texture_flag {
|
|
GPU_TEXTURE_FLAG_NONE = (0),
|
|
GPU_TEXTURE_FLAG_TARGETABLE = (1 << 0)
|
|
};
|
|
|
|
struct gpu_texture {
|
|
u64 handle;
|
|
};
|
|
|
|
struct gpu_texture gpu_texture_alloc(enum gpu_texture_format format, u32 flags, struct v2i32 size, void *initial_data);
|
|
|
|
void gpu_texture_release(struct gpu_texture t);
|
|
|
|
void gpu_texture_clear(struct gpu_texture target_texture, u32 clear_color);
|
|
|
|
struct v2i32 gpu_texture_get_size(struct gpu_texture texture);
|
|
|
|
/* ========================== *
|
|
* Backbuffer
|
|
* ========================== */
|
|
|
|
/* Returns a texture representing the internal backbuffer. Lifetime is managed by gpu layer. */
|
|
struct gpu_texture gpu_recreate_backbuffer(struct v2i32 size);
|
|
|
|
/* Presents the backbuffer to the screen */
|
|
void gpu_swap_backbuffer(i32 vsync);
|
|
|
|
/* ========================== *
|
|
* Cmd buffer
|
|
* ========================== */
|
|
|
|
struct gpu_indices {
|
|
u16 count;
|
|
u16 *indices;
|
|
};
|
|
|
|
enum gpu_cmd_kind {
|
|
GPU_CMD_KIND_NONE,
|
|
GPU_CMD_KIND_DRAW_MESH,
|
|
GPU_CMD_KIND_DRAW_TEXTURE,
|
|
GPU_CMD_KIND_DRAW_GRID,
|
|
|
|
NU
|
|
};
|
|
|
|
struct gpu_cmd_params {
|
|
enum gpu_cmd_kind kind;
|
|
union {
|
|
struct {
|
|
struct v2_array vertices;
|
|
struct gpu_indices indices;
|
|
u32 color;
|
|
} mesh;
|
|
struct {
|
|
struct xform xf;
|
|
struct sprite_tag sprite;
|
|
struct gpu_texture texture;
|
|
struct clip_rect clip;
|
|
u32 tint;
|
|
} texture;
|
|
struct {
|
|
struct xform xf;
|
|
f32 line_thickness;
|
|
f32 line_spacing;
|
|
struct v2 offset;
|
|
u32 bg0_color;
|
|
u32 bg1_color;
|
|
u32 line_color;
|
|
u32 x_color;
|
|
u32 y_color;
|
|
} grid;
|
|
};
|
|
};
|
|
|
|
struct gpu_cmd_store {
|
|
u64 handle;
|
|
};
|
|
|
|
struct gpu_cmd_store gpu_cmd_store_alloc(void);
|
|
|
|
void gpu_cmd_store_release(struct gpu_cmd_store gpu_cmd_store);
|
|
|
|
void gpu_push_cmd(struct gpu_cmd_store gpu_cmd_store, struct gpu_cmd_params params);
|
|
|
|
void gpu_submit_cmds(struct gpu_cmd_store gpu_cmd_store);
|
|
|
|
void gpu_run_cmds(struct gpu_cmd_store gpu_cmd_store, struct gpu_texture target, struct xform view, struct rect viewport);
|
|
|
|
#endif
|