Euphoria
postproc.h
Go to the documentation of this file.
1#pragma once
2
3#include "eu/render/texture.h"
4
5namespace eu::imgui
6{
7 struct ImguiShaderCache;
8}
9
10namespace eu::render
11{
12struct Texture2d;
13struct Renderer;
14struct Camera;
15struct World;
16struct RenderWorld;
17
32
36{
37 RenderSource() = default;
38 virtual ~RenderSource() = default;
39
40 RenderSource(const RenderSource&) = delete;
42 void operator=(const RenderSource&) = delete;
43 void operator=(RenderSource&&) = delete;
44
45 virtual void render(const PostProcArg& arg) = 0;
46};
47
62
66{
67 std::string name;
68 std::shared_ptr<RenderSource> source;
69 std::shared_ptr<FrameBuffer> fbo;
71
72 RenderTextureWithShader(std::string n, std::shared_ptr<RenderSource> s, std::shared_ptr<FrameBuffer> f, ShaderPropertyProvider* e);
73
75 void render(const PostProcArg& arg) override;
76
78 void update(const PostProcArg& arg);
79};
80
88{
90 std::shared_ptr<RenderSource> last_source;
91
92 std::vector<std::shared_ptr<RenderTextureWithShader>> targets;
93};
94
95
103
104
105struct EffectStack;
106
110struct Effect
111{
112 Effect() = default;
113 virtual ~Effect() = default;
114
115 Effect(const Effect&) = delete;
116 Effect(Effect&&) = delete;
117 void operator=(const Effect&) = delete;
118 void operator=(Effect&&) = delete;
119
120 virtual void build(const BuildArg& arg) = 0;
121 virtual void update(float dt) = 0;
122 virtual void gui() = 0;
123
124 bool enabled() const;
125
126 protected:
127
128 void set_enabled(bool n);
129
130 private:
131
132 friend struct EffectStack;
133
134 bool is_enabled = false;
135 EffectStack* owner = nullptr;
136};
137
141{
143 [[nodiscard]] float get_factor() const;
144 void set_factor(float f);
145
146 private:
147
148 float factor = 0.0f;
149};
150
153{
155 bool dirty = true;
156 std::optional<Size> window_size;
157 std::vector<std::shared_ptr<Effect>> effects;
159
160 // render world settings
161 // todo(Gustav): is it useful to disable hdr rendering or should that just be removed?
162 // todo(Gustav): move exposure to a better place?
163 bool use_hdr = true;
164 float exposure = 1.0f;
165
166 std::shared_ptr<RenderWorld> render_world;
167
169 void render(const PostProcArg& arg);
170 void update(float dt) const;
172};
173
178}
Definition ui.h:4
A (inclusive) range between two values.
Definition range.h:19
a size
Definition size.h:11
Arguments for when building a effect stack.
Definition postproc.h:99
CompiledStack * builder
Definition postproc.h:100
The current perspective camera representation.
Definition camera.h:15
A compiled full-screen-effect.
Definition postproc.h:88
std::vector< std::shared_ptr< RenderTextureWithShader > > targets
Definition postproc.h:92
std::shared_ptr< RenderSource > last_source
start with a simple world, but depending on the current effect list, could be more....
Definition postproc.h:90
The facade of the post-proc framework.
Definition postproc.h:153
void render(const PostProcArg &arg)
rebuilds stack if dirty, update all targets, then render the last_source
void gui(imgui::ImguiShaderCache *cache)
CompiledStack compiled
Definition postproc.h:158
void update(float dt) const
std::shared_ptr< RenderWorld > render_world
Definition postproc.h:166
std::vector< std::shared_ptr< Effect > > effects
Definition postproc.h:157
std::optional< Size > window_size
Definition postproc.h:156
A effect that can be toggled.
Definition postproc.h:111
virtual void update(float dt)=0
void operator=(const Effect &)=delete
Effect(Effect &&)=delete
void set_enabled(bool n)
virtual void build(const BuildArg &arg)=0
bool enabled() const
virtual void gui()=0
void operator=(Effect &&)=delete
virtual ~Effect()=default
Effect(const Effect &)=delete
A special effect where the effect can be eased into existence.
Definition postproc.h:141
void set_factor(float f)
float get_factor() const
"render to texture" feature
Definition texture.h:101
Arguments for rendering a post-processing effect.
Definition postproc.h:25
const World * world
Definition postproc.h:26
const Camera * camera
Definition postproc.h:29
A source that can be rendered to a framebuffer or a screen.
Definition postproc.h:36
void operator=(const RenderSource &)=delete
void operator=(RenderSource &&)=delete
RenderSource(RenderSource &&)=delete
virtual ~RenderSource()=default
RenderSource(const RenderSource &)=delete
virtual void render(const PostProcArg &arg)=0
Applies a shader to the output of another source.
Definition postproc.h:66
ShaderPropertyProvider * effect
Definition postproc.h:70
std::shared_ptr< FrameBuffer > fbo
Definition postproc.h:69
void render(const PostProcArg &arg) override
render internal fbo to a quad with a shader
void update(const PostProcArg &arg)
call render on linked source and render to fbo
RenderTextureWithShader(std::string n, std::shared_ptr< RenderSource > s, std::shared_ptr< FrameBuffer > f, ShaderPropertyProvider *e)
std::shared_ptr< RenderSource > source
Definition postproc.h:68
The rendering engine.
Definition renderer.h:31
A functor that sends properties/uniforms to the shader.
Definition postproc.h:51
virtual void use_shader(const PostProcArg &a, const FrameBuffer &t)=0
void operator=(ShaderPropertyProvider &&)=delete
void operator=(const ShaderPropertyProvider &)=delete
ShaderPropertyProvider(ShaderPropertyProvider &&)=delete
ShaderPropertyProvider(const ShaderPropertyProvider &)=delete
virtual ~ShaderPropertyProvider()=default
A list of objects to render.
Definition world.h:194