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:
parent
37b93b5df8
commit
59f53f5802
Notes:
blender-bot
2025-02-14 01:26:47 +00:00
Referenced by issue #93220, EEVEE-Next
@ -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"),
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
110
source/blender/draw/engines/eevee_next/eevee_engine.cc
Normal file
110
source/blender/draw/engines/eevee_next/eevee_engine.cc
Normal 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},
|
||||
};
|
||||
}
|
19
source/blender/draw/engines/eevee_next/eevee_engine.h
Normal file
19
source/blender/draw/engines/eevee_next/eevee_engine.h
Normal 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
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user