diff --git a/apps/demos/scenery/scenes/ingame.c b/apps/demos/scenery/scenes/ingame.c index a68a3d0..0f8733f 100644 --- a/apps/demos/scenery/scenes/ingame.c +++ b/apps/demos/scenery/scenes/ingame.c @@ -159,7 +159,10 @@ static void draw_terrain(SceneIngame *scn) { (Vec3){ (float)x, d3, (float)y - 1 }, (Vec2){ 128, 128 }, (Vec2){ 128, 0 }, - (Vec2){ 0, 128 }); + (Vec2){ 0, 128 }, + (Color){255, 255, 255, 255}, + (Color){255, 255, 255, 255}, + (Color){255, 255, 255, 255}); draw_triangle("/assets/grass.png", (Vec3){ (float)x + 1, d1, (float)y }, @@ -167,7 +170,10 @@ static void draw_terrain(SceneIngame *scn) { (Vec3){ (float)x, d3, (float)y - 1 }, (Vec2){ 128, 0 }, (Vec2){ 0, 0 }, - (Vec2){ 0, 128 }); + (Vec2){ 0, 128 }, + (Color){255, 255, 255, 255}, + (Color){255, 255, 255, 255}, + (Color){255, 255, 255, 255}); draw_billboard("/assets/grasses/10.png", (Vec3){ (float)x, d0 + 0.15f, (float)y }, diff --git a/apps/twnlua/data/scripts/game.lua b/apps/twnlua/data/scripts/game.lua index 12bc950..eb2a82f 100644 --- a/apps/twnlua/data/scripts/game.lua +++ b/apps/twnlua/data/scripts/game.lua @@ -15,7 +15,7 @@ function game_tick() } draw.sprite { - path = "/assets/title.png", + texture = "/assets/title.png", rect = { x = 320 - (320 / 2), y = 180 - (128 / 2), diff --git a/include/twn_draw.h b/include/twn_draw.h index 3143a20..e0e85e6 100644 --- a/include/twn_draw.h +++ b/include/twn_draw.h @@ -50,22 +50,10 @@ TWN_API void draw_triangle(char const *texture, 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. -// TODO: instead add optional color parameters to 'draw_triangle' -/* 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); + Vec2 uv2, + Color c0, /* optional, default: all 255 */ + Color c1, /* optional, default: all 255 */ + Color c2); /* optional, default: all 255 */ TWN_API void draw_billboard(const char *texture, Vec3 position, @@ -90,9 +78,13 @@ TWN_API DrawCameraFromPrincipalAxesResult draw_camera_from_principal_axes(Vec3 p float yaw); /* 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_skybox(const char *textures); -TWN_API void draw_fog(float start, float end, float density, Color color); +/* only one for setting is supported for a frame, any call overwrites previous */ +TWN_API void draw_fog(float start, /* optional, default: 0.0 */ + float end, /* optional, default: 1.0 */ + float density, /* optional, default: 0.0 */ + Color color); /* optional, default: all 255 */ #ifndef TWN_NOT_C diff --git a/share/twn_api.json b/share/twn_api.json index a49cd84..1a73730 100644 --- a/share/twn_api.json +++ b/share/twn_api.json @@ -66,7 +66,7 @@ "symbol": "sprite", "header": "twn_draw.h", "params": [ - { "name": "path", "type": "char *" }, + { "name": "texture", "type": "char *" }, { "name": "rect", "type": "Rect" }, { "name": "texture_region", "type": "Rect *", "default": {} }, { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }, @@ -121,6 +121,71 @@ { "name": "font", "type": "char *", "default": {} } ], "return": "float" + }, + + "draw_nine_slice": { + "module": "draw", + "symbol": "nine_slice", + "header": "twn_draw.h", + "params": [ + { "name": "texture", "type": "char *" }, + { "name": "corners", "type": "Vec2" }, + { "name": "rect", "type": "Rect" }, + { "name": "border_thickness", "type": "float", "default": 0 }, + { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } } + ] + }, + + "draw_triangle": { + "module": "draw", + "symbol": "triangle", + "header": "twn_draw.h", + "params": [ + { "name": "texture", "type": "char *" }, + { "name": "v0", "type": "Vec3" }, + { "name": "v1", "type": "Vec3" }, + { "name": "v2", "type": "Vec3" }, + { "name": "uv0", "type": "Vec2" }, + { "name": "uv1", "type": "Vec2" }, + { "name": "uv2", "type": "Vec2" }, + { "name": "c0", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }, + { "name": "c1", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }, + { "name": "c2", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } } + ] + }, + + "draw_billboard": { + "module": "draw", + "symbol": "billboard", + "header": "twn_draw.h", + "params": [ + { "name": "texture", "type": "char *" }, + { "name": "position", "type": "Vec3" }, + { "name": "size", "type": "Vec2" }, + { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }, + { "name": "cylindrical", "type": "bool", "default": false } + ] + }, + + "draw_skybox": { + "module": "draw", + "symbol": "skybox", + "header": "twn_draw.h", + "params": [ + { "name": "textures", "type": "char *", "default": {} } + ] + }, + + "draw_fog": { + "module": "draw", + "symbol": "fog", + "header": "twn_draw.h", + "params": [ + { "name": "start", "type": "float", "default": 0 }, + { "name": "end", "type": "float", "default": 1 }, + { "name": "density", "type": "float", "default": 0 }, + { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } } + ] } }, diff --git a/src/rendering/twn_triangles.c b/src/rendering/twn_triangles.c index 477926c..7687c0a 100644 --- a/src/rendering/twn_triangles.c +++ b/src/rendering/twn_triangles.c @@ -15,8 +15,14 @@ void draw_triangle(const char *path, Vec3 v2, Vec2 uv0, Vec2 uv1, - Vec2 uv2) + Vec2 uv2, + Color c0, + Color c1, + Color c2) { + // TODO: support color + (void)c0; (void)c1; (void)c2; + // TODO: order drawing by atlas id as well, so that texture rebinding is not as common const TextureKey texture_key = textures_get_key(&ctx.texture_cache, path);