Fix #136645: Regression: Preview generation fails for multiple IDs
Fixes: #136842, #136645
Caused by 76d6d169ba
When multiple objects are selected to mark as assets, preview generation
job of previous ID in the for loop is cleared by `ED_preview_kill_jobs`
inside `generate_preview`. To fix this, check if `id->preview` exists then
clear the preview job if exists inside the new function
`ED_preview_kill_jobs_for_id`.
Solution proposed by @JulianEisel. I came up with idea to use `wm_job_find`
Pull Request: https://projects.blender.org/blender/blender/pulls/136918
This commit is contained in:
committed by
Julian Eisel
parent
0b67bbc16a
commit
b2950de4a2
@@ -61,7 +61,7 @@ void generate_preview(const bContext *C, ID *id)
|
||||
return;
|
||||
}
|
||||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
ED_preview_kill_jobs_for_id(CTX_wm_manager(C), id);
|
||||
|
||||
PreviewImage *preview = BKE_previewimg_id_get(id);
|
||||
if (preview) {
|
||||
|
||||
@@ -113,6 +113,7 @@ void ED_preview_restart_queue_add(ID *id, enum eIconSizes size);
|
||||
void ED_preview_restart_queue_work(const bContext *C);
|
||||
|
||||
void ED_preview_kill_jobs(wmWindowManager *wm, Main *bmain);
|
||||
void ED_preview_kill_jobs_for_id(wmWindowManager *wm, const ID *id);
|
||||
|
||||
void ED_preview_draw(
|
||||
const bContext *C, void *idp, void *parentp, void *slotp, uiPreview *ui_preview, rcti *rect);
|
||||
|
||||
@@ -2171,6 +2171,14 @@ void ED_preview_kill_jobs(wmWindowManager *wm, Main * /*bmain*/)
|
||||
}
|
||||
}
|
||||
|
||||
void ED_preview_kill_jobs_for_id(wmWindowManager *wm, const ID *id)
|
||||
{
|
||||
const PreviewImage *preview = BKE_previewimg_id_get(id);
|
||||
if (wm && preview) {
|
||||
WM_jobs_kill_type(wm, preview, WM_JOB_TYPE_RENDER_PREVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
struct PreviewRestartQueueEntry {
|
||||
PreviewRestartQueueEntry *next, *prev;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user