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 b50839038d.
This commit is contained in:
Dalai Felinto 2017-07-11 11:00:46 +02:00
parent 64dd9a117d
commit 2325d15d02
3 changed files with 0 additions and 32 deletions

View File

@ -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);

View File

@ -77,8 +77,6 @@ struct GPULamp {
GPUTexture *depthtex;
GPUTexture *blurtex;
ListBase materials;
/* New viewport */
struct LampEngineData data;
};

View File

@ -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;
}