Blender V5.0
eevee_view.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
16
17#pragma once
18
19#include "DRW_render.hh"
20
21#include "eevee_camera.hh"
23#include "eevee_pipeline.hh"
25#include "eevee_shader.hh"
26#include "eevee_velocity.hh"
27
28namespace blender::eevee {
29
30class Instance;
31
32/* -------------------------------------------------------------------- */
37
39 private:
40 Instance &inst_;
42 const char *name_;
44 const float4x4 &face_matrix_;
45
47 RayTraceBuffer rt_buffer_opaque_;
48 RayTraceBuffer rt_buffer_refract_;
49 DepthOfFieldBuffer dof_buffer_;
50
51 Framebuffer prepass_fb_ = {"prepass_fb_"};
52 Framebuffer combined_fb_ = {"combined_fb_"};
53 Framebuffer gbuffer_fb_ = {"gbuffer_fb_"};
54 Framebuffer transparent_fb_ = {"transparent"};
55 TextureFromPool postfx_tx_;
56
58 View main_view_ = {"main_view"};
61 View jitter_view_ = {"jitter_view"};
63 View render_view_;
64
66 int2 extent_ = {-1, -1};
67
68 bool is_enabled_ = false;
69
70 public:
71 ShadingView(Instance &inst, const char *name, const float4x4 &face_matrix)
72 : inst_(inst), name_(name), face_matrix_(face_matrix), render_view_(name) {};
73
75
76 void init();
77
78 void sync();
79
80 void render();
81
82 private:
83 void render_transparent_pass(RenderBuffers &rbufs);
84
85 gpu::Texture *render_postfx(gpu::Texture *input_tx);
86
87 void update_view();
88};
89
91
92/* -------------------------------------------------------------------- */
99
100class MainView {
101 private:
102 /* WORKAROUND: Defining this as an array does not seems to work on GCC < 9.4.
103 * It tries to use the copy constructor and fails because ShadingView is non-copyable and
104 * non-movable. */
105 ShadingView shading_views_0;
106 ShadingView shading_views_1;
107 ShadingView shading_views_2;
108 ShadingView shading_views_3;
109 ShadingView shading_views_4;
110 ShadingView shading_views_5;
111#define shading_views_ (&shading_views_0)
112
113 public:
115 : shading_views_0(inst, "posX_view", cubeface_mat(0)),
116 shading_views_1(inst, "negX_view", cubeface_mat(1)),
117 shading_views_2(inst, "posY_view", cubeface_mat(2)),
118 shading_views_3(inst, "negY_view", cubeface_mat(3)),
119 shading_views_4(inst, "posZ_view", cubeface_mat(4)),
120 shading_views_5(inst, "negZ_view", cubeface_mat(5))
121 {
122 }
123
124 void init()
125 {
126 for (auto i : IndexRange(6)) {
127 shading_views_[i].init();
128 }
129 }
130
131 void sync()
132 {
133 for (auto i : IndexRange(6)) {
134 shading_views_[i].sync();
135 }
136 }
137
138 void render()
139 {
140 for (auto i : IndexRange(6)) {
141 shading_views_[i].render();
142 }
143 }
144
145#undef shading_views_
146};
147
149
150/* -------------------------------------------------------------------- */
155
157 private:
158 Instance &inst_;
159 Framebuffer combined_fb_ = {"Capture.Combined"};
160 Framebuffer gbuffer_fb_ = {"Capture.Gbuffer"};
161
162 public:
163 CaptureView(Instance &inst) : inst_(inst) {}
164 void render_world();
165 void render_probes();
166};
167
169
170/* -------------------------------------------------------------------- */
175
177 private:
178 Instance &inst_;
179
180 View view_ = {"Lookdev.View"};
181
182 public:
183 LookdevView(Instance &inst) : inst_(inst) {}
184 void render();
185};
186
188
189} // namespace blender::eevee
CaptureView(Instance &inst)
A running instance of the engine.
LookdevView(Instance &inst)
MainView(Instance &inst)
ShadingView(Instance &inst, const char *name, const float4x4 &face_matrix)
Definition eevee_view.hh:71
#define shading_views_
float4x4 cubeface_mat(int face)
MatBase< float, 4, 4 > float4x4
VecBase< int32_t, 2 > int2
const char * name
i
Definition text_draw.cc:230