add canvas:set_data
This commit is contained in:
parent
22d49c1c65
commit
6078a8802e
@ -180,6 +180,7 @@ 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) |
|
||||
|
||||
|
||||
## Inventory
|
||||
|
||||
@ -172,15 +172,16 @@ document["worlds-panel"]:clear()
|
||||
- r: int, g: int, b: int
|
||||
- r: int, g: int, b: int, a: int
|
||||
|
||||
| Метод | Описание |
|
||||
|----------------------------------------------------------|-----------------------------------------------------|
|
||||
| data:at(x: int, y: int) | возвращает RGBA пиксель по указанным координатам |
|
||||
| data:set(x: int, y: int, *цвет*) | изменяет RGBA пиксель по указанным координатам |
|
||||
| data:line(x1: int, y1: int, x2: int, y2: int, *цвет*) | рисует линию с указанным RGBA цветом |
|
||||
| data:blit(src: Canvas, dst_x: int, dst_y: int) | рисует src-холст на указанных координатах |
|
||||
| data:clear() | очищает холст |
|
||||
| data:clear(*цвет*) | заполняет холст указанным RGBA цветом |
|
||||
| data:update() | применяет изменения и загружает холст в видеопамять |
|
||||
| Метод | Описание |
|
||||
|----------------------------------------------------------|------------------------------------------------------|
|
||||
| data:at(x: int, y: int) | возвращает RGBA пиксель по указанным координатам |
|
||||
| data:set(x: int, y: int, *цвет*) | изменяет RGBA пиксель по указанным координатам |
|
||||
| data:line(x1: int, y1: int, x2: int, y2: int, *цвет*) | рисует линию с указанным RGBA цветом |
|
||||
| data:blit(src: Canvas, dst_x: int, dst_y: int) | рисует src-холст на указанных координатах |
|
||||
| data:clear() | очищает холст |
|
||||
| data:clear(*цвет*) | заполняет холст указанным RGBA цветом |
|
||||
| data:update() | применяет изменения и загружает холст в видеопамять |
|
||||
| data:set_data(data: table<int>) | заменяет данные пикселей (ширина * высота * 4 чисел) |
|
||||
|
||||
## Inventory (inventory)
|
||||
|
||||
|
||||
@ -26,4 +26,4 @@ namespace gui {
|
||||
std::shared_ptr<::Texture> mTexture;
|
||||
std::shared_ptr<ImageData> mData;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,6 +132,25 @@ static int l_blit(State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_set_data(State* L) {
|
||||
auto& canvas = require_canvas(L, 1);
|
||||
auto& image = canvas.data();
|
||||
auto data = image.getData();
|
||||
int len = objlen(L, 2);
|
||||
if (len < image.getDataSize()) {
|
||||
throw std::runtime_error(
|
||||
"data size mismatch expected " +
|
||||
std::to_string(image.getDataSize()) + ", got " + std::to_string(len)
|
||||
);
|
||||
}
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
rawgeti(L, i + 1, 2);
|
||||
data[i] = tointeger(L, -1);
|
||||
pop(L);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_update(State* L) {
|
||||
if (auto canvas = touserdata<LuaCanvas>(L, 1)) {
|
||||
if (canvas->hasTexture()) {
|
||||
@ -148,6 +167,7 @@ static std::unordered_map<std::string, lua_CFunction> methods {
|
||||
{"blit", lua::wrap<l_blit>},
|
||||
{"clear", lua::wrap<l_clear>},
|
||||
{"update", lua::wrap<l_update>},
|
||||
{"set_data", lua::wrap<l_set_data>},
|
||||
};
|
||||
|
||||
static int l_meta_index(State* L) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user