4coder/test_data/lots_of_files/cd_render_target.h

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