EEVEE-Next: Cleanup: Isolate render result readback and prototype progress

Still not working but the idea is to read the result and display the
first image sample so that user has a better feedback of the
rendering.
This commit is contained in:
Clément Foucault
2022-07-28 16:13:19 +02:00
parent 1e0aa2612c
commit 53fc9add51
2 changed files with 32 additions and 7 deletions

View File

@@ -217,14 +217,8 @@ void Instance::render_sample()
motion_blur.step();
}
void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
void Instance::render_read_result(RenderLayer *render_layer, const char *view_name)
{
while (!sampling.finished()) {
this->render_sample();
/* TODO(fclem) print progression. */
}
/* Read Results. */
eViewLayerEEVEEPassType pass_bits = film.enabled_passes_get();
for (auto i : IndexRange(EEVEE_RENDER_PASS_MAX_BIT)) {
eViewLayerEEVEEPassType pass_type = eViewLayerEEVEEPassType(pass_bits & (1 << i));
@@ -250,6 +244,36 @@ void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
}
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name Interface
* \{ */
void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
{
while (!sampling.finished()) {
this->render_sample();
/* TODO(fclem) print progression. */
#if 0
/* 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) {
/* Allow to preview the first sample. */
/* TODO(fclem): Might want to not do this during animation render to avoid too much stall. */
this->render_read_result(render_layer, view_name);
first_read = false;
DRW_render_context_disable(render->re);
/* Allow the 2D viewport to grab the ticket mutex to display the render. */
DRW_render_context_enable(render->re);
}
#endif
}
this->render_read_result(render_layer, view_name);
}
void Instance::draw_viewport(DefaultFramebufferList *dfbl)
{
UNUSED_VARS(dfbl);

View File

@@ -142,6 +142,7 @@ class Instance {
RenderEngine *engine,
Depsgraph *depsgraph);
void render_sample();
void render_read_result(RenderLayer *render_layer, const char *view_name);
void mesh_sync(Object *ob, ObjectHandle &ob_handle);