townengine/include/twn_rendering.h

77 lines
2.6 KiB
C
Raw Normal View History

#ifndef TWN_RENDERING_H
#define TWN_RENDERING_H
2024-07-08 00:44:20 +00:00
#include "twn_util.h"
#include "twn_option.h"
#include "twn_camera.h"
#include "twn_engine_api.h"
2024-07-08 00:44:20 +00:00
#include <SDL2/SDL.h>
#include <stdbool.h>
typedef struct PushSpriteArgs {
2024-07-08 00:44:20 +00:00
char *path;
Rect rect;
2024-07-30 12:30:35 +00:00
m_option_list(
Rect, texture_region,
Color, color,
2024-07-30 12:30:35 +00:00
float, rotation,
bool, flip_x,
2024-07-31 21:23:32 +00:00
bool, flip_y,
2024-07-31 22:25:23 +00:00
bool, stretch )
} PushSpriteArgs;
2024-07-08 00:44:20 +00:00
/* pushes a sprite onto the sprite render queue */
/* this is a simplified version of push_sprite_ex for the most common case. */
2024-07-30 12:30:35 +00:00
/* 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__}))
2024-07-08 00:44:20 +00:00
/* pushes a filled rectangle onto the rectangle render queue */
TWN_API void push_rectangle(Rect rect, Color color);
2024-07-08 00:44:20 +00:00
/* pushes a filled circle onto the circle render queue */
TWN_API void push_circle(Vec2 position, float radius, Color color);
2024-07-08 00:44:20 +00:00
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);
2024-08-23 02:41:52 +00:00
/* 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);
2024-07-08 00:44:20 +00:00
#endif