diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-03-18 21:03:48 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-03-18 22:49:09 +0300 |
commit | 59f53f5802276c4ff1d8e5422a76e54f94383626 (patch) | |
tree | 2de805a6a8ddca7615885910c89a9e72f2b69999 /source | |
parent | 37b93b5df85c9e7acac989c86cf658bf8a0bc1e5 (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.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/draw/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/draw/DRW_engine.h | 1 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee_next/eevee_engine.cc | 110 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee_next/eevee_engine.h | 19 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 8 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_userdef_types.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_userdef.c | 4 | ||||
-rw-r--r-- | source/blender/render/RE_engine.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/engine.c | 5 | ||||
-rw-r--r-- | source/creator/creator.c | 3 |
10 files changed, 155 insertions, 1 deletions
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" |