浏览代码

REVIEWED: Material params #1649

Just assigned a fixed memory size for custom Material parameters in case of being required, so we shouldn't worry about allocating/freeing them.
Ray 4 年之前
父节点
当前提交
664fbb87f5
共有 3 个文件被更改,包括 8 次插入17 次删除
  1. 6 15
      src/models.c
  2. 1 1
      src/raylib.h
  3. 1 1
      src/rlgl.h

+ 6 - 15
src/models.c

@@ -797,15 +797,11 @@ void UnloadModel(Model model)
     // Unload meshes
     for (int i = 0; i < model.meshCount; i++) UnloadMesh(model.meshes[i]);
 
-    // Unload materials maps  and params
+    // Unload materials maps
     // NOTE: As the user could be sharing shaders and textures between models,
-    // we don't unload the material but just free it's maps and params,
+    // we don't unload the material but just free it's maps,
     // the user is responsible for freeing models shaders and textures
-    for (int i = 0; i < model.materialCount; i++)
-    {
-        RL_FREE(model.materials[i].maps);
-        RL_FREE(model.materials[i].params);
-    }
+    for (int i = 0; i < model.materialCount; i++) RL_FREE(model.materials[i].maps);
 
     // Unload arrays
     RL_FREE(model.meshes);
@@ -822,15 +818,11 @@ void UnloadModel(Model model)
 // Unload model (but not meshes) from memory (RAM and/or VRAM)
 void UnloadModelKeepMeshes(Model model)
 {
-    // Unload materials maps  and params
+    // Unload materials maps
     // NOTE: As the user could be sharing shaders and textures between models,
-    // we don't unload the material but just free it's maps and params,
+    // we don't unload the material but just free it's maps,
     // the user is responsible for freeing models shaders and textures
-    for (int i = 0; i < model.materialCount; i++)
-    {
-        RL_FREE(model.materials[i].maps);
-        RL_FREE(model.materials[i].params);
-    }
+    for (int i = 0; i < model.materialCount; i++) RL_FREE(model.materials[i].maps);
 
     // Unload arrays
     RL_FREE(model.meshes);
@@ -1013,7 +1005,6 @@ void UnloadMaterial(Material material)
     }
 
     RL_FREE(material.maps);
-    RL_FREE(material.params);
 }
 
 // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)

+ 1 - 1
src/raylib.h

@@ -349,7 +349,7 @@ typedef struct MaterialMap {
 typedef struct Material {
     Shader shader;          // Material shader
     MaterialMap *maps;      // Material maps array (MAX_MATERIAL_MAPS)
-    float *params;          // Material generic parameters (if required)
+    float params[4];        // Material generic parameters (if required)
 } Material;
 
 // Transformation properties

+ 1 - 1
src/rlgl.h

@@ -316,7 +316,7 @@ typedef enum {
     typedef struct Material {
         Shader shader;          // Material shader
         MaterialMap *maps;      // Material maps (MAX_MATERIAL_MAPS)
-        float *params;          // Material generic parameters (if required)
+        float params[4];        // Material generic parameters (if required)
     } Material;
 
     // Camera type, defines a camera position/orientation in 3d space