#ifndef TWN_RENDERING_H #define TWN_RENDERING_H #include "twn_util.h" #include "twn_option.h" #include "twn_camera.h" #include "twn_engine_api.h" #include #include typedef struct PushSpriteArgs { char *path; Rect rect; m_option_list( Rect, texture_region, Color, color, float, rotation, bool, flip_x, bool, flip_y, bool, stretch ) } PushSpriteArgs; /* pushes a sprite onto the sprite render queue */ /* this is a simplified version of push_sprite_ex for the most common case. */ /* it assumes you want no color modulation, no rotation, no flip */ TWN_API void push_sprite(PushSpriteArgs args); #define m_sprite(...) (push_sprite((PushSpriteArgs){__VA_ARGS__})) /* pushes a filled rectangle onto the rectangle render queue */ TWN_API void push_rectangle(Rect rect, Color color); /* pushes a filled circle onto the circle render queue */ TWN_API void push_circle(Vec2 position, float radius, Color color); TWN_API void push_text(char *string, Vec2 position, int height_px, Color color, const char *font_path); TWN_API int text_get_width(char *string, int height_px, const char *font_path); /* 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 unfurl_triangle(const char *path, Vec3 v0, Vec3 v1, Vec3 v2, Vec2sh uv0, Vec2sh uv1, Vec2sh 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 set_camera(const Camera *camera); #endif