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:
parent
64dd9a117d
commit
2325d15d02
|
@ -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);
|
||||
|
||||
|
|
|
@ -77,8 +77,6 @@ struct GPULamp {
|
|||
GPUTexture *depthtex;
|
||||
GPUTexture *blurtex;
|
||||
|
||||
ListBase materials;
|
||||
|
||||
/* New viewport */
|
||||
struct LampEngineData data;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue