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:
authorClément Foucault <foucault.clem@gmail.com>2022-03-18 21:03:48 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-03-18 22:49:09 +0300
commit59f53f5802276c4ff1d8e5422a76e54f94383626 (patch)
tree2de805a6a8ddca7615885910c89a9e72f2b69999
parent37b93b5df85c9e7acac989c86cf658bf8a0bc1e5 (diff)
EEVEE: Add new experimental "EEVEE Next" option
This is supposed to hold the latest improvement from the EEVEE rewrite branch. Note that a restart is necessary in order for the engine to appear. The registration code is a bit convoluted as it needs to be after the WM_init.
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py1
-rw-r--r--source/blender/draw/CMakeLists.txt2
-rw-r--r--source/blender/draw/DRW_engine.h1
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_engine.cc110
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_engine.h19
-rw-r--r--source/blender/draw/intern/draw_manager.c8
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h3
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c4
-rw-r--r--source/blender/render/RE_engine.h1
-rw-r--r--source/blender/render/intern/engine.c5
-rw-r--r--source/creator/creator.c3
11 files changed, 156 insertions, 1 deletions
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index d163eafb70d..cffcc9ee236 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -2276,6 +2276,7 @@ class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel):
({"property": "use_new_curves_type"}, "T68981"),
({"property": "use_new_point_cloud_type"}, "T75717"),
({"property": "use_full_frame_compositor"}, "T88150"),
+ ({"property": "enable_eevee_next"}, "T93220"),
),
)
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 98f75ad6106..994fc923aa4 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -129,6 +129,7 @@ set(SRC
engines/eevee/eevee_subsurface.c
engines/eevee/eevee_temporal_sampling.c
engines/eevee/eevee_volumes.c
+ engines/eevee_next/eevee_engine.cc
engines/workbench/workbench_data.c
engines/workbench/workbench_effect_antialiasing.c
engines/workbench/workbench_effect_cavity.c
@@ -210,6 +211,7 @@ set(SRC
engines/eevee/eevee_lightcache.h
engines/eevee/eevee_lut.h
engines/eevee/eevee_private.h
+ engines/eevee_next/eevee_engine.h
engines/external/external_engine.h
engines/image/image_batches.hh
engines/image/image_drawing_mode.hh
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 99d9a0d121f..00822946fe5 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -37,6 +37,7 @@ struct bContext;
struct rcti;
void DRW_engines_register(void);
+void DRW_engines_register_experimental(void);
void DRW_engines_free(void);
bool DRW_engine_render_support(struct DrawEngineType *draw_engine_type);
diff --git a/source/blender/draw/engines/eevee_next/eevee_engine.cc b/source/blender/draw/engines/eevee_next/eevee_engine.cc
new file mode 100644
index 00000000000..b2d750f81eb
--- /dev/null
+++ b/source/blender/draw/engines/eevee_next/eevee_engine.cc
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2021 Blender Foundation.
+ */
+
+#include "BKE_global.h"
+#include "BLI_rect.h"
+
+#include "GPU_framebuffer.h"
+
+#include "ED_view3d.h"
+
+#include "DRW_render.h"
+
+typedef struct EEVEE_Data {
+ DrawEngineType *engine_type;
+ DRWViewportEmptyList *fbl;
+ DRWViewportEmptyList *txl;
+ DRWViewportEmptyList *psl;
+ DRWViewportEmptyList *stl;
+ void *instance;
+} EEVEE_Data;
+
+static void eevee_engine_init(void *vedata)
+{
+ UNUSED_VARS(vedata);
+}
+
+static void eevee_draw_scene(void *vedata)
+{
+ UNUSED_VARS(vedata);
+}
+
+static void eevee_cache_init(void *vedata)
+{
+ UNUSED_VARS(vedata);
+}
+
+static void eevee_cache_populate(void *vedata, Object *object)
+{
+ UNUSED_VARS(vedata, object);
+}
+
+static void eevee_cache_finish(void *vedata)
+{
+ UNUSED_VARS(vedata);
+}
+
+static void eevee_engine_free(void)
+{
+}
+
+static void eevee_instance_free(void *instance)
+{
+ UNUSED_VARS(instance);
+}
+
+static void eevee_render_to_image(void *UNUSED(vedata),
+ struct RenderEngine *engine,
+ struct RenderLayer *layer,
+ const struct rcti *UNUSED(rect))
+{
+ UNUSED_VARS(engine, layer);
+}
+
+static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
+{
+ UNUSED_VARS(engine, scene, view_layer);
+}
+
+static const DrawEngineDataSize eevee_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data);
+
+extern "C" {
+
+DrawEngineType draw_engine_eevee_next_type = {
+ nullptr,
+ nullptr,
+ N_("Eevee"),
+ &eevee_data_size,
+ &eevee_engine_init,
+ &eevee_engine_free,
+ &eevee_instance_free,
+ &eevee_cache_init,
+ &eevee_cache_populate,
+ &eevee_cache_finish,
+ &eevee_draw_scene,
+ nullptr,
+ nullptr,
+ &eevee_render_to_image,
+ nullptr,
+};
+
+RenderEngineType DRW_engine_viewport_eevee_next_type = {
+ nullptr,
+ nullptr,
+ "BLENDER_EEVEE_NEXT",
+ N_("Eevee Next"),
+ RE_INTERNAL | RE_USE_PREVIEW | RE_USE_STEREO_VIEWPORT | RE_USE_GPU_CONTEXT,
+ nullptr,
+ &DRW_render_to_image,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ &eevee_render_update_passes,
+ &draw_engine_eevee_next_type,
+ {nullptr, nullptr, nullptr},
+};
+}
diff --git a/source/blender/draw/engines/eevee_next/eevee_engine.h b/source/blender/draw/engines/eevee_next/eevee_engine.h
new file mode 100644
index 00000000000..9cee11bbba8
--- /dev/null
+++ b/source/blender/draw/engines/eevee_next/eevee_engine.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2016 Blender Foundation. */
+
+/** \file
+ * \ingroup DNA
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern DrawEngineType draw_engine_eevee_next_type;
+extern RenderEngineType DRW_engine_viewport_eevee_next_type;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 2886fe53879..742584b568f 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -85,6 +85,7 @@
#include "engines/basic/basic_engine.h"
#include "engines/eevee/eevee_engine.h"
+#include "engines/eevee_next/eevee_engine.h"
#include "engines/external/external_engine.h"
#include "engines/gpencil/gpencil_engine.h"
#include "engines/image/image_engine.h"
@@ -2898,6 +2899,13 @@ void DRW_engine_register(DrawEngineType *draw_engine_type)
g_registered_engines.len = BLI_listbase_count(&g_registered_engines.engines);
}
+void DRW_engines_register_experimental(void)
+{
+ if (U.experimental.enable_eevee_next) {
+ RE_engines_register(&DRW_engine_viewport_eevee_next_type);
+ }
+}
+
void DRW_engines_register(void)
{
RE_engines_register(&DRW_engine_viewport_eevee_type);
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index d7c65d057bd..4dee89db274 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -650,7 +650,8 @@ typedef struct UserDef_Experimental {
char use_extended_asset_browser;
char use_override_templates;
char use_named_attribute_nodes;
- char _pad[2];
+ char enable_eevee_next;
+ char _pad[1];
/** `makesdna` does not allow empty structs. */
} UserDef_Experimental;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 3ab6612d6a2..7d5cd350514 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -6442,6 +6442,10 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
RNA_def_property_ui_text(prop,
"Named Attribute Nodes",
"Enable named attribute nodes in the geometry nodes add menu");
+
+ prop = RNA_def_property(srna, "enable_eevee_next", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "enable_eevee_next", 1);
+ RNA_def_property_ui_text(prop, "EEVEE Next", "Enable the new EEVEE codebase, requires restart");
}
static void rna_def_userdef_addon_collection(BlenderRNA *brna, PropertyRNA *cprop)
diff --git a/source/blender/render/RE_engine.h b/source/blender/render/RE_engine.h
index 578df1858c9..e8e47b1f646 100644
--- a/source/blender/render/RE_engine.h
+++ b/source/blender/render/RE_engine.h
@@ -253,6 +253,7 @@ void RE_engine_render_context_disable(struct RenderEngine *engine);
/* Engine Types */
void RE_engines_init(void);
+void RE_engines_init_experimental(void);
void RE_engines_exit(void);
void RE_engines_register(RenderEngineType *render_type);
diff --git a/source/blender/render/intern/engine.c b/source/blender/render/intern/engine.c
index ae5ffdfc232..3a7ac22dc1f 100644
--- a/source/blender/render/intern/engine.c
+++ b/source/blender/render/intern/engine.c
@@ -59,6 +59,11 @@ void RE_engines_init(void)
DRW_engines_register();
}
+void RE_engines_init_experimental()
+{
+ DRW_engines_register_experimental();
+}
+
void RE_engines_exit(void)
{
RenderEngineType *type, *next;
diff --git a/source/creator/creator.c b/source/creator/creator.c
index ec85786c7a4..6c95ee3e490 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -488,6 +488,9 @@ int main(int argc,
WM_init(C, argc, (const char **)argv);
+ /* Need to be after WM init so that userpref are loaded. */
+ RE_engines_init_experimental();
+
#ifndef WITH_PYTHON
printf(
"\n* WARNING * - Blender compiled without Python!\n"