Euphoria
postproc.internal.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
6
8#include "eu/render/shader.h"
10
11namespace eu::imgui
12{
13 struct ImguiShaderCache;
14}
15
16namespace eu::render
17{
18
22
24{
26 std::shared_ptr<FrameBuffer> bloom_buffer;
27
29 std::array<std::shared_ptr<FrameBuffer>, 2> ping_pong_buffer;
30};
31
34{
36
37 bool* use_hdr;
38 float* exposure;
39
40 std::shared_ptr<FrameBuffer> msaa_buffer;
41 std::shared_ptr<FrameBuffer> realized_buffer;
42 std::shared_ptr<FrameBuffer> shadow_buffer;
44 std::optional<BloomRender> bloom_render;
45 std::size_t last_bloom_blur_index = 0;
46
47 RenderWorld(const Size& size, RealizeShader* re_sh, ExtractShader* ex_sh, PingPongBlurShader* ping_sh, int msaa_samples, bool* h, float* e);
48
49 void update(const PostProcArg& arg);
50
51 void render(const PostProcArg& arg) override;
52
54};
55
56
59{
60 ShaderProp() = default;
61 ShaderProp(const ShaderProp&) = delete;
63 void operator=(const ShaderProp&) = delete;
64 void operator=(ShaderProp&&) = delete;
65
66 virtual ~ShaderProp() = default;
67
68 virtual void use(const PostProcArg& a, ShaderProgram& shader) = 0;
69 virtual void gui() = 0;
70};
71
74{
76 std::string name;
77 float value;
78 float speed;
79
80 FloatDragShaderProp(const LoadedPostProcShader& shader, const std::string& n, float v, float s);
81
82 void use(const PostProcArg&, ShaderProgram& shader) override;
83
84 void gui() override;
85};
86
89{
91 std::string name;
92 float value;
93 float min;
94 float max;
95
97 const LoadedPostProcShader& shader, const std::string& n, float v, float mi, float ma
98 );
99
100 void use(const PostProcArg&, ShaderProgram& shader) override;
101
102 void gui() override;
103};
104
110{
111 std::string name;
112 std::shared_ptr<LoadedPostProcShader> shader;
113 std::vector<std::shared_ptr<ShaderProp>> properties;
114 float time = 0.0f;
115
116 SimpleEffect(std::string n, std::shared_ptr<LoadedPostProcShader> s);
117
118 void add_float_drag_prop(const std::string& prop_name, float value, float speed);
119
120 void add_float_slider_prop(const std::string& prop_name, float value, float min, float max);
121
122 void gui() override;
123
124 void update(float dt) override;
125
126 void use_shader(const PostProcArg& a, const FrameBuffer& t) override;
127
128 void build(const BuildArg& arg) override;
129};
130
131struct BlurEffect;
132
141
150
153{
154 std::string name;
157 std::shared_ptr<LoadedPostProcShader> vert;
158 std::shared_ptr<LoadedPostProcShader> hori;
159
162
163#if FF_HAS(BLUR_USE_GAUSS)
164 Uniform std_dev_v;
165 Uniform std_dev_h;
166#endif
167
168 float blur_size = 0.02f;
169#if FF_HAS(BLUR_USE_GAUSS)
170 float std_dev = 0.02f;
171#endif
172
173 BlurEffect(std::string n, std::shared_ptr<LoadedPostProcShader> v, std::shared_ptr<LoadedPostProcShader> h);
174
175 void gui() override;
176
177 void update(float) override;
178
179 void use_vert_shader(const PostProcArg& a, const FrameBuffer& t) const;
180
181 void use_hori_shader(const PostProcArg& a, const FrameBuffer& t);
182
183 void build(const BuildArg& arg) override;
184};
185
189
190}
constexpr float min(float lhs, float rhs)
Definition numeric.h:78
constexpr float max(float lhs, float rhs)
Definition numeric.h:79
Definition ui.h:4
a size
Definition size.h:11
ExtractShader * extract_shader
std::shared_ptr< FrameBuffer > bloom_buffer
std::array< std::shared_ptr< FrameBuffer >, 2 > ping_pong_buffer
PingPongBlurShader * ping_pong_shader
A blur effect split into a vertical and horizontal blur step.
void build(const BuildArg &arg) override
BlurEffect(std::string n, std::shared_ptr< LoadedPostProcShader > v, std::shared_ptr< LoadedPostProcShader > h)
void use_hori_shader(const PostProcArg &a, const FrameBuffer &t)
void update(float) override
BurHorizontalProvider hori_p
std::shared_ptr< LoadedPostProcShader > vert
void use_vert_shader(const PostProcArg &a, const FrameBuffer &t) const
BlurVerticalProvider vert_p
std::shared_ptr< LoadedPostProcShader > hori
void gui() override
A shader property for the vertical blur step.
void use_shader(const PostProcArg &a, const FrameBuffer &t) override
Arguments for when building a effect stack.
Definition postproc.h:101
A shader property for the horizontal blur step.
void use_shader(const PostProcArg &a, const FrameBuffer &t) override
Extracts data for a bloom.
void use(const PostProcArg &, ShaderProgram &shader) override
FloatDragShaderProp(const LoadedPostProcShader &shader, const std::string &n, float v, float s)
void use(const PostProcArg &, ShaderProgram &shader) override
FloatSliderShaderProp(const LoadedPostProcShader &shader, const std::string &n, float v, float mi, float ma)
"render to texture" feature
Definition texture.h:103
The "base class" for a loaded postproc shader.
Arguments for rendering a post-processing effect.
Definition postproc.h:27
The shader data for composing a rendered image.
std::shared_ptr< FrameBuffer > msaa_buffer
void gui(imgui::ImguiShaderCache *cache)
std::shared_ptr< FrameBuffer > shadow_buffer
std::shared_ptr< FrameBuffer > realized_buffer
std::optional< BloomRender > bloom_render
void update(const PostProcArg &arg)
void render(const PostProcArg &arg) override
RealizeShader * realize_shader
RenderWorld(const Size &size, RealizeShader *re_sh, ExtractShader *ex_sh, PingPongBlurShader *ping_sh, int msaa_samples, bool *h, float *e)
RAII representation of a open gl shader program.
Definition shader.h:28
virtual ~ShaderProp()=default
ShaderProp(const ShaderProp &)=delete
ShaderProp(ShaderProp &&)=delete
void operator=(ShaderProp &&)=delete
virtual void use(const PostProcArg &a, ShaderProgram &shader)=0
virtual void gui()=0
void operator=(const ShaderProp &)=delete
std::vector< std::shared_ptr< ShaderProp > > properties
std::shared_ptr< LoadedPostProcShader > shader
void add_float_slider_prop(const std::string &prop_name, float value, float min, float max)
void add_float_drag_prop(const std::string &prop_name, float value, float speed)
SimpleEffect(std::string n, std::shared_ptr< LoadedPostProcShader > s)
void build(const BuildArg &arg) override
void update(float dt) override
void use_shader(const PostProcArg &a, const FrameBuffer &t) override
Represents a found shader uniform and created via ShaderProgram::GetUniform().
Definition uniform.h:9