Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/engine.c
| Show First 20 Lines • Show All 193 Lines • ▼ Show 20 Lines | static RenderResult *render_result_from_bake(RenderEngine *engine, int x, int y, int w, int h) | ||||
| BLI_addtail(&rr->layers, rl); | BLI_addtail(&rr->layers, rl); | ||||
| /* Add render passes. */ | /* Add render passes. */ | ||||
| RenderPass *result_pass = render_layer_add_pass( | RenderPass *result_pass = render_layer_add_pass( | ||||
| rr, rl, engine->bake.depth, RE_PASSNAME_COMBINED, "", "RGBA"); | rr, rl, engine->bake.depth, RE_PASSNAME_COMBINED, "", "RGBA"); | ||||
| RenderPass *primitive_pass = render_layer_add_pass(rr, rl, 4, "BakePrimitive", "", "RGBA"); | RenderPass *primitive_pass = render_layer_add_pass(rr, rl, 4, "BakePrimitive", "", "RGBA"); | ||||
| RenderPass *differential_pass = render_layer_add_pass(rr, rl, 4, "BakeDifferential", "", "RGBA"); | RenderPass *differential_pass = render_layer_add_pass(rr, rl, 4, "BakeDifferential", "", "RGBA"); | ||||
| render_result_passes_allocated_ensure(rr); | |||||
| /* Fill render passes from bake pixel array, to be read by the render engine. */ | /* Fill render passes from bake pixel array, to be read by the render engine. */ | ||||
| for (int ty = 0; ty < h; ty++) { | for (int ty = 0; ty < h; ty++) { | ||||
| size_t offset = ty * w * 4; | size_t offset = ty * w * 4; | ||||
| float *primitive = primitive_pass->rect + offset; | float *primitive = primitive_pass->rect + offset; | ||||
| float *differential = differential_pass->rect + offset; | float *differential = differential_pass->rect + offset; | ||||
| size_t bake_offset = (y + ty) * engine->bake.width + x; | size_t bake_offset = (y + ty) * engine->bake.width + x; | ||||
| const BakePixel *bake_pixel = engine->bake.pixels + bake_offset; | const BakePixel *bake_pixel = engine->bake.pixels + bake_offset; | ||||
| ▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | RenderResult *RE_engine_begin_result( | ||||
| result = render_result_new(re, &disprect, RR_USE_MEM, layername, viewname); | result = render_result_new(re, &disprect, RR_USE_MEM, layername, viewname); | ||||
| /* TODO: make this thread safe. */ | /* TODO: make this thread safe. */ | ||||
| /* can be NULL if we CLAMP the width or height to 0 */ | /* can be NULL if we CLAMP the width or height to 0 */ | ||||
| if (result) { | if (result) { | ||||
| render_result_clone_passes(re, result, viewname); | render_result_clone_passes(re, result, viewname); | ||||
| render_result_passes_allocated_ensure(result); | |||||
| RenderPart *pa; | RenderPart *pa; | ||||
| /* Copy EXR tile settings, so pipeline knows whether this is a result | /* Copy EXR tile settings, so pipeline knows whether this is a result | ||||
| * for Save Buffers enabled rendering. | * for Save Buffers enabled rendering. | ||||
| */ | */ | ||||
| result->do_exr_tile = re->result->do_exr_tile; | result->do_exr_tile = re->result->do_exr_tile; | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 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) { | |||||
| 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 721 Lines • Show Last 20 Lines | |||||