summaryrefslogtreecommitdiff
path: root/src/models.c
diff options
context:
space:
mode:
authorjussi2023-10-30 22:40:20 +0200
committerjussi2023-10-30 22:40:20 +0200
commitc3295e014d979c0213b3fb7e4837b5356bc8fdb4 (patch)
tree66ee22c7140761a17bf174d71fecfb94c1378b1d /src/models.c
parent6e0d577d63b221797cdc7f392718dd1c4fb384b4 (diff)
downloadreilua-enhanced-c3295e014d979c0213b3fb7e4837b5356bc8fdb4.tar.gz
reilua-enhanced-c3295e014d979c0213b3fb7e4837b5356bc8fdb4.tar.bz2
reilua-enhanced-c3295e014d979c0213b3fb7e4837b5356bc8fdb4.zip
Reintroducing Unload functions. Is*Ready functions. GC_UNLOAD setting and check function.
Diffstat (limited to 'src/models.c')
-rw-r--r--src/models.c91
1 files changed, 89 insertions, 2 deletions
diff --git a/src/models.c b/src/models.c
index 75f07fd..330346f 100644
--- a/src/models.c
+++ b/src/models.c
@@ -924,6 +924,19 @@ int lmodelsUpdateMesh( lua_State *L ) {
}
/*
+> 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 )
Draw a 3d mesh with material and transform
@@ -1047,9 +1060,22 @@ int lmodelsGenMeshTangents( lua_State *L ) {
*/
/*
+> 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
*/
@@ -1145,6 +1171,37 @@ int lmodelsCreateMaterial( lua_State *L ) {
}
/*
+> 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 )
Set texture for a material map type (MATERIAL_MAP_ALBEDO, MATERIAL_MAP_METALNESS...)
@@ -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 );
@@ -1357,6 +1414,34 @@ int lmodelsLoadModelFromMesh( lua_State *L ) {
}
/*
+> 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 )
Draw a model (With texture if set)
@@ -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 ];