Fix #124876: EEVEE: Missing render frame progress in stdout

Print progression and `Instance::info` to stdout.
Add more context about missing support for canceling renders and progress reports.

Pull Request: https://projects.blender.org/blender/blender/pulls/125094
This commit is contained in:
Miguel Pozo
2024-07-22 13:18:33 +02:00
parent 8fc617d8e2
commit 9d797b834e
3 changed files with 19 additions and 5 deletions

View File

@@ -167,7 +167,7 @@ static void eevee_render_to_image(void *vedata,
rcti visible_rect = rect;
instance->init(size, &rect, &visible_rect, engine, depsgraph, camera_original_ob, layer);
instance->render_frame(layer, viewname);
instance->render_frame(engine, layer, viewname);
EEVEE_Data *ved = static_cast<EEVEE_Data *>(vedata);
delete ved->instance;

View File

@@ -419,6 +419,10 @@ void Instance::render_sample()
/* Motion blur may need to do re-sync after a certain number of sample. */
if (!is_viewport() && sampling.do_render_sync()) {
render_sync();
if (!info.empty()) {
printf(info.c_str());
info = "";
}
}
DebugScope debug_scope(debug_scope_render_sample, "EEVEE.render_sample");
@@ -510,14 +514,24 @@ void Instance::render_read_result(RenderLayer *render_layer, const char *view_na
/** \name Interface
* \{ */
void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
void Instance::render_frame(RenderEngine *engine, RenderLayer *render_layer, const char *view_name)
{
/* TODO: Break on RE_engine_test_break(engine) */
while (!sampling.finished()) {
this->render_sample();
/* TODO(fclem) print progression. */
if ((sampling.sample_index() == 1) || ((sampling.sample_index() % 25) == 0) ||
sampling.finished())
{
/* TODO: Use fmt. */
std::string re_info = "Rendering " + std::to_string(sampling.sample_index()) + " / " +
std::to_string(sampling.sample_count()) + " samples";
RE_engine_update_stats(engine, nullptr, re_info.c_str());
}
#if 0
/* TODO(fclem) print progression. */
RE_engine_update_progress(engine, float(sampling.sample_index()) / float(sampling.sample_count()));
/* TODO(fclem): Does not currently work. But would be better to just display to 2D view like
* cycles does. */
if (G.background == false && first_read) {

View File

@@ -207,7 +207,7 @@ class Instance {
/* Render. */
void render_sync();
void render_frame(RenderLayer *render_layer, const char *view_name);
void render_frame(RenderEngine *engine, RenderLayer *render_layer, const char *view_name);
void store_metadata(RenderResult *render_result);
/* Viewport. */