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.
This commit is contained in:
Clément Foucault 2022-03-18 19:03:48 +01:00
parent 37b93b5df8
commit 59f53f5802
Notes: blender-bot 2023-10-18 15:46:10 +02:00
Referenced by issue #93220, EEVEE-Next
11 changed files with 156 additions and 1 deletions

View File

@ -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"),
),
)

View File

@ -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

View File

@ -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);

View File

@ -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},
};
}

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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"