diff --git a/21-framebuffers/shaders/21-screen-kernel.frag.glsl b/21-framebuffers/shaders/21-screen-kernel.frag.glsl new file mode 100644 index 0000000..ec8fbeb --- /dev/null +++ b/21-framebuffers/shaders/21-screen-kernel.frag.glsl @@ -0,0 +1,38 @@ +#version 330 core +out vec4 FragColor; + +in vec2 TexCoords; + +uniform sampler2D screenTexture; + +const float offset = 1.0 / 300.0; + +void main() +{ + vec2 offsets[9] = vec2[]( + vec2(-offset, offset), // top-left + vec2( 0.0f, offset), // top-center + vec2( offset, offset), // top-right + vec2(-offset, 0.0f), // center-left + vec2( 0.0f, 0.0f), // center-center + vec2( offset, 0.0f), // center-right + vec2(-offset, -offset), // bottom-left + vec2( 0.0f, -offset), // bottom-center + vec2( offset, -offset) // bottom-right + ); + + float kernel[9] = float[]( + 1.0 / 16, 2.0 / 16, 1.0 / 16, + 2.0 / 16, 4.0 / 16, 2.0 / 16, + 1.0 / 16, 2.0 / 16, 1.0 / 16 + ); + + vec3 col = vec3(0.0); + + for(int i = 0; i < 9; i++) { + vec3 sampleTex = vec3(texture(screenTexture, TexCoords.st + offsets[i])); + col += sampleTex * kernel[i]; + } + + FragColor = vec4(col, 1.0); +} diff --git a/21-framebuffers/src/scene.hpp b/21-framebuffers/src/scene.hpp index ebc9450..edc4f39 100644 --- a/21-framebuffers/src/scene.hpp +++ b/21-framebuffers/src/scene.hpp @@ -41,7 +41,7 @@ struct Scene { Scene(components::Scene& config): shader{config.shader.vertex_path, config.shader.frag_path}, - screen{.shader={config.screen_shader.vertex_path, config.shader.frag_path}}, + screen{.shader={config.screen_shader.vertex_path, config.screen_shader.frag_path}}, materials{config.materials}, camera{ .position=config.camera.position, diff --git a/21-framebuffers/src/shader.cpp b/21-framebuffers/src/shader.cpp index d51ee0b..e965c61 100644 --- a/21-framebuffers/src/shader.cpp +++ b/21-framebuffers/src/shader.cpp @@ -43,6 +43,7 @@ void check_error(const std::string& what, unsigned int thing, GLenum check_type) } unsigned int Shader::load_shader(const std::string& filename, GLenum shader_type) { + dbc::log($F("Loading shader {}", filename)); dbc::check(fs::exists(filename), std::format("shader file {} does not exist", filename));