173 lines
3.8 KiB
C
173 lines
3.8 KiB
C
/*
|
|
* Interface between game and graphics module
|
|
*/
|
|
|
|
// TOP
|
|
|
|
#ifndef CD_RENDER_TARGET_H
|
|
#define CD_RENDER_TARGET_H
|
|
|
|
#define Render_Get_Functions_Sig(n) void n(Render_Target *target)
|
|
typedef Render_Get_Functions_Sig(Render_Get_Functions);
|
|
|
|
#define Render_Execute_Sig(n) void n(Render_Target *target, struct Asset_Bank *bank)
|
|
typedef Render_Execute_Sig(Render_Execute_Function);
|
|
|
|
#define Init_Sig(n) void n(void *render_vars)
|
|
typedef Init_Sig(Init_Function);
|
|
|
|
#define Display_Sig(n) void n(void *render_vars)
|
|
typedef Display_Sig(Display_Function);
|
|
|
|
#define Set_Screen_Sig(n) void n(i32 w, i32 h, i32 out_w, i32 out_h)
|
|
typedef Set_Screen_Sig(Set_Screen_Function);
|
|
|
|
|
|
struct Asset_Bank_Setup{
|
|
struct Asset_Bank *bank;
|
|
Partition *asset_part;
|
|
System_API *system;
|
|
};
|
|
|
|
#define Bank_Get_Functions_Sig(n) void n(Asset_Bank *bank)
|
|
typedef Bank_Get_Functions_Sig(Bank_Get_Functions);
|
|
|
|
#define Bank_Begin_Setup_Sig(n) Asset_Bank_Setup n(struct Asset_Bank *bank, Partition *trans_part, System_API *system)
|
|
typedef Bank_Begin_Setup_Sig(Begin_Setup_Function);
|
|
|
|
#define Bank_End_Setup_Sig(n) void n(Asset_Bank_Setup *setup)
|
|
typedef Bank_End_Setup_Sig(End_Setup_Function);
|
|
|
|
#define Bank_Bind_Font_Sig(n) void n(Asset_Bank_Setup *setup, char *file_name, i32 font_id)
|
|
typedef Bank_Bind_Font_Sig(Bind_Font_Function);
|
|
|
|
#define Bank_Bind_BMP_Sig(n) void n(Asset_Bank_Setup *setup, char *file_name, i32 image_id)
|
|
typedef Bank_Bind_BMP_Sig(Bind_BMP_Function);
|
|
|
|
#define Bank_Replace_BMP_Sig(n) void n(System_API *system, struct Asset_Bank *bank, Partition *part, char *file_name, i32 image_id)
|
|
typedef Bank_Replace_BMP_Sig(Replace_BMP_Function);
|
|
|
|
|
|
struct Font{
|
|
stbtt_bakedchar chardata[128];
|
|
f32 advance[128];
|
|
f32 pull_up;
|
|
i32 texture_w, texture_h;
|
|
u32 texture_id;
|
|
i32 id;
|
|
};
|
|
|
|
struct Image{
|
|
f32 tex_x, tex_y;
|
|
f32 width, height;
|
|
u32 texture_id;
|
|
i32 id;
|
|
};
|
|
|
|
struct Layer
|
|
{
|
|
f32 resolution; // 1 = 'default', 2 = 2*default, etc.
|
|
u32 fbo_id;
|
|
u32 color_tex, normal_tex, depth_tex; // more? -1 means not-assigned
|
|
i32 id;
|
|
};
|
|
|
|
|
|
struct Asset_Bank{
|
|
// Asset management
|
|
Begin_Setup_Function *begin_setup;
|
|
End_Setup_Function *end_setup;
|
|
Bind_Font_Function *bind_font;
|
|
Bind_BMP_Function *bind_bmp;
|
|
Replace_BMP_Function *replace_bmp;
|
|
|
|
// TODO(allen): Turn fonts into just a set of bitmaps.
|
|
Font *fonts;
|
|
i32 font_max_id;
|
|
|
|
// TODO(allen): Allow for growth in the images array durring development.
|
|
Image *images;
|
|
i32 image_max_id;
|
|
};
|
|
|
|
struct Render_Target{
|
|
// Immediate execution render commands
|
|
Init_Function *init;
|
|
Display_Function *display;
|
|
Set_Screen_Function *set_screen;
|
|
|
|
Partition push_part;
|
|
|
|
vec2 dim;
|
|
|
|
Transform me_to_pixel_transform;
|
|
Transform transform;
|
|
|
|
Render_Execute_Function *execute;
|
|
|
|
void *memory;
|
|
i32 memory_size;
|
|
};
|
|
|
|
enum Render_Command_Type{
|
|
render_null,
|
|
|
|
render_dbg_rectangle,
|
|
render_dbg_parallelagram,
|
|
render_glyph, // TODO(allen): render_string would be more awesome
|
|
render_image,
|
|
|
|
// NOTE(allen): game specific stuff
|
|
render_lane,
|
|
render_obstacle,
|
|
};
|
|
struct Render_Command_Header{
|
|
Render_Command_Type type;
|
|
i32 size;
|
|
};
|
|
|
|
struct Render_Dbg_Rectangle{
|
|
f32_rect rect;
|
|
vec4 color;
|
|
};
|
|
|
|
struct Render_Dbg_Parallelagram{
|
|
Transform transform;
|
|
vec4 color;
|
|
};
|
|
|
|
struct Render_Glyph{
|
|
vec4 color;
|
|
vec2 pos;
|
|
i32 font_id;
|
|
char c;
|
|
// NOTE(allen): pad out to multiples of 8
|
|
char filler[3];
|
|
};
|
|
|
|
struct Render_Image{
|
|
Transform transform;
|
|
i32 image_id;
|
|
char filler[4];
|
|
};
|
|
|
|
struct Render_Lane{
|
|
i32 lane_index;
|
|
f32 y_position;
|
|
};
|
|
|
|
struct Render_Obstacle{
|
|
u32 type;
|
|
u32 seed;
|
|
f32 x;
|
|
i32 lane;
|
|
char filler[4];
|
|
};
|
|
|
|
#define NextHeader(h) (Render_Command_Header*)((char*)h + h->size)
|
|
|
|
#endif
|
|
|
|
// BOTTOM
|
|
|