Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/engine.c
| Show First 20 Lines • Show All 359 Lines • ▼ Show 20 Lines | if (result) { | ||||
| if (pa) { | if (pa) { | ||||
| pa->status = PART_STATUS_IN_PROGRESS; | pa->status = PART_STATUS_IN_PROGRESS; | ||||
| } | } | ||||
| } | } | ||||
| return result; | return result; | ||||
| } | } | ||||
| static void re_ensure_passes_allocated_thread_safe(Render *re) | |||||
| { | |||||
| if (!re->result->passes_allocated) { | |||||
| BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | |||||
| if (!re->result->passes_allocated) { | |||||
| render_result_passes_allocated_ensure(re->result); | |||||
| } | |||||
| BLI_rw_mutex_unlock(&re->resultmutex); | |||||
| } | |||||
| } | |||||
| void RE_engine_update_result(RenderEngine *engine, RenderResult *result) | void RE_engine_update_result(RenderEngine *engine, RenderResult *result) | ||||
| { | { | ||||
| if (engine->bake.pixels) { | if (engine->bake.pixels) { | ||||
| /* No interactive baking updates for now. */ | /* No interactive baking updates for now. */ | ||||
| return; | return; | ||||
| } | } | ||||
| Render *re = engine->re; | Render *re = engine->re; | ||||
| if (result) { | if (result) { | ||||
| re_ensure_passes_allocated_thread_safe(re); | |||||
| render_result_merge(re->result, result); | render_result_merge(re->result, result); | ||||
| result->renlay = result->layers.first; /* weak, draws first layer always */ | result->renlay = result->layers.first; /* weak, draws first layer always */ | ||||
| re->display_update(re->duh, result, NULL); | re->display_update(re->duh, result, NULL); | ||||
| } | } | ||||
| } | } | ||||
| void RE_engine_add_pass(RenderEngine *engine, | void RE_engine_add_pass(RenderEngine *engine, | ||||
| const char *name, | const char *name, | ||||
| Show All 21 Lines | void RE_engine_end_result( | ||||
| if (engine->bake.pixels) { | if (engine->bake.pixels) { | ||||
| render_result_to_bake(engine, result); | render_result_to_bake(engine, result); | ||||
| BLI_remlink(&engine->fullresult, result); | BLI_remlink(&engine->fullresult, result); | ||||
| render_result_free(result); | render_result_free(result); | ||||
| return; | return; | ||||
| } | } | ||||
| if (!re->result->passes_allocated) { | re_ensure_passes_allocated_thread_safe(re); | ||||
| BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | |||||
| if (!re->result->passes_allocated) { | |||||
| render_result_passes_allocated_ensure(re->result); | |||||
| } | |||||
| BLI_rw_mutex_unlock(&re->resultmutex); | |||||
| } | |||||
| /* merge. on break, don't merge in result for preview renders, looks nicer */ | /* merge. on break, don't merge in result for preview renders, looks nicer */ | ||||
| if (!highlight) { | if (!highlight) { | ||||
| /* for exr tile render, detect tiles that are done */ | /* for exr tile render, detect tiles that are done */ | ||||
| RenderPart *pa = get_part_from_result(re, result); | RenderPart *pa = get_part_from_result(re, result); | ||||
| if (pa) { | if (pa) { | ||||
| pa->status = (!cancel && merge_results) ? PART_STATUS_MERGED : PART_STATUS_RENDERED; | pa->status = (!cancel && merge_results) ? PART_STATUS_MERGED : PART_STATUS_RENDERED; | ||||
| ▲ Show 20 Lines • Show All 746 Lines • Show Last 20 Lines | |||||