Skip to content

Commit 4f2e740

Browse files
authored
Merge pull request #82 from hotstreams/feature/allow-no-blur
allow blur to be disabled
2 parents d9931bf + 3b0fcb8 commit 4f2e740

10 files changed

Lines changed: 125 additions & 27 deletions

File tree

include/limitless/renderer/composite_pass.hpp

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,7 @@
55
#include <limitless/renderer/instance_renderer.hpp>
66

77
namespace Limitless {
8-
/**
9-
* CompositePass combines results from previous passes together
10-
*
11-
* result from transparent pass (lighting image + transparent objects) combined with bloom pass result
12-
*/
13-
class CompositePass final : public RendererPass {
14-
private:
15-
/**
16-
* Result framebuffer
17-
*/
18-
Framebuffer framebuffer;
8+
class CompositePass : public RendererPass {
199
public:
2010
float tone_mapping_exposure = 1.0f;
2111
float gamma = 2.2f;
@@ -24,14 +14,31 @@ namespace Limitless {
2414

2515
std::shared_ptr<Texture> getResult();
2616

27-
/**
28-
*
29-
*/
3017
void render(InstanceRenderer &renderer, Scene &scene, Context &ctx, const Assets &assets, const Camera &camera, UniformSetter &setter) override;
3118

3219
/**
3320
* Updates framebuffer size
3421
*/
3522
void onFramebufferChange(glm::uvec2 size) override;
23+
24+
~CompositePass() override = default;
25+
26+
protected:
27+
/**
28+
* Result framebuffer
29+
*/
30+
Framebuffer framebuffer;
31+
};
32+
33+
/**
34+
* CompositeWithBloomPass combines results from previous passes together
35+
*
36+
* result from transparent pass (lighting image + transparent objects) combined with bloom pass result
37+
*/
38+
class CompositeWithBloomPass final : public CompositePass {
39+
public:
40+
explicit CompositeWithBloomPass(Renderer& renderer);
41+
42+
void render(InstanceRenderer &renderer, Scene &scene, Context &ctx, const Assets &assets, const Camera &camera, UniformSetter &setter) override;
3643
};
3744
}

include/limitless/renderer/renderer.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ namespace Limitless {
124124
Builder& addTranslucentPass();
125125
Builder& addBloomPass();
126126
Builder& addOutlinePass();
127+
Builder& addCompositeWithBloomPass();
127128
Builder& addCompositePass();
128129
Builder& addFXAAPass();
129130
Builder& addScreenPass();

shaders/pipeline/composite.frag

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@ out vec3 color;
88

99
uniform sampler2D lightened;
1010

11-
uniform sampler2D bloom;
1211
uniform sampler2D outline;
13-
uniform float bloom_strength;
1412
uniform float tone_mapping_exposure;
1513
uniform float gamma;
1614

1715
void main() {
18-
vec3 bloom_color = texture(bloom, uv).rgb * bloom_strength;
19-
color = texture(lightened, uv).rgb + bloom_color;
16+
color = texture(lightened, uv).rgb;
2017

2118
// apply tone mapping function to HDR
2219
color = toneMapping(color, tone_mapping_exposure);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
ENGINE::COMMON
2+
3+
#include "../functions/tone_mapping.glsl"
4+
5+
in vec2 uv;
6+
7+
out vec3 color;
8+
9+
uniform sampler2D lightened;
10+
11+
uniform sampler2D bloom;
12+
uniform sampler2D outline;
13+
uniform float bloom_strength;
14+
uniform float tone_mapping_exposure;
15+
uniform float gamma;
16+
17+
void main() {
18+
vec3 bloom_color = texture(bloom, uv).rgb * bloom_strength;
19+
color = texture(lightened, uv).rgb + bloom_color;
20+
21+
// apply tone mapping function to HDR
22+
color = toneMapping(color, tone_mapping_exposure);
23+
24+
// apply gamma correction
25+
color = pow(color, vec3(1.0 / gamma));
26+
27+
// add objects outlining
28+
color += texture(outline, uv).rgb;
29+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
ENGINE::COMMON
2+
3+
layout (location = 0) in vec3 vertex_position;
4+
layout (location = 1) in vec2 vertex_uv;
5+
6+
out vec2 uv;
7+
8+
void main() {
9+
uv = vertex_uv;
10+
gl_Position = vec4(vertex_position, 1.0);
11+
}

src/limitless/renderer/composite_pass.cpp

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,46 @@ std::shared_ptr<Texture> CompositePass::getResult() {
2020
}
2121

2222
void CompositePass::render(
23+
[[maybe_unused]] InstanceRenderer &instance_renderer,
24+
[[maybe_unused]] Scene &scene,
25+
Context &ctx,
26+
const Assets &assets,
27+
[[maybe_unused]] const Camera &camera,
28+
[[maybe_unused]] UniformSetter &setter
29+
) {
30+
31+
ctx.disable(Capabilities::DepthTest);
32+
ctx.disable(Capabilities::Blending);
33+
34+
{
35+
ctx.setViewPort(getResult()->getSize());
36+
framebuffer.clear();
37+
38+
auto& shader = assets.shaders.get("composite");
39+
40+
shader.setUniform("lightened", renderer.getPass<TranslucentPass>().getResult());
41+
42+
{
43+
shader.setUniform("outline", renderer.getPass<OutlinePass>().getResult())
44+
.setUniform("tone_mapping_exposure", tone_mapping_exposure)
45+
.setUniform("gamma", gamma);
46+
}
47+
48+
shader.use();
49+
50+
assets.meshes.at("quad")->draw();
51+
}
52+
}
53+
54+
void CompositePass::onFramebufferChange(glm::uvec2 size) {
55+
framebuffer.onFramebufferChange(size);
56+
}
57+
58+
CompositeWithBloomPass::CompositeWithBloomPass(Renderer& renderer)
59+
: CompositePass {renderer} {
60+
}
61+
62+
void CompositeWithBloomPass::render(
2363
[[maybe_unused]] InstanceRenderer &instance_renderer,
2464
[[maybe_unused]] Scene &scene,
2565
Context &ctx,
@@ -34,7 +74,7 @@ void CompositePass::render(
3474
ctx.setViewPort(getResult()->getSize());
3575
framebuffer.clear();
3676

37-
auto& shader = assets.shaders.get("composite");
77+
auto& shader = assets.shaders.get("composite_with_bloom");
3878

3979
shader.setUniform("lightened", renderer.getPass<TranslucentPass>().getResult());
4080

@@ -55,7 +95,3 @@ void CompositePass::render(
5595
assets.meshes.at("quad")->draw();
5696
}
5797
}
58-
59-
void CompositePass::onFramebufferChange(glm::uvec2 size) {
60-
framebuffer.onFramebufferChange(size);
61-
}

src/limitless/renderer/deferred.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,11 @@ void Deferred::build(Context& ctx, const RendererSettings& settings) {
108108
/*
109109
* Combines shaded translucent result and bloom
110110
*/
111-
add<CompositePass>(size);
111+
if (settings.bloom) {
112+
add<CompositeWithBloomPass>(size);
113+
} else {
114+
add<CompositePass>(size);
115+
}
112116

113117
// if (settings.fast_approximate_antialiasing) {
114118
// add<FXAAPass>(size);

src/limitless/renderer/renderer.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ Renderer::Builder &Renderer::Builder::addOutlinePass() {
132132
return *this;
133133
}
134134

135+
Renderer::Builder &Renderer::Builder::addCompositeWithBloomPass() {
136+
renderer->passes.emplace_back(std::make_unique<CompositeWithBloomPass>(*renderer));
137+
return *this;
138+
}
139+
135140
Renderer::Builder &Renderer::Builder::addCompositePass() {
136141
renderer->passes.emplace_back(std::make_unique<CompositePass>(*renderer));
137142
return *this;
@@ -175,7 +180,11 @@ Renderer::Builder &Renderer::Builder::deferred() {
175180
addBloomPass();
176181
}
177182
addOutlinePass();
178-
addCompositePass();
183+
if (renderer->settings.bloom) {
184+
addCompositeWithBloomPass();
185+
} else {
186+
addCompositePass();
187+
}
179188
if (renderer->settings.fast_approximate_antialiasing) {
180189
addFXAAPass();
181190
}

src/limitless/renderer/screen_pass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void ScreenPass::render(
3939
if (renderer.isPresent<FXAAPass>()) {
4040
screen = renderer.getPass<FXAAPass>().getResult();
4141
} else {
42-
screen = renderer.getPass<CompositePass>().getResult();;
42+
screen = renderer.getPass<CompositePass>().getResult();
4343
}
4444

4545
shader.setUniform("screen_texture", screen);

src/limitless/shader_storage.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ void ShaderStorage::initialize(Context& ctx, const RendererSettings& settings, c
112112
}
113113

114114
add("deferred", compiler.compile(shader_dir / "pipeline/deferred"));
115-
add("composite", compiler.compile(shader_dir / "pipeline/composite"));
115+
if (settings.bloom) {
116+
add("composite_with_bloom", compiler.compile(shader_dir / "pipeline/composite_with_bloom"));
117+
} else {
118+
add("composite", compiler.compile(shader_dir / "pipeline/composite"));
119+
}
116120
add("outline", compiler.compile(shader_dir / "pipeline/outline"));
117121

118122

0 commit comments

Comments
 (0)