Browse Source

added memory freeing functions for tex, mat, actors, etc

Iver 4 months ago
parent
commit
57e6c7b991

BIN
build/librasteriver.so


BIN
build/main.bin


BIN
compiled_libs/librasteriver.so


+ 17 - 0
src/headers/functions.h

@@ -53,6 +53,23 @@ void RI_draw_line(RI_texture *target_texture, RI_vector_2 point_a, RI_vector_2 p
 void RI_wipe_texture(RI_texture *target_texture, uint32_t color);
 void RI_wipe_texture(RI_texture *target_texture, uint32_t color);
 
 
 
 
+// ----- memory
+
+// Unallocated a scene
+void RI_free_scene(RI_scene *scene);
+
+// Unallocates a texture 
+void RI_free_texture(RI_texture *texture);
+
+// Unallocates a material (NOT it's references)
+void RI_free_material(RI_material *material);
+
+// Unallocated a mesh
+void RI_free_mesh(RI_mesh *mesh);
+
+// Unallocated an actor (NOT it's references)
+void RI_free_actor(RI_actor *actor);
+
 // ------ other
 // ------ other
 
 
 int RI_add_actors_to_scene(int RI_number_of_actors_to_add_to_scene, RI_actor **actors, RI_scene *scene);
 int RI_add_actors_to_scene(int RI_number_of_actors_to_add_to_scene, RI_actor **actors, RI_scene *scene);

+ 13 - 0
src/launch_program/main.c

@@ -112,6 +112,19 @@ int main(){
 
 
     free(fps_string);
     free(fps_string);
 
 
+    RI_free_texture(bill_material->texture_reference);
+    RI_free_texture(text_plane_material->texture_reference);
+
+    RI_free_material(bill_material);
+    RI_free_material(text_plane_material);
+
+    RI_free_mesh(plane_mesh);
+    
+    RI_free_actor(bill_plane);
+    RI_free_actor(text_plane);
+
+    RI_free_scene(scene);
+
     RI_stop(0);
     RI_stop(0);
 
 
     SP_free_font(comic_sans);
     SP_free_font(comic_sans);

+ 51 - 21
src/library/rasteriver.c

@@ -1219,30 +1219,60 @@ int sdl_init(int RI_window_width, int RI_window_height, char *RI_window_title){
     return 0;
     return 0;
 }
 }
 
 
-int RI_stop(int result){
-    debug("[Notice] Stopping...");
-    
-    for (int scene_index = 0; scene_index < ri.scene_count; ++scene_index){
-        RI_free(ri.scenes[scene_index].faces_to_render);
-        RI_free(ri.scenes[scene_index].actors);
-    }
+void RI_free_scene(RI_scene *scene){
+    if (!scene){
+        debug("[RI_free_scene] Cannot free scene, already frung");
+        return;
+    } 
 
 
-    for (int mesh_index = 0; mesh_index < ri.loaded_mesh_count; ++mesh_index){
-        RI_free(ri.loaded_meshes[mesh_index].faces);
-        RI_free(ri.loaded_meshes[mesh_index].vertex_positions);
-        RI_free(ri.loaded_meshes[mesh_index].normals);
-        RI_free(ri.loaded_meshes[mesh_index].uvs);
-    }
+    if (scene->actors) RI_free(scene->actors);
+    if (scene->faces_to_render) RI_free(scene->faces_to_render);
+    RI_free(scene);
+}
 
 
-    for (int texture_index = 0; texture_index < ri.loaded_texture_count; ++texture_index){
-        RI_free(ri.loaded_textures[texture_index].image_buffer);
-    }
+void RI_free_texture(RI_texture *texture){
+    if (!texture){
+        debug("[RI_free_texture] Cannot free texture, already frung");
+        return;
+    } 
+
+    if (texture->image_buffer) RI_free(texture->image_buffer);
+    RI_free(texture);
+}
+
+void RI_free_material(RI_material *material){
+    if (!material){
+        debug("[RI_free_material] Cannot free material, already frung");
+        return;
+    } 
 
 
-    RI_free(ri.loaded_meshes);
-    RI_free(ri.loaded_textures);
-    RI_free(ri.materials);
-    RI_free(ri.actors);
-    RI_free(ri.scenes);
+    RI_free(material);
+}
+
+void RI_free_mesh(RI_mesh *mesh){
+    if (!mesh){
+        debug("[RI_free_mesh] Cannot free mesh, already frung");
+        return;
+    } 
+
+    if (mesh->faces) RI_free(mesh->faces);
+    if (mesh->normals) RI_free(mesh->normals);
+    if (mesh->uvs) RI_free(mesh->uvs);
+    if (mesh->vertex_positions) RI_free(mesh->vertex_positions);
+    RI_free(mesh);
+}
+
+void RI_free_actor(RI_actor *actor){
+    if (!actor){
+        debug("[RI_free_actor] Cannot free actor, already frung");
+        return;
+    } 
+
+    RI_free(actor);
+}
+
+int RI_stop(int result){
+    debug("[Notice] Stopping...");
 
 
     RI_free(ri.error_texture.image_buffer);
     RI_free(ri.error_texture.image_buffer);
     RI_free(ri.frame_buffer->image_buffer);
     RI_free(ri.frame_buffer->image_buffer);