#ifndef TWN_DRAW_H #define TWN_DRAW_H #include "twn_types.h" #include "twn_option.h" #include "twn_camera.h" #include "twn_engine_api.h" #include /* pushes a sprite onto the sprite render queue */ TWN_API void draw_sprite(char const *path, Rect rect, Rect const *texture_region, /* optional, default: NULL */ Color color, /* optional, default: all 255 */ float rotation, /* optional, default: 0 */ bool flip_x, /* optional, default: false */ bool flip_y, /* optional, default: false */ bool stretch); /* optional, default: false */ /* pushes a filled rectangle onto the rectangle render queue */ TWN_API void draw_rectangle(Rect rect, Color color); /* pushes a filled circle onto the circle render queue */ /* note that its edges may look jagged with a radius larger than 2048 */ TWN_API void draw_circle(Vec2 position, float radius, Color color); /* TODO: have font optional, with something minimal coming embedded */ TWN_API void draw_text(char const *string, Vec2 position, int height_px, /* optional, default: 22 */ Color color, /* optional, default: all 0 */ char const *font); TWN_API int draw_text_width(char const *string, int height_px, /* TODO: make optional */ char const *font); TWN_API void draw_9slice(char const *texture_path, int texture_w, int texture_h, int border_thickness, Rect rect, Color color); /* TODO: make optional */ /* pushes a textured 3d triangle onto the render queue */ /* vertices are in absolute coordinates, relative to world origin */ /* texture coordinates are in pixels */ TWN_API void draw_triangle(char const *path, Vec3 v0, Vec3 v1, Vec3 v2, Vec2 uv0, Vec2 uv1, Vec2 uv2); // TODO: decide whether it's needed to begin with? // intended usage for it is baked lighting, i would think. /* pushes a colored textured 3d triangle onto the render queue */ // void unfurl_colored_triangle(const char *path, // Vec3 v0, // Vec3 v1, // Vec3 v2, // Vec2sh uv0, // Vec2sh uv1, // Vec2sh uv2, // Color c0, // Color c1, // Color c2); // TODO: // http://www.lighthouse3d.com/opengl/billboarding/index.php?billCheat2 // void unfurl_billboard(const char *path, // Vec2 position, // Vec2 scaling, // Rect uvs); /* pushes a camera state to be used for all future unfurl_* commands */ TWN_API void draw_camera(const Camera *camera); /* expects '*' masks that will be expanded to 6 names: 'up', 'down', 'east', 'west', 'north' and 'south' */ TWN_API void draw_skybox(const char *paths); TWN_API void draw_fog(float start, float end, float density, Color color); #ifndef TWN_NOT_C typedef struct DrawSpriteArgs { char const *path; Rect rect; m_option_list( Rect, texture_region, Color, color, float, rotation, bool, flip_x, bool, flip_y, bool, stretch ) } DrawSpriteArgs; TWN_API void draw_sprite_args(DrawSpriteArgs args); #define m_sprite(...) (draw_sprite_args((DrawSpriteArgs){__VA_ARGS__})) /* TODO: define more */ #endif /* TWN_NOT_C */ #endif