render.h (1825B)
1 #ifndef PH_ENGINE_RENDER_H 2 #define PH_ENGINE_RENDER_H 3 4 #include "engine/world.h" 5 #include "engine/assets.h" 6 7 enum { PH_MAX_ASSETS = 32, PH_RENDER_FONT_W = 8 }; 8 9 typedef struct { 10 PhVec2 pos; 11 float viewport_w; 12 float viewport_h; 13 } PhCamera; 14 15 typedef struct PhRenderer PhRenderer; 16 typedef struct { float x, y, w, h; } PhRect; 17 typedef struct { unsigned char r, g, b, a; } PhColor; 18 typedef enum { PH_FLIP_NONE, PH_FLIP_HORIZONTAL } PhFlip; 19 20 /* Asset IDs are indices into the catalog passed at creation. Missing IDs are 21 * safe to draw (a no-op); use has_asset when a fallback graphic is needed. */ 22 int ph_render_has_asset(const PhRenderer *renderer, int asset_id); 23 void ph_render_destroy(PhRenderer *renderer); 24 void ph_render_color(PhRenderer *renderer, PhColor color); 25 void ph_render_clear(PhRenderer *renderer); 26 void ph_render_fill(PhRenderer *renderer, PhRect rect); 27 void ph_render_outline(PhRenderer *renderer, PhRect rect); 28 /* Built-in fixed-width text: PH_RENDER_FONT_W pixels per character. */ 29 void ph_render_text(PhRenderer *renderer, float x, float y, const char *text); 30 void ph_render_present(PhRenderer *renderer); 31 void ph_render_texture(PhRenderer *renderer, int asset_id, 32 PhRect src, PhRect dst, PhFlip flip); 33 void ph_render_sprite(PhRenderer *renderer, int asset_id, 34 int sprite_tile_x, int sprite_tile_y, PhRect dst, PhFlip flip); 35 void ph_render_entity_frame(const PhEntityDef *def, const PhEntity *entity, 36 int *sprite_tile_x, int *sprite_tile_y, PhFlip *flip); 37 /* Updates only the caller-owned camera; a missing player resets it to origin. */ 38 void ph_camera_follow_player(PhCamera *camera, const PhWorld *world); 39 void ph_render_world(PhRenderer *renderer, const PhWorld *world, 40 const PhCamera *camera); 41 42 void ph_render_world_debug(PhRenderer *renderer, const PhWorld *world, 43 const PhCamera *camera); 44 45 #endif