From bfbde95bb2b40ad10bf881e21903e07d1d3c60fb Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 11 Sep 2023 20:11:31 -0700 Subject: [PATCH] Fix minor issues with Texture:clear bindings; --- src/api/api.c | 1 + src/api/l_graphics_texture.c | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/api/api.c b/src/api/api.c index 69fad54c..a6d0067c 100644 --- a/src/api/api.c +++ b/src/api/api.c @@ -469,6 +469,7 @@ void luax_readcolor(lua_State* L, int index, float color[4]) { // Like readcolor, but only consumes 1 argument (nil, hex, table, vec3, vec4), useful for table keys void luax_optcolor(lua_State* L, int index, float color[4]) { switch (lua_type(L, index)) { + case LUA_TNONE: case LUA_TNIL: color[0] = color[1] = color[2] = color[3] = 1.f; break; diff --git a/src/api/l_graphics_texture.c b/src/api/l_graphics_texture.c index 64a8763a..17ecd111 100644 --- a/src/api/l_graphics_texture.c +++ b/src/api/l_graphics_texture.c @@ -2,6 +2,7 @@ #include "util.h" #include "graphics/graphics.h" #include "data/image.h" +#include static int l_lovrTextureNewView(lua_State* L) { Texture* texture = luax_checktype(L, 1, Texture); @@ -202,12 +203,24 @@ static int l_lovrTextureSetPixels(lua_State* L) { static int l_lovrTextureClear(lua_State* L) { Texture* texture = luax_totype(L, 1, Texture); + + int index; float value[4]; - luax_optcolor(L, 2, value); - uint32_t layer = luax_optu32(L, 3, 1) - 1; - uint32_t layerCount = luax_optu32(L, 4, ~0u); - uint32_t level = luax_optu32(L, 5, 1) - 1; - uint32_t levelCount = luax_optu32(L, 6, ~0u); + if (lua_isnoneornil(L, 2)) { + memset(value, 0, sizeof(value)); + index = 3; + } else if (lua_type(L, 2) == LUA_TNUMBER && lua_gettop(L) > 2) { + luax_readcolor(L, 2, value); + index = 6; + } else { + luax_optcolor(L, 2, value); + index = 3; + } + + uint32_t layer = luax_optu32(L, index++, 1) - 1; + uint32_t layerCount = luax_optu32(L, index++, ~0u); + uint32_t level = luax_optu32(L, index++, 1) - 1; + uint32_t levelCount = luax_optu32(L, index++, ~0u); lovrTextureClear(texture, value, layer, layerCount, level, levelCount); return 0; }