132
132
return RE_engine_create_ex(type, FALSE);
135
RenderEngine *RE_engine_create_ex(RenderEngineType *type, int use_for_viewport)
135
RenderEngine *RE_engine_create_ex(RenderEngineType *type, bool use_for_viewport)
137
137
RenderEngine *engine = MEM_callocN(sizeof(RenderEngine), "RenderEngine");
138
138
engine->type = type;
253
250
/* for exr tile render, detect tiles that are done */
254
251
RenderPart *pa = get_part_from_result(re, result);
257
254
pa->status = PART_STATUS_READY;
256
else if (re->result->do_exr_tile) {
257
/* if written result does not match any tile and we are using save
258
* buffers, we are going to get openexr save errors */
259
fprintf(stderr, "RenderEngine.end_result: dimensions do not match any OpenEXR tile.\n");
259
262
if (re->result->do_exr_tile)
260
263
render_result_exr_file_merge(re->result, result);
261
else if (!(re->test_break(re->tbh) && (re->r.scemode & R_PREVIEWBUTS)))
264
else if (!(re->test_break(re->tbh) && (re->r.scemode & R_BUTS_PREVIEW)))
262
265
render_result_merge(re->result, result);
303
306
/* set engine text */
305
MEM_freeN(engine->text);
307
engine->text[0] = '\0';
309
309
if (stats && stats[0] && info && info[0])
310
engine->text = BLI_sprintfN("%s | %s", stats, info);
310
BLI_snprintf(engine->text, sizeof(engine->text), "%s | %s", stats, info);
311
311
else if (info && info[0])
312
engine->text = BLI_strdup(info);
312
BLI_strncpy(engine->text, info, sizeof(engine->text));
313
313
else if (stats && stats[0])
314
engine->text = BLI_strdup(stats);
314
BLI_strncpy(engine->text, info, sizeof(engine->text));
317
317
void RE_engine_update_progress(RenderEngine *engine, float progress)
396
401
/* verify if we can render */
397
402
if (!type->render)
399
if ((re->r.scemode & R_PREVIEWBUTS) && !(type->flag & RE_USE_PREVIEW))
404
if ((re->r.scemode & R_BUTS_PREVIEW) && !(type->flag & RE_USE_PREVIEW))
401
406
if (do_all && !(type->flag & RE_USE_POSTPROCESS))
403
408
if (!do_all && (type->flag & RE_USE_POSTPROCESS))
411
/* update animation here so any render layer animation is applied before
412
* creating the render result */
413
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
414
unsigned int lay = re->lay;
416
/* don't update layers excluded on all render layers */
417
if (type->flag & RE_USE_EXCLUDE_LAYERS) {
418
SceneRenderLayer *srl;
419
unsigned int non_excluded_lay = 0;
421
if (re->r.scemode & R_SINGLE_LAYER) {
422
srl = BLI_findlink(&re->r.layers, re->r.actlay);
424
non_excluded_lay |= ~srl->lay_exclude;
427
for (srl = re->r.layers.first; srl; srl = srl->next)
428
if (!(srl->layflag & SCE_LAY_DISABLE))
429
non_excluded_lay |= ~srl->lay_exclude;
432
lay &= non_excluded_lay;
435
BKE_scene_update_for_newframe(re->main, re->scene, lay);
406
438
/* create render result */
407
439
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
408
if (re->result == NULL || !(re->r.scemode & R_PREVIEWBUTS)) {
440
if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) {
441
int savebuffers = RR_USE_MEM;
412
444
render_result_free(re->result);
414
savebuffers = (re->r.scemode & R_EXR_TILE_FILE) ? RR_USE_EXR : RR_USE_MEM;
446
if ((type->flag & RE_USE_SAVE_BUFFERS) && (re->r.scemode & R_EXR_TILE_FILE))
447
savebuffers = RR_USE_EXR;
415
448
re->result = render_result_new(re, &re->disprect, 0, savebuffers, RR_ALL_LAYERS);
417
450
BLI_rw_mutex_unlock(&re->resultmutex);
440
473
if (re->flag & R_ANIMATION)
441
474
engine->flag |= RE_ENGINE_ANIMATION;
442
if (re->r.scemode & R_PREVIEWBUTS)
475
if (re->r.scemode & R_BUTS_PREVIEW)
443
476
engine->flag |= RE_ENGINE_PREVIEW;
444
477
engine->camera_override = re->camera_override;
446
479
engine->resolution_x = re->winx;
447
480
engine->resolution_y = re->winy;
449
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_PREVIEWBUTS)) == 0)
450
BKE_scene_update_for_newframe(re->main, re->scene, re->lay);
452
482
RE_parts_init(re, FALSE);
453
483
engine->tile_x = re->partx;
454
484
engine->tile_y = re->party;