I am rendering a scene to a texture using an fbo and then I render this texture to another one using a gaussian blur shader. But after that, the borders of all faces that are alpha blended get black. Here are some screenshots:
Before...:
http://i.stack.imgur.com/fgjxQ.jpg
..and after going through the blur (blur size is set to 0 in this case)
http://i.stack.imgur.com/tq94C.jpg
This is where the textures are created:
Code :glGenTextures(1, &render.color_tex); glBindTexture(GL_TEXTURE_2D, render.color_tex); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, display_width * render.aa_level, display_height * render.aa_level, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindTexture(GL_TEXTURE_2D, 0); glGenTextures(1, &render.color_tex_temp); glBindTexture(GL_TEXTURE_2D, render.color_tex_temp); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, display_width * render.aa_level, display_height * render.aa_level, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindTexture(GL_TEXTURE_2D, 0); glGenTextures(1, &render.color_tex_blurred); glBindTexture(GL_TEXTURE_2D, render.color_tex_blurred); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, display_width * render.aa_level, display_height * render.aa_level, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindTexture(GL_TEXTURE_2D, 0);
The function that blurs the rendered texture:
Code :void CGame::BlurTexture(GLuint in, GLuint temp, GLuint out, int width, int height, float size) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, blur.fbo); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, temp, 0); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glViewport(0, 0, width, height); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 0.0, 1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); blur_shader.BindShader(); blur_shader.SetBlur(size, BLUR_VERTICAL); blur_shader.SetTexture(in, display_width, display_height); glColor4f(1.0, 1.0, 1.0, 1.0); glBegin(GL_QUADS); blur_shader.SetTexCoord(Vec(0.0, 1.0)); glVertex2f(-1.0, 1.0); blur_shader.SetTexCoord(Vec(0.0, 0.0)); glVertex2f(-1.0, -1.0); blur_shader.SetTexCoord(Vec(1.0, 0.0)); glVertex2f(1.0, -1.0); blur_shader.SetTexCoord(Vec(1.0, 1.0)); glVertex2f(1.0, 1.0); glEnd(); UseNoShader(); glFlush(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, out, 0); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glViewport(0, 0, width, height); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 0.0, 1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); blur_shader.BindShader(); blur_shader.SetBlur(size, BLUR_HORIZONTAL); blur_shader.SetTexture(temp, display_width, display_height); glColor4f(1.0, 1.0, 1.0, 1.0); glBegin(GL_QUADS); blur_shader.SetTexCoord(Vec(0.0, 1.0)); glVertex2f(-1.0, 1.0); blur_shader.SetTexCoord(Vec(0.0, 0.0)); glVertex2f(-1.0, -1.0); blur_shader.SetTexCoord(Vec(1.0, 0.0)); glVertex2f(1.0, -1.0); blur_shader.SetTexCoord(Vec(1.0, 1.0)); glVertex2f(1.0, 1.0); glEnd(); UseNoShader(); glFlush(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, 0, 0); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, out); glGenerateMipmapEXT(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); }
And finally how the function is called:
By the way, it is NOT the fault of the shader. I used the fixed functionality and the issue was still presentCode :BlurTexture(render.color_tex, render.color_tex_temp, render.color_tex_blurred, display_width * render.aa_level, display_height * render.aa_level, 0.0



