Blender V4.3
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
17#pragma once
18
19#include "DRW_render.hh"
20
21#include "eevee_camera.hh"
22#include "eevee_pipeline.hh"
23#include "eevee_shader.hh"
24#include "eevee_velocity.hh"
25
26namespace blender::eevee {
27
28class Instance;
29
30/* -------------------------------------------------------------------- */
37 private:
38 Instance &inst_;
40 const char *name_;
42 const float4x4 &face_matrix_;
43
45 RayTraceBuffer rt_buffer_opaque_;
46 RayTraceBuffer rt_buffer_refract_;
47 DepthOfFieldBuffer dof_buffer_;
48
49 Framebuffer prepass_fb_ = {"prepass_fb_"};
50 Framebuffer combined_fb_ = {"combined_fb_"};
51 Framebuffer gbuffer_fb_ = {"gbuffer_fb_"};
52 Framebuffer transparent_fb_ = {"transparent"};
53 TextureFromPool postfx_tx_;
54
56 View main_view_ = {"main_view"};
59 View jitter_view_ = {"jitter_view"};
61 View render_view_;
62
64 int2 extent_ = {-1, -1};
65
66 bool is_enabled_ = false;
67
68 public:
69 ShadingView(Instance &inst, const char *name, const float4x4 &face_matrix)
70 : inst_(inst), name_(name), face_matrix_(face_matrix), render_view_(name){};
71
73
74 void init();
75
76 void sync();
77
78 void render();
79
80 private:
81 void render_transparent_pass(RenderBuffers &rbufs);
82
83 GPUTexture *render_postfx(GPUTexture *input_tx);
84
85 void update_view();
86};
87
90/* -------------------------------------------------------------------- */
98class MainView {
99 private:
100 /* WORKAROUND: Defining this as an array does not seems to work on GCC < 9.4.
101 * It tries to use the copy constructor and fails because ShadingView is non-copyable and
102 * non-movable. */
103 ShadingView shading_views_0;
104 ShadingView shading_views_1;
105 ShadingView shading_views_2;
106 ShadingView shading_views_3;
107 ShadingView shading_views_4;
108 ShadingView shading_views_5;
109#define shading_views_ (&shading_views_0)
110
111 public:
113 : shading_views_0(inst, "posX_view", cubeface_mat(0)),
114 shading_views_1(inst, "negX_view", cubeface_mat(1)),
115 shading_views_2(inst, "posY_view", cubeface_mat(2)),
116 shading_views_3(inst, "negY_view", cubeface_mat(3)),
117 shading_views_4(inst, "posZ_view", cubeface_mat(4)),
118 shading_views_5(inst, "negZ_view", cubeface_mat(5))
119 {
120 }
121
122 void init()
123 {
124 for (auto i : IndexRange(6)) {
125 shading_views_[i].init();
126 }
127 }
128
129 void sync()
130 {
131 for (auto i : IndexRange(6)) {
132 shading_views_[i].sync();
133 }
134 }
135
136 void render()
137 {
138 for (auto i : IndexRange(6)) {
139 shading_views_[i].render();
140 }
141 }
142
143#undef shading_views_
144};
145
148/* -------------------------------------------------------------------- */
155 private:
156 Instance &inst_;
157 Framebuffer combined_fb_ = {"Capture.Combined"};
158 Framebuffer gbuffer_fb_ = {"Capture.Gbuffer"};
159
160 public:
161 CaptureView(Instance &inst) : inst_(inst) {}
162 void render_world();
163 void render_probes();
164};
165
168/* -------------------------------------------------------------------- */
175 private:
176 Instance &inst_;
177
178 View view_ = {"Lookdev.View"};
179
180 public:
181 LookdevView(Instance &inst) : inst_(inst) {}
182 void render();
183};
184
187} // 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:69
#define shading_views_
float4x4 cubeface_mat(int face)