#ifndef RENDERING_H #define RENDERING_H #include "util.h" #include "macros/option.h" #include "camera.h" #include <SDL2/SDL.h> #include <stdbool.h> typedef struct push_sprite_args { char *path; t_frect rect; m_option_list( t_color, color, float, rotation, bool, flip_x, bool, flip_y ) } t_push_sprite_args; /* clears all render queues */ void render_queue_clear(void); /* 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 */ void push_sprite(t_push_sprite_args args); #define m_sprite(...) (push_sprite((t_push_sprite_args){__VA_ARGS__})) /* pushes a filled rectangle onto the rectangle render queue */ void push_rectangle(t_frect rect, t_color color); /* pushes a filled circle onto the circle render queue */ void push_circle(t_fvec2 position, float radius, t_color color); /* pushes a textured 3d triangle onto the render queue */ /* vertices are in absolute coordinates, relative to world origin */ /* texture coordinates are in pixels */ void unfurl_triangle(const char *path, t_fvec3 v0, t_fvec3 v1, t_fvec3 v2, t_shvec2 uv0, t_shvec2 uv1, t_shvec2 uv2); /* pushes a colored textured 3d triangle onto the render queue */ // void unfurl_colored_triangle(const char *path, // t_fvec3 v0, // t_fvec3 v1, // t_fvec3 v2, // t_shvec2 uv0, // t_shvec2 uv1, // t_shvec2 uv2, // t_color c0, // t_color c1, // t_color c2); // TODO: // http://www.lighthouse3d.com/opengl/billboarding/index.php?billCheat2 // void unfurl_billboard(const char *path, // t_fvec3 position, // t_fvec2 scaling, // t_frect uvs); /* pushes a camera state to be used for all future unfurl_* commands */ void set_camera(const t_camera *camera); /* renders the background, then the primitives in all render queues */ void render(void); #endif