- [NEW] Funcions per a apilar i desapilar surfaces target i source:

surf.source.push(surface)
surf.source.pop()
surf.target.push(surface)
surf.target.pop()
This commit is contained in:
2026-05-29 20:37:15 +02:00
parent a45cb95030
commit 4c0eabcc5c
4 changed files with 100 additions and 8 deletions
+55 -8
View File
@@ -154,12 +154,12 @@ namespace mini
static int target(lua_State *L) { static int target(lua_State *L) {
const int numargs = lua_gettop(L); const int numargs = lua_gettop(L);
switch (numargs) { switch (numargs) {
case 0: { case 1: {
lua_pushinteger(L, mini::surf::target::get()); lua_pushinteger(L, mini::surf::target::get());
return 1; return 1;
} }
case 1: { case 2: {
uint8_t surface = luaL_checkinteger(L, 1); uint8_t surface = luaL_checkinteger(L, 2);
mini::surf::target::set(surface); mini::surf::target::set(surface);
return 0; return 0;
} }
@@ -168,15 +168,31 @@ namespace mini
}; };
} }
static int target_push(lua_State *L) {
const int numargs = lua_gettop(L);
if (numargs==1) {
uint8_t surface = luaL_checkinteger(L, 1);
mini::surf::target::push(surface);
return 0;
} else {
return luaL_error(L, "Function 'surface.target.push' Unexpected number of parameters.");
};
}
static int target_pop(lua_State *L) {
mini::surf::target::pop();
return 0;
}
static int source(lua_State *L) { static int source(lua_State *L) {
const int numargs = lua_gettop(L); const int numargs = lua_gettop(L);
switch (numargs) { switch (numargs) {
case 0: { case 1: {
lua_pushinteger(L, mini::surf::source::get()); lua_pushinteger(L, mini::surf::source::get());
return 1; return 1;
} }
case 1: { case 2: {
uint8_t surface = luaL_checkinteger(L, 1); uint8_t surface = luaL_checkinteger(L, 2);
mini::surf::source::set(surface); mini::surf::source::set(surface);
return 0; return 0;
} }
@@ -185,6 +201,22 @@ namespace mini
}; };
} }
static int source_push(lua_State *L) {
const int numargs = lua_gettop(L);
if (numargs==1) {
uint8_t surface = luaL_checkinteger(L, 1);
mini::surf::source::push(surface);
return 0;
} else {
return luaL_error(L, "Function 'surface.source.push' Unexpected number of parameters.");
};
}
static int source_pop(lua_State *L) {
mini::surf::source::pop();
return 0;
}
static int cls(lua_State *L) { static int cls(lua_State *L) {
uint8_t color = luaL_optinteger(L, 1, 0); uint8_t color = luaL_optinteger(L, 1, 0);
mini::surf::cls(color); mini::surf::cls(color);
@@ -1046,8 +1078,23 @@ namespace mini
lua_pushcfunction(L,wrappers::surf::save); lua_setfield(L, -2, "save"); lua_pushcfunction(L,wrappers::surf::save); lua_setfield(L, -2, "save");
lua_pushcfunction(L,wrappers::surf::free); lua_setfield(L, -2, "free"); lua_pushcfunction(L,wrappers::surf::free); lua_setfield(L, -2, "free");
lua_pushcfunction(L,wrappers::surf::size); lua_setfield(L, -2, "size"); lua_pushcfunction(L,wrappers::surf::size); lua_setfield(L, -2, "size");
lua_pushcfunction(L,wrappers::surf::target); lua_setfield(L, -2, "target");
lua_pushcfunction(L,wrappers::surf::source); lua_setfield(L, -2, "source"); lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::target_push);lua_setfield(L, -2, "push");
lua_pushcfunction(L, wrappers::surf::target_pop); lua_setfield(L, -2, "pop");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::target); lua_setfield(L, -2, "__call");
lua_setmetatable(L, -2);
lua_setfield(L, -2, "target");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::source_push);lua_setfield(L, -2, "push");
lua_pushcfunction(L, wrappers::surf::source_pop); lua_setfield(L, -2, "pop");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::source); lua_setfield(L, -2, "__call");
lua_setmetatable(L, -2);
lua_setfield(L, -2, "source");
lua_pushcfunction(L,wrappers::surf::cls); lua_setfield(L, -2, "cls"); lua_pushcfunction(L,wrappers::surf::cls); lua_setfield(L, -2, "cls");
lua_pushcfunction(L,wrappers::surf::clip); lua_setfield(L, -2, "clip"); lua_pushcfunction(L,wrappers::surf::clip); lua_setfield(L, -2, "clip");
+20
View File
@@ -176,6 +176,16 @@ namespace mini
uint8_t get() { uint8_t get() {
return state.dest_surface; return state.dest_surface;
} }
void push(uint8_t surface) {
state.dest_stack.push(state.dest_surface);
state.dest_surface = surface;
}
void pop() {
state.dest_surface = state.dest_stack.top();
state.dest_stack.pop();
}
} }
namespace source { namespace source {
@@ -186,6 +196,16 @@ namespace mini
uint8_t get() { uint8_t get() {
return state.source_surface; return state.source_surface;
} }
void push(uint8_t surface) {
state.source_stack.push(state.source_surface);
state.source_surface = surface;
}
void pop() {
state.source_surface = state.source_stack.top();
state.source_stack.pop();
}
} }
namespace clip { namespace clip {
+7
View File
@@ -2,6 +2,7 @@
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
#include <stack>
namespace mini namespace mini
{ {
@@ -27,6 +28,8 @@ namespace mini
std::vector<surface_t> surfaces; std::vector<surface_t> surfaces;
int dest_surface = -1; int dest_surface = -1;
int source_surface = -1; int source_surface = -1;
std::stack<int> dest_stack;
std::stack<int> source_stack;
}; };
extern state_t state; extern state_t state;
@@ -46,11 +49,15 @@ namespace mini
namespace target { namespace target {
void set(uint8_t surface); void set(uint8_t surface);
uint8_t get(); uint8_t get();
void push(uint8_t surface);
void pop();
} }
namespace source { namespace source {
void set(uint8_t surface); void set(uint8_t surface);
uint8_t get(); uint8_t get();
void push(uint8_t surface);
void pop();
} }
namespace clip { namespace clip {
+18
View File
@@ -38,6 +38,8 @@ function surf.free(surface) end
---Retrieve width and height of surface ---Retrieve width and height of surface
function surf.size(surface) end function surf.size(surface) end
surf.target = {}
---@return number surface ---@return number surface
---Get current target surface ---Get current target surface
function surf.target() end function surf.target() end
@@ -46,6 +48,15 @@ function surf.target() end
---Set surface as target ---Set surface as target
function surf.target(surface) end function surf.target(surface) end
---@param surface number
---push current target to the stack and set surface as target
function surf.target.push(surface) end
---pop surface on the stack as current target
function surf.target.pop() end
surf.source = {}
---@return number surface ---@return number surface
---Get current source surface ---Get current source surface
function surf.source() end function surf.source() end
@@ -54,6 +65,13 @@ function surf.source() end
---Set surface as source ---Set surface as source
function surf.source(surface) end function surf.source(surface) end
---@param surface number
---push current source to the stack and set surface as source
function surf.source.push(surface) end
---pop surface on the stack and set it as current source
function surf.source.pop() end
---Erase the current target surface with color 0. ---Erase the current target surface with color 0.
function surf.cls() end function surf.cls() end