Merge pull request #683 from MihailRis/canvas-get-data

add canvas:get_data() -> bytearray
This commit is contained in:
MihailRis 2025-11-20 13:55:20 +03:00 committed by GitHub
commit 38327d93df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 2 deletions

View File

@ -195,7 +195,8 @@ Here, *color* can be specified in the following ways:
| data:clear() | clears the canvas |
| data:clear(*color*) | fills the canvas with the specified RGBA color |
| data:update() | applies changes to the canvas and uploads it to the GPU |
| data:set_data(data: table<int>) | replaces pixel data (width * height * 4 numbers) |
| data:set_data(data: Bytearray | table<int>) | replaces pixel data (width * height * 4 numbers) |
| data:get_data() | creates a Bytearray object with the image's pixel data |
| data:create_texture(name: str) | creates and shares texture to renderer |
| data:unbind_texture() | unbinds the texture from the canvas |
| data:mul(*color* or Canvas) | multiplies a color by the specified color or canvas |

View File

@ -195,7 +195,8 @@ document["worlds-panel"]:clear()
| data:clear() | очищает холст |
| data:clear(*цвет*) | заполняет холст указанным RGBA цветом |
| data:update() | применяет изменения и загружает холст в видеопамять |
| data:set_data(data: table<int>) | заменяет данные пикселей (ширина * высота * 4 чисел) |
| data:set_data(data: bytearray | table<int>) | заменяет данные пикселей (ширина * высота * 4 чисел) |
| data:get_data() | создаёт объект Bytearray с пиксельными данными изображения |
| data:create_texture(name: str) | создаёт и делится текстурой с рендерером |
| data:unbind_texture() | отвязывает текстуру от холста |
| data:mul(*цвет* или Canvas) | умножает увет на указанный цвет или холст |

View File

@ -224,6 +224,13 @@ static int l_set_data(State* L) {
return 0;
}
static int l_get_data(State* L) {
auto& canvas = require_canvas(L, 1);
auto& image = canvas.getData();
auto data = image.getData();
return create_bytearray(L, data, image.getDataSize());
}
static int l_update(State* L) {
if (auto canvas = touserdata<LuaCanvas>(L, 1)) {
canvas->update();
@ -316,6 +323,7 @@ static std::unordered_map<std::string, lua_CFunction> methods {
{"add", lua::wrap<l_add>},
{"sub", lua::wrap<l_sub>},
{"encode", lua::wrap<l_encode>},
{"get_data", lua::wrap<l_get_data>},
{"_set_data", lua::wrap<l_set_data>},
};