[Bf-blender-cvs] [2325d15d02e] blender2.8: Lamps should not have their own gpu material

Dalai Felinto noreply at git.blender.org
Tue Jul 11 11:03:08 CEST 2017


Commit: 2325d15d02e9e0b1fda2586ad5ffbe8364e706f4
Author: Dalai Felinto
Date:   Tue Jul 11 11:00:46 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2325d15d02e9e0b1fda2586ad5ffbe8364e706f4

Lamps should not have their own gpu material

This was leading to multiple crashes when freeing the lamps or
materials when opening old files.

Follow up on b50839038d6b3d2.

===================================================================

M	source/blender/gpu/intern/gpu_lamp.c
M	source/blender/gpu/intern/gpu_lamp_private.h
M	source/blender/gpu/intern/gpu_material.c

===================================================================

diff --git a/source/blender/gpu/intern/gpu_lamp.c b/source/blender/gpu/intern/gpu_lamp.c
index 12b9eaf22f8..8bf343568b1 100644
--- a/source/blender/gpu/intern/gpu_lamp.c
+++ b/source/blender/gpu/intern/gpu_lamp.c
@@ -386,21 +386,10 @@ void GPU_lamp_free(Object *ob)
 {
 	GPULamp *lamp;
 	LinkData *link;
-	LinkData *nlink;
-	Material *ma;
 
 	for (link = ob->gpulamp.first; link; link = link->next) {
 		lamp = link->data;
 
-		while (lamp->materials.first) {
-			nlink = lamp->materials.first;
-			ma = nlink->data;
-			BLI_freelinkN(&lamp->materials, nlink);
-
-			if (ma->gpumaterial.first)
-				GPU_material_free(&ma->gpumaterial);
-		}
-
 		gpu_lamp_shadow_free(lamp);
 		GPU_lamp_engine_data_free(&lamp->data);
 
diff --git a/source/blender/gpu/intern/gpu_lamp_private.h b/source/blender/gpu/intern/gpu_lamp_private.h
index ef71385e66d..f227ce74e7e 100644
--- a/source/blender/gpu/intern/gpu_lamp_private.h
+++ b/source/blender/gpu/intern/gpu_lamp_private.h
@@ -77,8 +77,6 @@ struct GPULamp {
 	GPUTexture *depthtex;
 	GPUTexture *blurtex;
 
-	ListBase materials;
-
 	/* New viewport */
 	struct LampEngineData data;
 };
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index 40d1acfabd1..efe79c0386c 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -250,21 +250,6 @@ void GPU_material_free(ListBase *gpumaterial)
 		if (material->pass)
 			GPU_pass_free(material->pass);
 
-		for (LinkData *nlink = material->lamps.first; nlink; nlink = nlink->next) {
-			GPULamp *lamp = nlink->data;
-
-			if (material->ma) {
-				Material *ma = material->ma;
-				
-				LinkData *next = NULL;
-				for (LinkData *mlink = lamp->materials.first; mlink; mlink = next) {
-					next = mlink->next;
-					if (mlink->data == ma)
-						BLI_freelinkN(&lamp->materials, mlink);
-				}
-			}
-		}
-		
 		BLI_freelistN(&material->lamps);
 
 		MEM_freeN(material);
@@ -904,14 +889,12 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
 				}
 				
 				add_user_list(&mat->lamps, lamp);
-				add_user_list(&lamp->materials, shi->gpumat->ma);
 				return;
 			}
 		}
 	}
 	else if ((mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS) && (lamp->mode & LA_ONLYSHADOW)) {
 		add_user_list(&mat->lamps, lamp);
-		add_user_list(&lamp->materials, shi->gpumat->ma);
 		return;
 	}
 	else
@@ -978,7 +961,6 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
 	}
 
 	add_user_list(&mat->lamps, lamp);
-	add_user_list(&lamp->materials, shi->gpumat->ma);
 }
 
 static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr)
@@ -2289,7 +2271,6 @@ GPUNodeLink *GPU_lamp_get_data(
 
 	/* ensure shadow buffer and lamp textures will be updated */
 	add_user_list(&mat->lamps, lamp);
-	add_user_list(&lamp->materials, mat->ma);
 
 	return visifac;
 }




More information about the Bf-blender-cvs mailing list