Euphoria
postproc.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5#include "eu/render/texture.h"
6
7namespace eu::imgui
8{
9 struct ImguiShaderCache;
10}
11
12namespace eu::render
13{
14struct Texture2d;
15struct Renderer;
16struct Camera;
17struct World;
18struct RenderWorld;
19
24
27{
28 const World* world = nullptr;
29 Size window_size = {.width = 0, .height = 0};
31 const Camera* camera = nullptr;
32 Renderer* renderer = nullptr;
33};
34
38{
39 RenderSource() = default;
40 virtual ~RenderSource() = default;
41
42 RenderSource(const RenderSource&) = delete;
44 void operator=(const RenderSource&) = delete;
45 void operator=(RenderSource&&) = delete;
46
47 virtual void render(const PostProcArg& arg) = 0;
48};
49
64
68{
69 std::string name;
70 std::shared_ptr<RenderSource> source;
71 std::shared_ptr<FrameBuffer> fbo;
73
74 RenderTextureWithShader(std::string n, std::shared_ptr<RenderSource> s, std::shared_ptr<FrameBuffer> f, ShaderPropertyProvider* e);
75
77 void render(const PostProcArg& arg) override;
78
80 void update(const PostProcArg& arg);
81};
82
90{
92 std::shared_ptr<RenderSource> last_source;
93
94 std::vector<std::shared_ptr<RenderTextureWithShader>> targets;
95};
96
97
105
106
107struct EffectStack;
108
112struct Effect
113{
114 Effect() = default;
115 virtual ~Effect() = default;
116
117 Effect(const Effect&) = delete;
118 Effect(Effect&&) = delete;
119 void operator=(const Effect&) = delete;
120 void operator=(Effect&&) = delete;
121
122 virtual void build(const BuildArg& arg) = 0;
123 virtual void update(float dt) = 0;
124 virtual void gui() = 0;
125
126 [[nodiscard]] bool enabled() const;
127
128 protected:
129
130 void set_enabled(bool n);
131
132 private:
133
134 friend struct EffectStack;
135
136 bool is_enabled = false;
137 EffectStack* owner = nullptr;
138};
139
143{
145 [[nodiscard]] float get_factor() const;
146 void set_factor(float f);
147
148 private:
149
150 float factor = 0.0f;
151};
152
155{
157 bool dirty = true;
158 std::optional<Size> window_size;
159 std::vector<std::shared_ptr<Effect>> effects;
161
162 // render world settings
163 // todo(Gustav): is it useful to disable hdr rendering or should that just be removed?
164 // todo(Gustav): move exposure to a better place?
165 bool use_hdr = true;
166 float exposure = 1.0f;
167
168 std::shared_ptr<RenderWorld> render_world;
169
171 void render(const PostProcArg& arg);
172 void update(float dt) const;
174};
175
179
180}
Definition ui.h:4
a size
Definition size.h:11
Arguments for when building a effect stack.
Definition postproc.h:101
CompiledStack * builder
Definition postproc.h:102
The current perspective camera representation.
Definition camera.h:15
A compiled full-screen-effect.
Definition postproc.h:90
std::vector< std::shared_ptr< RenderTextureWithShader > > targets
Definition postproc.h:94
std::shared_ptr< RenderSource > last_source
start with a simple world, but depending on the current effect list, could be more....
Definition postproc.h:92
The facade of the post-proc framework.
Definition postproc.h:155
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:160
void update(float dt) const
std::shared_ptr< RenderWorld > render_world
Definition postproc.h:168
std::vector< std::shared_ptr< Effect > > effects
Definition postproc.h:159
std::optional< Size > window_size
Definition postproc.h:158
virtual void update(float dt)=0
void operator=(const Effect &)=delete
Effect(Effect &&)=delete
friend struct EffectStack
Definition postproc.h:134
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
void set_factor(float f)
float get_factor() const
"render to texture" feature
Definition texture.h:103
Arguments for rendering a post-processing effect.
Definition postproc.h:27
const World * world
Definition postproc.h:28
const Camera * camera
Definition postproc.h:31
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
ShaderPropertyProvider * effect
Definition postproc.h:72
std::shared_ptr< FrameBuffer > fbo
Definition postproc.h:71
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:70
A source that "just" renders the world.
The rendering engine.
Definition renderer.h:33
A functor that sends properties/uniforms to the shader.
Definition postproc.h:53
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 2d image texture.
Definition texture.h:74
A list of objects to render.
Definition world.h:201