[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