Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee_next/eevee_engine.cc')
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_engine.cc66
1 files changed, 19 insertions, 47 deletions
diff --git a/source/blender/draw/engines/eevee_next/eevee_engine.cc b/source/blender/draw/engines/eevee_next/eevee_engine.cc
index 2e476b7d891..5ef198838c9 100644
--- a/source/blender/draw/engines/eevee_next/eevee_engine.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_engine.cc
@@ -140,7 +140,7 @@ static void eevee_instance_free(void *instance)
delete reinterpret_cast<eevee::Instance *>(instance);
}
-static void eevee_render_to_image(void *UNUSED(vedata),
+static void eevee_render_to_image(void *vedata,
struct RenderEngine *engine,
struct RenderLayer *layer,
const struct rcti *UNUSED(rect))
@@ -164,59 +164,31 @@ static void eevee_render_to_image(void *UNUSED(vedata),
instance->init(size, &rect, engine, depsgraph, nullptr, camera_original_ob, layer);
instance->render_frame(layer, viewname);
- delete instance;
+ EEVEE_Data *ved = static_cast<EEVEE_Data *>(vedata);
+ if (ved->instance) {
+ delete ved->instance;
+ }
+ ved->instance = instance;
}
-static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
+static void eevee_store_metadata(void *vedata, struct RenderResult *render_result)
{
if (!GPU_shader_storage_buffer_objects_support()) {
return;
}
+ EEVEE_Data *ved = static_cast<EEVEE_Data *>(vedata);
+ eevee::Instance *instance = ved->instance;
+ instance->store_metadata(render_result);
+ delete instance;
+ ved->instance = nullptr;
+}
- RE_engine_register_pass(engine, scene, view_layer, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA);
-
-#define CHECK_PASS_LEGACY(name, type, channels, chanid) \
- if (view_layer->passflag & (SCE_PASS_##name)) { \
- RE_engine_register_pass( \
- engine, scene, view_layer, RE_PASSNAME_##name, channels, chanid, type); \
- } \
- ((void)0)
-#define CHECK_PASS_EEVEE(name, type, channels, chanid) \
- if (view_layer->eevee.render_passes & (EEVEE_RENDER_PASS_##name)) { \
- RE_engine_register_pass( \
- engine, scene, view_layer, RE_PASSNAME_##name, channels, chanid, type); \
- } \
- ((void)0)
-
- CHECK_PASS_LEGACY(Z, SOCK_FLOAT, 1, "Z");
- CHECK_PASS_LEGACY(MIST, SOCK_FLOAT, 1, "Z");
- CHECK_PASS_LEGACY(NORMAL, SOCK_VECTOR, 3, "XYZ");
- CHECK_PASS_LEGACY(DIFFUSE_DIRECT, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_LEGACY(DIFFUSE_COLOR, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_LEGACY(GLOSSY_DIRECT, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_LEGACY(GLOSSY_COLOR, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_EEVEE(VOLUME_LIGHT, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_LEGACY(EMIT, SOCK_RGBA, 3, "RGB");
- CHECK_PASS_LEGACY(ENVIRONMENT, SOCK_RGBA, 3, "RGB");
- /* TODO: CHECK_PASS_LEGACY(SHADOW, SOCK_RGBA, 3, "RGB");
- * CHECK_PASS_LEGACY(AO, SOCK_RGBA, 3, "RGB");
- * When available they should be converted from Value textures to RGB. */
-
- LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
- if ((aov->flag & AOV_CONFLICT) != 0) {
- continue;
- }
- switch (aov->type) {
- case AOV_TYPE_COLOR:
- RE_engine_register_pass(engine, scene, view_layer, aov->name, 4, "RGBA", SOCK_RGBA);
- break;
- case AOV_TYPE_VALUE:
- RE_engine_register_pass(engine, scene, view_layer, aov->name, 1, "X", SOCK_FLOAT);
- break;
- default:
- break;
- }
+static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
+{
+ if (!GPU_shader_storage_buffer_objects_support()) {
+ return;
}
+ eevee::Instance::update_passes(engine, scene, view_layer);
}
static const DrawEngineDataSize eevee_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data);
@@ -238,7 +210,7 @@ DrawEngineType draw_engine_eevee_next_type = {
nullptr,
nullptr,
&eevee_render_to_image,
- nullptr,
+ &eevee_store_metadata,
};
RenderEngineType DRW_engine_viewport_eevee_next_type = {