Blender V5.0
eevee_engine.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_rect.h"
6
7#include "GPU_framebuffer.hh"
8
9#include "ED_screen.hh"
10#include "ED_view3d.hh"
11
12#include "DRW_render.hh"
13
14#include "RE_pipeline.h"
15
16#include "eevee_engine.h" /* Own include. */
17
18#include "draw_view_data.hh"
19
20#include "eevee_instance.hh"
21
22namespace blender::eevee {
23
25{
26 return new Instance();
27}
28
33
34} // namespace blender::eevee
35
36using namespace blender::eevee;
37
38static void eevee_render(RenderEngine *engine, Depsgraph *depsgraph)
39{
40 Instance *instance = nullptr;
41
42 auto eevee_render_to_image = [&](RenderEngine *engine, RenderLayer *layer, const rcti /*rect*/) {
43 Render *render = engine->re;
44 Object *camera_original_ob = RE_GetCamera(engine->re);
45 const char *viewname = RE_GetActiveRenderView(engine->re);
46 int size[2] = {engine->resolution_x, engine->resolution_y};
47
48 /* Avoid leaking in the case of multiview. (see #145743) */
49 delete instance;
50 /* WORKAROUND: Fails if created in the parent scope. Must be because of lack of active
51 * `DRWContext`. To be revisited. */
52 instance = new Instance();
53
54 rctf view_rect;
55 rcti rect;
56 RE_GetViewPlane(render, &view_rect, &rect);
57 rcti visible_rect = rect;
58
59 instance->init(size, &rect, &visible_rect, engine, depsgraph, camera_original_ob, layer);
60 instance->render_frame(engine, layer, viewname);
61 };
62
63 auto eevee_store_metadata = [&](RenderResult *render_result) {
64 instance->store_metadata(render_result);
65 };
66
67 DRW_render_to_image(engine, depsgraph, eevee_render_to_image, eevee_store_metadata);
68
69 delete instance;
70}
71
72static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
73{
74 Instance::update_passes(engine, scene, view_layer);
75}
76
78 /*next*/ nullptr,
79 /*prev*/ nullptr,
80 /*idname*/ "BLENDER_EEVEE",
81 /*name*/ N_("EEVEE"),
83 /*update*/ nullptr,
84 /*render*/ &eevee_render,
85 /*render_frame_finish*/ nullptr,
86 /*draw*/ nullptr,
87 /*bake*/ nullptr,
88 /*view_update*/ nullptr,
89 /*view_draw*/ nullptr,
90 /*update_script_node*/ nullptr,
91 /*update_render_passes*/ &eevee_render_update_passes,
92 /*update_custom_camera*/ nullptr,
93 /*draw_engine*/ nullptr,
94 /*rna_ext*/
95 {
96 /*data*/ nullptr,
97 /*srna*/ nullptr,
98 /*call*/ nullptr,
99 },
100};
@ RE_INTERNAL
Definition RE_engine.h:43
@ RE_USE_PREVIEW
Definition RE_engine.h:44
@ RE_USE_STEREO_VIEWPORT
Definition RE_engine.h:49
@ RE_USE_GPU_CONTEXT
Definition RE_engine.h:50
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
A running instance of the engine.
void render_frame(RenderEngine *engine, RenderLayer *render_layer, const char *view_name)
void init(const int2 &output_res, const rcti *output_rect, const rcti *visible_rect, RenderEngine *render, Depsgraph *depsgraph, Object *camera_object=nullptr, const RenderLayer *render_layer=nullptr, View *drw_view_=nullptr, const View3D *v3d=nullptr, const RegionView3D *rv3d=nullptr)
void store_metadata(RenderResult *render_result)
static void update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
void DRW_render_to_image(RenderEngine *engine, Depsgraph *depsgraph, std::function< void(RenderEngine *, RenderLayer *, const rcti)> render_view_cb, std::function< void(RenderResult *)> store_metadata_cb)
static void eevee_render(RenderEngine *engine, Depsgraph *depsgraph)
static void eevee_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
RenderEngineType DRW_engine_viewport_eevee_type
void RE_GetViewPlane(Render *re, rctf *r_viewplane, rcti *r_disprect)
Object * RE_GetCamera(Render *re)
const char * RE_GetActiveRenderView(Render *re)
struct Render * re
Definition RE_engine.h:137
DrawEngine * create_instance() final
static void free_static()
#define N_(msgid)