123 lines
2.2 KiB
C
123 lines
2.2 KiB
C
/*
|
|
* Mr. 4th Dimention - Allen Webster
|
|
*
|
|
* 17.12.2014
|
|
*
|
|
* Rendering layer for project codename "4ed"
|
|
*
|
|
*/
|
|
|
|
// TOP
|
|
|
|
#ifndef FRED_RENDERING_H
|
|
#define FRED_RENDERING_H
|
|
|
|
//
|
|
// Render Commands
|
|
//
|
|
|
|
enum Render_Piece_Type{
|
|
piece_type_rectangle,
|
|
piece_type_outline,
|
|
piece_type_gradient,
|
|
piece_type_glyph,
|
|
piece_type_mono_glyph,
|
|
piece_type_mono_glyph_advance,
|
|
piece_type_change_clip
|
|
};
|
|
|
|
struct Render_Piece_Header{
|
|
i32 type;
|
|
};
|
|
|
|
struct Render_Piece_Rectangle{
|
|
f32_Rect rect;
|
|
u32 color;
|
|
};
|
|
|
|
struct Render_Piece_Gradient{
|
|
f32_Rect rect;
|
|
u32 left_color;
|
|
u32 right_color;
|
|
};
|
|
|
|
struct Render_Piece_Glyph{
|
|
Vec2 pos;
|
|
u32 color;
|
|
Font_ID font_id;
|
|
u32 codepoint;
|
|
};
|
|
|
|
struct Render_Piece_Glyph_Advance{
|
|
Vec2 pos;
|
|
u32 color;
|
|
f32 advance;
|
|
Font_ID font_id;
|
|
u32 codepoint;
|
|
};
|
|
|
|
struct Render_Piece_Change_Clip{
|
|
i32_Rect box;
|
|
};
|
|
|
|
struct Render_Piece_Combined{
|
|
Render_Piece_Header header;
|
|
union{
|
|
Render_Piece_Rectangle rectangle;
|
|
Render_Piece_Gradient gradient;
|
|
Render_Piece_Glyph glyph;
|
|
Render_Piece_Glyph_Advance glyph_advance;
|
|
};
|
|
};
|
|
|
|
struct Render_Target;
|
|
|
|
#define Draw_Push_Clip_Sig(name) void name(Render_Target *target, i32_Rect clip_box)
|
|
typedef Draw_Push_Clip_Sig(Draw_Push_Clip);
|
|
|
|
#define Draw_Pop_Clip_Sig(name) i32_Rect name(Render_Target *target)
|
|
typedef Draw_Pop_Clip_Sig(Draw_Pop_Clip);
|
|
|
|
#define Draw_Push_Piece_Sig(name) void name(Render_Target *target, Render_Piece_Combined piece)
|
|
typedef Draw_Push_Piece_Sig(Draw_Push_Piece);
|
|
|
|
//
|
|
// Render target stuff
|
|
//
|
|
|
|
struct Render_Target{
|
|
void *handle;
|
|
void *context;
|
|
i32_Rect clip_boxes[5];
|
|
i32 clip_top;
|
|
b32 clip_all;
|
|
i32 width, height;
|
|
i32 bound_texture;
|
|
u32 color;
|
|
|
|
// TODO(allen): change this to a Partition
|
|
char *push_buffer;
|
|
i32 size, max;
|
|
|
|
Draw_Push_Clip *push_clip;
|
|
Draw_Pop_Clip *pop_clip;
|
|
Draw_Push_Piece *push_piece;
|
|
};
|
|
|
|
#define DpiMultiplier(n,dpi) ((n) * (dpi) / 96)
|
|
|
|
inline i32_Rect
|
|
rect_from_target(Render_Target *target){
|
|
i32_Rect r;
|
|
r.x0 = 0;
|
|
r.y0 = 0;
|
|
r.x1 = target->width;
|
|
r.y1 = target->height;
|
|
return(r);
|
|
}
|
|
|
|
#endif
|
|
|
|
// BOTTOM
|
|
|