Merge pull request #709 from MihailRis/fix-canvas-set-data

fix canvas:set_data
This commit is contained in:
MihailRis 2025-11-26 23:04:51 +03:00 committed by GitHub
commit 41a45a961f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 2 deletions

View File

@ -45,7 +45,7 @@ local canvas_ffi_buffer_size = 0
local _ffi = ffi
function __vc_Canvas_set_data(self, data)
if type(data) == "cdata" then
self:_set_data(tostring(_ffi.cast("uintptr_t", data)))
self:_set_data(tostring(_ffi.cast("uintptr_t", data.bytes)), data.size)
end
local width = self.width
local height = self.height
@ -60,7 +60,7 @@ function __vc_Canvas_set_data(self, data)
for i=0, size - 1 do
canvas_ffi_buffer[i] = data[i + 1]
end
self:_set_data(tostring(_ffi.cast("uintptr_t", canvas_ffi_buffer)))
self:_set_data(tostring(_ffi.cast("uintptr_t", canvas_ffi_buffer)), data.size)
end
local ipairs_mt_supported = false

View File

@ -220,6 +220,14 @@ static int l_set_data(State* L) {
if (lua::isstring(L, 2)) {
auto ptr = reinterpret_cast<ubyte*>(std::stoull(lua::tostring(L, 2)));
int len = lua::touinteger(L, 3);
if (len < image.getDataSize()) {
throw std::runtime_error(
"data size mismatch expected " +
std::to_string(image.getDataSize()) + ", got " +
std::to_string(len)
);
}
std::memcpy(data, ptr, image.getDataSize());
return 0;
}