diff options
| -rw-r--r-- | API.md | 26 | ||||
| -rw-r--r-- | ReiLua_API.lua | 22 | ||||
| -rw-r--r-- | changelog | 1 | ||||
| -rw-r--r-- | include/lrlgl.h | 4 | ||||
| -rw-r--r-- | include/lua_core.h | 2 | ||||
| -rw-r--r-- | src/lua_core.c | 37 | ||||
| -rw-r--r-- | src/rlgl.c | 58 |
7 files changed, 150 insertions, 0 deletions
@@ -9515,6 +9515,32 @@ Get default shader locations --- +> renderBatch = RL.rlLoadRenderBatch( int numBuffers, int bufferElements ) + +Load a render batch system + +- Success return rlRenderBatch + +--- + +> RL.rlUnloadRenderBatch( rlRenderBatch renderBatch ) + +Unload render batch system + +--- + +> RL.rlDrawRenderBatch( rlRenderBatch renderBatch ) + +Draw render batch data (Update->Draw->Reset) + +--- + +> RL.rlSetRenderBatchActive( rlRenderBatch renderBatch ) + +Set the active render batch for rlgl (nil for default internal) + +--- + > RL.rlDrawRenderBatchActive() Update and draw internal render batch diff --git a/ReiLua_API.lua b/ReiLua_API.lua index 2c72ded..b2d2787 100644 --- a/ReiLua_API.lua +++ b/ReiLua_API.lua @@ -6567,6 +6567,28 @@ function RL.rlGetShaderLocsDefault() end -- RLGL - Render batch management +---Load a render batch system +---- Success return rlRenderBatch +---@param numBuffers integer +---@param bufferElements integer +---@return any renderBatch +function RL.rlLoadRenderBatch( numBuffers, bufferElements ) end + +---Unload render batch system +---@param renderBatch any +---@return any RL.rlUnloadRenderBatch +function RL.rlUnloadRenderBatch( renderBatch ) end + +---Draw render batch data (Update->Draw->Reset) +---@param renderBatch any +---@return any RL.rlDrawRenderBatch +function RL.rlDrawRenderBatch( renderBatch ) end + +---Set the active render batch for rlgl (nil for default internal) +---@param renderBatch any +---@return any RL.rlSetRenderBatchActive +function RL.rlSetRenderBatchActive( renderBatch ) end + ---Update and draw internal render batch ---@return any RL.rlDrawRenderBatchActive function RL.rlDrawRenderBatchActive() end @@ -24,6 +24,7 @@ KEY CHANGES: - ADDED: More Model animations management functions. - ADDED: 2D lightmap example. - ADDED: RLGL Hello triangle example. + - ADDED: Rest of rlRenderBatch functions. DETAILED CHANGES: - REMOVED: DrawLineBezierQuad, DrawLineBezierCubic. diff --git a/include/lrlgl.h b/include/lrlgl.h index 57e7060..71d9641 100644 --- a/include/lrlgl.h +++ b/include/lrlgl.h @@ -84,6 +84,10 @@ int lrlglGetTextureIdDefault( lua_State *L ); int lrlglGetShaderIdDefault( lua_State *L ); int lrlglGetShaderLocsDefault( lua_State *L ); /* Render batch management */ +int lrlglLoadRenderBatch( lua_State *L ); +int lrlglUnloadRenderBatch( lua_State *L ); +int lrlglDrawRenderBatch( lua_State *L ); +int lrlglSetRenderBatchActive( lua_State *L ); int lrlglDrawRenderBatchActive( lua_State *L ); int lrlglCheckRenderBatchLimit( lua_State *L ); int lrlglSetTexture( lua_State *L ); diff --git a/include/lua_core.h b/include/lua_core.h index df3f1d6..ba56f27 100644 --- a/include/lua_core.h +++ b/include/lua_core.h @@ -64,6 +64,7 @@ Light* uluaGetLight( lua_State *L, int index ); Material* uluaGetMaterial( lua_State *L, int index ); Model* uluaGetModel( lua_State *L, int index ); ModelAnimation* uluaGetModelAnimation( lua_State *L, int index ); +rlRenderBatch* uluaGetRLRenderBatch( lua_State *L, int index ); /* Lua push types. */ void uluaPushColor( lua_State *L, Color color ); void uluaPushVector2( lua_State *L, Vector2 vector ); @@ -94,5 +95,6 @@ void uluaPushMaterial( lua_State *L, Material material ); void uluaPushMesh( lua_State *L, Mesh mesh ); void uluaPushModel( lua_State *L, Model model ); void uluaPushModelAnimation( lua_State *L, ModelAnimation modelAnimation ); +void uluaPushRLRenderBatch( lua_State *L, rlRenderBatch renderBatch ); /* Utils. */ int uluaGetTableLen( lua_State *L, int index ); diff --git a/src/lua_core.c b/src/lua_core.c index 68fb05b..61f08b5 100644 --- a/src/lua_core.c +++ b/src/lua_core.c @@ -299,6 +299,25 @@ static void defineModelAnimation() { lua_setfield( L, -2, "__gc" ); } + /* rlRenderBatch. */ +static int gcRLRenderBatch( lua_State *L ) { + if ( state->gcUnload ) { + rlRenderBatch *renderBatch = luaL_checkudata( L, 1, "rlRenderBatch" ); + rlUnloadRenderBatch( *renderBatch ); + } + return 0; +} + +static void defineRLRenderBatch() { + lua_State *L = state->luaState; + + luaL_newmetatable( L, "rlRenderBatch" ); + lua_pushvalue( L, -1 ); + lua_setfield( L, -2, "__index" ); + lua_pushcfunction( L, gcRLRenderBatch ); + lua_setfield( L, -2, "__gc" ); +} + /* Assing globals. */ void assignGlobalInt( int value, const char *name ) { @@ -993,6 +1012,7 @@ bool luaInit( int argn, const char **argc ) { defineMesh(); defineModel(); defineModelAnimation(); + defineRLRenderBatch(); /* Define globals. */ defineGlobals(); platformDefineGlobals(); @@ -2031,6 +2051,10 @@ void luaRegister() { assingGlobalFunction( "rlGetShaderIdDefault", lrlglGetShaderIdDefault ); assingGlobalFunction( "rlGetShaderLocsDefault", lrlglGetShaderLocsDefault ); /* Render batch management. */ + assingGlobalFunction( "rlLoadRenderBatch", lrlglLoadRenderBatch ); + assingGlobalFunction( "rlUnloadRenderBatch", lrlglUnloadRenderBatch ); + assingGlobalFunction( "rlDrawRenderBatch", lrlglDrawRenderBatch ); + assingGlobalFunction( "rlSetRenderBatchActive", lrlglSetRenderBatchActive ); assingGlobalFunction( "rlDrawRenderBatchActive", lrlglDrawRenderBatchActive ); assingGlobalFunction( "rlCheckRenderBatchLimit", lrlglCheckRenderBatchLimit ); assingGlobalFunction( "rlSetTexture", lrlglSetTexture ); @@ -2842,6 +2866,13 @@ ModelAnimation* uluaGetModelAnimation( lua_State *L, int index ) { return luaL_checkudata( L, index, "ModelAnimation" ); } +rlRenderBatch* uluaGetRLRenderBatch( lua_State *L, int index ) { + if ( lua_islightuserdata( L, index ) ) { + return (rlRenderBatch*)lua_touserdata( L, index ); + } + return luaL_checkudata( L, index, "rlRenderBatch" ); +} + /* Push types. */ void uluaPushColor( lua_State *L, Color color ) { @@ -3145,6 +3176,12 @@ void uluaPushModelAnimation( lua_State *L, ModelAnimation modelAnimation ) { luaL_setmetatable( L, "ModelAnimation" ); } +void uluaPushRLRenderBatch( lua_State *L, rlRenderBatch renderBatch ) { + rlRenderBatch *renderBatchP = lua_newuserdata( L, sizeof( rlRenderBatch ) ); + *renderBatchP = renderBatch; + luaL_setmetatable( L, "rlRenderBatch" ); +} + int uluaGetTableLen( lua_State *L, int index ) { luaL_checktype( L, index, LUA_TTABLE ); int t = index, i = 0; @@ -967,6 +967,64 @@ int lrlglGetShaderLocsDefault( lua_State *L ) { */ /* +> renderBatch = RL.rlLoadRenderBatch( int numBuffers, int bufferElements ) + +Load a render batch system + +- Success return rlRenderBatch +*/ +int lrlglLoadRenderBatch( lua_State *L ) { + int numBuffers = luaL_checkinteger( L, 1 ); + int bufferElements = luaL_checkinteger( L, 2 ); + + uluaPushRLRenderBatch( L, rlLoadRenderBatch( numBuffers, bufferElements ) ); + + return 1; +} + +/* +> RL.rlUnloadRenderBatch( rlRenderBatch renderBatch ) + +Unload render batch system +*/ +int lrlglUnloadRenderBatch( lua_State *L ) { + rlRenderBatch *renderBatch = uluaGetRLRenderBatch( L, 1 ); + + rlUnloadRenderBatch( *renderBatch ); + + return 0; +} + +/* +> RL.rlDrawRenderBatch( rlRenderBatch renderBatch ) + +Draw render batch data (Update->Draw->Reset) +*/ +int lrlglDrawRenderBatch( lua_State *L ) { + rlRenderBatch *renderBatch = uluaGetRLRenderBatch( L, 1 ); + + rlDrawRenderBatch( renderBatch ); + + return 0; +} + +/* +> RL.rlSetRenderBatchActive( rlRenderBatch renderBatch ) + +Set the active render batch for rlgl (nil for default internal) +*/ +int lrlglSetRenderBatchActive( lua_State *L ) { + rlRenderBatch *renderBatch = NULL; + + if ( !lua_isnil( L, 1 ) ) { + renderBatch = uluaGetRLRenderBatch( L, 1 ); + } + rlSetRenderBatchActive( renderBatch ); + + return 0; +} + +/* > RL.rlDrawRenderBatchActive() Update and draw internal render batch |
