Euphoria
postproc.internal.h
Go to the documentation of this file.
1#pragma once
2
4
5
7#include "eu/render/shader.h"
9
10namespace eu::imgui
11{
12 struct ImguiShaderCache;
13}
14
15namespace eu::render
16{
17
23{
25 std::shared_ptr<FrameBuffer> bloom_buffer;
26
28 std::array<std::shared_ptr<FrameBuffer>, 2> ping_pong_buffer;
29};
30
33{
35
36 bool* use_hdr;
37 float* exposure;
38
39 std::shared_ptr<FrameBuffer> msaa_buffer;
40 std::shared_ptr<FrameBuffer> realized_buffer;
41 std::shared_ptr<FrameBuffer> shadow_buffer;
43 std::optional<BloomRender> bloom_render;
45
47
48 void update(const PostProcArg& arg);
49
50 void render(const PostProcArg& arg) override;
51
53};
54
55
58{
59 ShaderProp() = default;
60 ShaderProp(const ShaderProp&) = delete;
62 void operator=(const ShaderProp&) = delete;
63 void operator=(ShaderProp&&) = delete;
64
65 virtual ~ShaderProp() = default;
66
67 virtual void use(const PostProcArg& a, ShaderProgram& shader) = 0;
68 virtual void gui() = 0;
69};
70
73{
75 std::string name;
76 float value;
77 float speed;
78
79 FloatDragShaderProp(const LoadedPostProcShader& shader, const std::string& n, float v, float s);
80
81 void use(const PostProcArg&, ShaderProgram& shader) override;
82
83 void gui() override;
84};
85
88{
90 std::string name;
91 float value;
92 float min;
93 float max;
94
96 const LoadedPostProcShader& shader, const std::string& n, float v, float mi, float ma
97 );
98
99 void use(const PostProcArg&, ShaderProgram& shader) override;
100
101 void gui() override;
102};
103
109{
110 std::string name;
111 std::shared_ptr<LoadedPostProcShader> shader;
112 std::vector<std::shared_ptr<ShaderProp>> properties;
113 float time = 0.0f;
114
115 SimpleEffect(std::string n, std::shared_ptr<LoadedPostProcShader> s);
116
117 void add_float_drag_prop(const std::string& prop_name, float value, float speed);
118
119 void add_float_slider_prop(const std::string& prop_name, float value, float min, float max);
120
121 void gui() override;
122
123 void update(float dt) override;
124
125 void use_shader(const PostProcArg& a, const FrameBuffer& t) override;
126
127 void build(const BuildArg& arg) override;
128};
129
130struct BlurEffect;
131
140
149
152{
153 std::string name;
156 std::shared_ptr<LoadedPostProcShader> vert;
157 std::shared_ptr<LoadedPostProcShader> hori;
158
161
162#if FF_HAS(BLUR_USE_GAUSS)
165#endif
166
167 float blur_size = 0.02f;
168#if FF_HAS(BLUR_USE_GAUSS)
169 float std_dev = 0.02f;
170#endif
171
172 BlurEffect(std::string n, std::shared_ptr<LoadedPostProcShader> v, std::shared_ptr<LoadedPostProcShader> h);
173
174 void gui() override;
175
176 void update(float) override;
177
178 void use_vert_shader(const PostProcArg& a, const FrameBuffer& t) const;
179
180 void use_hori_shader(const PostProcArg& a, const FrameBuffer& t);
181
182 void build(const BuildArg& arg) override;
183};
184
189}
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 (inclusive) range between two values.
Definition range.h:19
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:99
A shader property for the horizontal blur step.
void use_shader(const PostProcArg &a, const FrameBuffer &t) override
Extracts data for a bloom.
A special effect where the effect can be eased into existence.
Definition postproc.h:141
A float shader property that is dragged with the mouse.
void use(const PostProcArg &, ShaderProgram &shader) override
FloatDragShaderProp(const LoadedPostProcShader &shader, const std::string &n, float v, float s)
A float shader property that is a slider.
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:101
The "base class" for a loaded postproc shader.
Arguments for rendering a post-processing effect.
Definition postproc.h:25
The shader data for composing a rendered image.
A source that can be rendered to a framebuffer or a screen.
Definition postproc.h:36
A source that "just" renders the world.
std::shared_ptr< FrameBuffer > msaa_buffer
void gui(imgui::ImguiShaderCache *cache)
std::shared_ptr< FrameBuffer > shadow_buffer
RenderWorld(const Size size, RealizeShader *re_sh, ExtractShader *ex_sh, PingPongBlurShader *ping_sh, int msaa_samples, bool *h, float *e)
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
RAII representation of a open gl shader program.
Definition shader.h:28
A tweakable shader property.
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
A functor that sends properties/uniforms to the shader.
Definition postproc.h:51
A effect that only performs a single step.
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