94 lines
2.2 KiB
C
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
|