From c3295e014d979c0213b3fb7e4837b5356bc8fdb4 Mon Sep 17 00:00:00 2001 From: jussi Date: Mon, 30 Oct 2023 22:40:20 +0200 Subject: Reintroducing Unload functions. Is*Ready functions. GC_UNLOAD setting and check function. --- src/models.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 2 deletions(-) (limited to 'src/models.c') diff --git a/src/models.c b/src/models.c index 75f07fd..330346f 100644 --- a/src/models.c +++ b/src/models.c @@ -923,6 +923,19 @@ int lmodelsUpdateMesh( lua_State *L ) { return 0; } +/* +> RL.UnloadMesh( Mesh mesh ) + +Unload mesh data from CPU and GPU +*/ +int lmodelsUnloadMesh( lua_State *L ) { + Mesh *mesh = uluaGetMesh( L, 1 ); + + UnloadMesh( *mesh ); + + return 0; +} + /* > RL.DrawMesh( Mesh mesh, Material material, Matrix transform ) @@ -1046,10 +1059,23 @@ int lmodelsGenMeshTangents( lua_State *L ) { ## Models - Material */ +/* +> material = RL.GetMaterialDefault() + +Default material for reference. Return as lightuserdata + +- Success return Material +*/ +int lmodelsGetMaterialDefault( lua_State *L ) { + lua_pushlightuserdata( L, &state->defaultMaterial ); + + return 1; +} + /* > material = RL.LoadMaterialDefault() -Load default material +Load default material as new object - Success return Material */ @@ -1144,6 +1170,37 @@ int lmodelsCreateMaterial( lua_State *L ) { return 1; } +/* +> isReady = RL.IsMaterialReady( Material material ) + +Check if a material is ready + +- Success return bool +*/ +int lmodelsIsMaterialReady( lua_State *L ) { + Material *material = uluaGetMaterial( L, 1 ); + + lua_pushboolean( L, IsMaterialReady( *material ) ); + + return 1; +} + +/* +> RL.UnloadMaterial( Material material ) + +Unload material from GPU memory (VRAM) +*/ +int lmodelsUnloadMaterial( lua_State *L ) { + Material *material = uluaGetMaterial( L, 1 ); + + /* Custom UnloadMaterial since we don't want to free Shaders or Textures. */ + RL_FREE( material->maps ); + + // UnloadMaterial( *material ); + + return 0; +} + /* > RL.SetMaterialTexture( Material material, int mapType, Texture texture ) @@ -1286,7 +1343,7 @@ int lmodelsGetMaterialValue( lua_State *L ) { Get material shader -- Success return Shader. Returns as lightuserdata +- Success return Shader. Return as lightuserdata */ int lmodelsGetMaterialShader( lua_State *L ) { Material *material = uluaGetMaterial( L, 1 ); @@ -1356,6 +1413,34 @@ int lmodelsLoadModelFromMesh( lua_State *L ) { return 1; } +/* +> isReady = RL.IsModelReady( Model model ) + +Check if a model is ready + +- Success return bool +*/ +int lmodelsIsModelReady( lua_State *L ) { + Model *model = uluaGetModel( L, 1 ); + + lua_pushboolean( L, IsModelReady( *model ) ); + + return 1; +} + +/* +> RL.UnloadModel( Model model ) + +Unload model (including meshes) from memory (RAM and/or VRAM) +*/ +int lmodelsUnloadModel( lua_State *L ) { + Model *model = uluaGetModel( L, 1 ); + + UnloadModel( *model ); + + return 0; +} + /* > RL.DrawModel( Model model, Vector3 position, float scale, Color tint ) @@ -1400,6 +1485,8 @@ int lmodelsSetModelMaterial( lua_State *L ) { int modelMaterialId = luaL_checkinteger( L, 2 ); Material *material = uluaGetMaterial( L, 3 ); + //TODO Could maybe return old shader and textures for storage or get garbage collected? + /* Copy material data instead of using pointer. Pointer would result in double free error. */ model->materials[ modelMaterialId ].shader = material->shader; model->materials[ modelMaterialId ].maps[ MATERIAL_MAP_ALBEDO ] = material->maps[ MATERIAL_MAP_ALBEDO ]; -- cgit v1.2.3