twn_rendering -> twn_draw
This commit is contained in:
109
include/twn_draw.h
Normal file
109
include/twn_draw.h
Normal file
@ -0,0 +1,109 @@
|
||||
#ifndef TWN_DRAW_H
|
||||
#define TWN_DRAW_H
|
||||
|
||||
#include "twn_util.h"
|
||||
#include "twn_option.h"
|
||||
#include "twn_camera.h"
|
||||
#include "twn_engine_api.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* 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 */
|
||||
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
|
@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
#include "twn_context.h"
|
||||
#include "twn_rendering.h"
|
||||
#include "twn_draw.h"
|
||||
#include "twn_audio.h"
|
||||
#include "twn_util.h"
|
||||
#include "twn_input.h"
|
||||
|
@ -1,81 +0,0 @@
|
||||
#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 <stdbool.h>
|
||||
|
||||
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);
|
||||
TWN_API int text_get_width(char *string, int height_px, const char *font);
|
||||
|
||||
TWN_API void push_9slice(char *texture_path, int texture_w, int texture_h, int border_thickness, Rect rect, 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 */
|
||||
TWN_API void unfurl_triangle(const char *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 set_camera(const Camera *camera);
|
||||
|
||||
/* expects '*' masks that will be expanded to 6 names: 'up', 'down', 'east', 'west', 'north' and 'south' */
|
||||
TWN_API void push_skybox(const char *paths);
|
||||
|
||||
TWN_API void push_fog(float start, float end, float density, Color color);
|
||||
|
||||
#endif
|
@ -5,40 +5,6 @@
|
||||
|
||||
/* plain data aggregates that are accepted between public procedure boundaries */
|
||||
|
||||
/* 32-bit color data */
|
||||
typedef struct Color {
|
||||
_Alignas(4)
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
uint8_t a;
|
||||
} Color;
|
||||
|
||||
|
||||
/* a rectangle with the origin at the upper left (integer) */
|
||||
typedef struct Recti {
|
||||
_Alignas(16)
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t w;
|
||||
int32_t h;
|
||||
} Recti;
|
||||
|
||||
|
||||
/* a rectangle with the origin at the upper left (floating point) */
|
||||
typedef struct Rect {
|
||||
_Alignas(16)
|
||||
float x;
|
||||
float y;
|
||||
float w;
|
||||
float h;
|
||||
} Rect;
|
||||
|
||||
|
||||
typedef struct Matrix4 {
|
||||
Vec4 row[4];
|
||||
} Matrix4;
|
||||
|
||||
|
||||
/* a point in some space (integer) */
|
||||
typedef struct Vec2i {
|
||||
@ -77,4 +43,39 @@ _Alignas(16)
|
||||
} Vec4;
|
||||
|
||||
|
||||
/* 32-bit color data */
|
||||
typedef struct Color {
|
||||
_Alignas(4)
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
uint8_t a;
|
||||
} Color;
|
||||
|
||||
|
||||
/* a rectangle with the origin at the upper left (integer) */
|
||||
typedef struct Recti {
|
||||
_Alignas(16)
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t w;
|
||||
int32_t h;
|
||||
} Recti;
|
||||
|
||||
|
||||
/* a rectangle with the origin at the upper left (floating point) */
|
||||
typedef struct Rect {
|
||||
_Alignas(16)
|
||||
float x;
|
||||
float y;
|
||||
float w;
|
||||
float h;
|
||||
} Rect;
|
||||
|
||||
|
||||
typedef struct Matrix4 {
|
||||
Vec4 row[4];
|
||||
} Matrix4;
|
||||
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user