Fix #114168: EEVEE-Next: Viewport image render sampling
Support sample accumulation in viewport image rendering. Pull Request: https://projects.blender.org/blender/blender/pulls/116198
This commit is contained in:
@@ -103,8 +103,12 @@ static void eevee_engine_init(void *vedata)
|
||||
static void eevee_draw_scene(void *vedata)
|
||||
{
|
||||
EEVEE_Data *ved = reinterpret_cast<EEVEE_Data *>(vedata);
|
||||
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
|
||||
ved->instance->draw_viewport(dfbl);
|
||||
if (DRW_state_is_viewport_image_render()) {
|
||||
ved->instance->draw_viewport_image_render();
|
||||
}
|
||||
else {
|
||||
ved->instance->draw_viewport();
|
||||
}
|
||||
STRNCPY(ved->info, ved->instance->info.c_str());
|
||||
/* Reset view for other following engines. */
|
||||
DRW_view_set_active(nullptr);
|
||||
|
||||
@@ -493,9 +493,8 @@ void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
|
||||
this->render_read_result(render_layer, view_name);
|
||||
}
|
||||
|
||||
void Instance::draw_viewport(DefaultFramebufferList *dfbl)
|
||||
void Instance::draw_viewport()
|
||||
{
|
||||
UNUSED_VARS(dfbl);
|
||||
render_sample();
|
||||
velocity.step_swap();
|
||||
|
||||
@@ -518,6 +517,14 @@ void Instance::draw_viewport(DefaultFramebufferList *dfbl)
|
||||
}
|
||||
}
|
||||
|
||||
void Instance::draw_viewport_image_render()
|
||||
{
|
||||
while (!sampling.finished_viewport()) {
|
||||
this->render_sample();
|
||||
}
|
||||
velocity.step_swap();
|
||||
}
|
||||
|
||||
void Instance::store_metadata(RenderResult *render_result)
|
||||
{
|
||||
cryptomatte.store_metadata(render_result);
|
||||
|
||||
@@ -180,7 +180,8 @@ class Instance {
|
||||
|
||||
/* Viewport. */
|
||||
|
||||
void draw_viewport(DefaultFramebufferList *dfbl);
|
||||
void draw_viewport();
|
||||
void draw_viewport_image_render();
|
||||
|
||||
/* Light bake. */
|
||||
|
||||
@@ -199,6 +200,11 @@ class Instance {
|
||||
return render == nullptr && !is_baking();
|
||||
}
|
||||
|
||||
bool is_viewport_image_render() const
|
||||
{
|
||||
return DRW_state_is_viewport_image_render();
|
||||
}
|
||||
|
||||
bool is_baking() const
|
||||
{
|
||||
return is_light_bake;
|
||||
|
||||
@@ -75,7 +75,8 @@ void Sampling::end_sync()
|
||||
|
||||
interactive_mode_ = viewport_sample_ < interactive_mode_threshold;
|
||||
|
||||
bool interactive_mode_disabled = (inst_.scene->eevee.flag & SCE_EEVEE_TAA_REPROJECTION) == 0;
|
||||
bool interactive_mode_disabled = (inst_.scene->eevee.flag & SCE_EEVEE_TAA_REPROJECTION) == 0 ||
|
||||
inst_.is_viewport_image_render();
|
||||
if (interactive_mode_disabled) {
|
||||
interactive_mode_ = false;
|
||||
sample_ = viewport_sample_;
|
||||
|
||||
Reference in New Issue
Block a user