mr4th/src/render/render_abs.h

94 lines
2.2 KiB
C

/* date = July 11th 2022 1:57 pm */
#ifndef RENDER_ABS_H
#define RENDER_ABS_H
// NOTE(allen): Defines the backend facing part
// of the render layer. A render implementor must
// implement these functions and only observes
// these types.
//
// These details are *NOT* hidden from the user.
// The user must also see this part of the API.
/* TODO(allen):
**
** RESEARCH
** [ ] Anti-aliasing for rotated quads
** [ ] Fix banding in very large gradients
*/
////////////////////////////////
// NOTE(allen): Render Types
typedef U32 R_QuadFlags;
enum{
R_QuadFlag_SharpCornerTR = (1 << 0),
R_QuadFlag_SharpCornerTL = (1 << 1),
R_QuadFlag_SharpCornerBR = (1 << 2),
R_QuadFlag_SharpCornerBL = (1 << 3),
R_QuadFlag_HzGradient = (1 << 4),
R_QuadFlag_Clipped = (1 << 5),
};
typedef struct R_Quad{
// shape
RectF32 xy;
F32 radius;
F32 thick;
F32 theta;
// color
U32 c[2];
// uv
RectF32 uv;
// flags
R_QuadFlags flags;
// clip
RectF32 clip;
} R_Quad;
typedef struct R_QuadNode{
struct R_QuadNode *next;
R_Quad *quads;
U64 count;
} R_QuadNode;
typedef void R_Texture;
////////////////////////////////
// NOTE(allen): Render Abstract API Functions
//// backend hider API ////
function B32 r_backend_is_inited(void);
function B32 r_backend_init(void);
function B32 r_backend_equip_window(GFX_Window *window);
function void r_backend_begin(GFX_Window *window);
function void r_backend_end(void);
//// rendering ////
function B32 r_renderer_is_inited(void);
function B32 r_renderer_init(void);
function B32 r_canvas_init(V2S32 canvas_dim);
function B32 r_show_canvas_on_activated_window(void);
// submits must occur between begin and end
function B32 r_submit_quads(R_QuadNode *first_node, U64 total_count,
R_Texture *texture);
// texture width and height must be positive powers of 2.
function R_Texture* r_texture_create(void *data, U32 w, U32 h);
function B32 r_texture_update(R_Texture *texture,
void *data, U32 w, U32 h,
U32 x, U32 y);
function B32 r_texture_destroy(R_Texture *texture);
function B32 r_texture_valid(R_Texture *texture);
#endif //RENDER_ABS_H