From c695d961585f292c0973bdac2565f331c78a9028 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Mon, 1 Apr 2019 13:06:50 +0200 Subject: [PATCH] Add depth of field to post shader --- res/shaders/post.frag | 11 ++++++++++- src/renderlogic.cpp | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/res/shaders/post.frag b/res/shaders/post.frag index 5fe0a7e..eea465d 100644 --- a/res/shaders/post.frag +++ b/res/shaders/post.frag @@ -17,5 +17,14 @@ void main() { float z = pow(texture(depthbuffer, UV).r , 0x800); z = abs(z*2-1)*1.2; - color_out = vec4(vec3(texture(depthbuffer, UV).r), 1.0); + + int radius = int(5*z); + vec3 color = vec3(0); + for (int x = -radius; x <= radius; x++) + for (int y = -radius; y <= radius; y++){ + vec2 p = UV + x*dx + y*dy; + color += texture(framebuffer, p); + } + color /= pow(2*radius+1, 2); + color_out = vec4(color, 1.0); } diff --git a/src/renderlogic.cpp b/src/renderlogic.cpp index b9985c0..b3e944b 100644 --- a/src/renderlogic.cpp +++ b/src/renderlogic.cpp @@ -87,12 +87,16 @@ void initRenderer(GLFWwindow* window, int windowWidth, int windowHeight) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, windowWidth, windowHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); if (first) glGenTextures(1, &framebufferDepthTextureID); glBindTexture(GL_TEXTURE_2D, framebufferDepthTextureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, windowWidth, windowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); if (first) glGenRenderbuffers(1, &framebufferDepthBufferID); glBindRenderbuffer(GL_RENDERBUFFER, framebufferDepthBufferID);