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:
Pratik Borhade
2025-04-03 19:12:54 +02:00
committed by Julian Eisel
parent 0b67bbc16a
commit b2950de4a2
3 changed files with 10 additions and 1 deletions

View File

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

View File

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

View File

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