diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index d865cc1a..4fda3b0d 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -184,7 +184,7 @@ assetload::postfunc assetload::atlas( if (!append_atlas(builder, file)) continue; } std::set names = builder.getNames(); - Atlas* atlas = builder.build(2, false).release(); + Atlas* atlas = builder.build(ATLAS_EXTRUSION, false).release(); return [=](auto assets) { atlas->prepare(); assets->store(std::unique_ptr(atlas), name); @@ -501,7 +501,7 @@ static bool load_animation( } if (!append_atlas(builder, file)) continue; } - auto srcAtlas = builder.build(2, true); + auto srcAtlas = builder.build(ATLAS_EXTRUSION, true); if (frameList.empty()) { for (const auto& frameName : builder.getNames()) { frameList.emplace_back(frameName, 0); diff --git a/src/constants.hpp b/src/constants.hpp index 6544316e..91e2c180 100644 --- a/src/constants.hpp +++ b/src/constants.hpp @@ -61,6 +61,8 @@ inline constexpr int ITEM_ICON_SIZE = 48; inline constexpr int TRANSLUCENT_BLOCKS_SORT_INTERVAL = 8; +inline constexpr int ATLAS_EXTRUSION = 2; + inline const std::string SHADERS_FOLDER = "shaders"; inline const std::string TEXTURES_FOLDER = "textures"; inline const std::string FONTS_FOLDER = "fonts"; diff --git a/src/graphics/render/BlocksPreview.cpp b/src/graphics/render/BlocksPreview.cpp index 4b8bfee9..ad025d3c 100644 --- a/src/graphics/render/BlocksPreview.cpp +++ b/src/graphics/render/BlocksPreview.cpp @@ -137,5 +137,5 @@ std::unique_ptr BlocksPreview::build( builder.add(def.name, draw(cache, shader, fbo, batch, def, iconSize)); } fbo.unbind(); - return builder.build(2); + return builder.build(ATLAS_EXTRUSION); } diff --git a/src/logic/scripting/lua/lua_custom_types.hpp b/src/logic/scripting/lua/lua_custom_types.hpp index bf2c4f87..e1e9c3b6 100644 --- a/src/logic/scripting/lua/lua_custom_types.hpp +++ b/src/logic/scripting/lua/lua_custom_types.hpp @@ -6,6 +6,7 @@ #include #include "lua_commons.hpp" +#include "constants.hpp" #include "maths/UVRegion.hpp" struct fnl_state; @@ -108,7 +109,7 @@ namespace lua { return texture; } - void update(); + void update(int extrusion = ATLAS_EXTRUSION); void createTexture(); diff --git a/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp b/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp index fcb27779..8f5d3e00 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp @@ -19,7 +19,7 @@ LuaCanvas::LuaCanvas( region(std::move(region)) { } -void LuaCanvas::update() { +void LuaCanvas::update(int extrusion) { if (!hasTexture()) { return; } @@ -39,7 +39,24 @@ void LuaCanvas::update() { w = std::min(w, imgWidth); h = std::min(h, imgHeight); - texture->reloadPartial(*data, x, y, w, h); + if (extrusion > 0) { + auto extruded = std::make_unique( + data->getFormat(), + w + extrusion * 2, + h + extrusion * 2 + ); + extruded->blit(*data, extrusion, extrusion); + extruded->extrude(0, 0, w + extrusion * 2, h + extrusion * 2); + texture->reloadPartial( + *extruded, + x - extrusion, + y - extrusion, + w + extrusion * 2, + h + extrusion * 2 + ); + } else { + texture->reloadPartial(*data, x, y, w, h); + } } }