Fixed issue where framebuffers had renderbuffers and textures for the same attachments

dev
Shariq Shah 6 years ago
parent 475fdf564f
commit 1447a9403f
  1. 2
      src/common/version.h
  2. 4
      src/game/camera.c
  3. 51
      src/game/framebuffer.c

@ -4,7 +4,7 @@
/* Auto generated version file. DO NOT MODIFY */
#define SYMMETRY_VERSION_MAJOR 0
#define SYMMETRY_VERSION_MINOR 1
#define SYMMETRY_VERSION_REVISION 301
#define SYMMETRY_VERSION_REVISION 302
#define SYMMETRY_VERSION_BRANCH "dev"
#endif

@ -118,7 +118,7 @@ void camera_attach_fbo(struct Camera* camera,
log_error("camera:attach_fbo", "Camera already has fbo attached!");
return;
}
camera->fbo = framebuffer_create(width, height, has_depth, 0, resizeable);
camera->fbo = framebuffer_create(width, height, 0, 1, resizeable);
if(camera->fbo > -1)
{
if(has_color)
@ -144,7 +144,7 @@ void camera_attach_fbo(struct Camera* camera,
width, height,
GL_DEPTH_COMPONENT,
GL_DEPTH_COMPONENT,
GL_UNSIGNED_BYTE,
GL_FLOAT,
NULL);
texture_set_param(camera->depth_tex, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
texture_set_param(camera->depth_tex, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

@ -42,8 +42,8 @@ int framebuffer_create(int width, int height, bool has_depth, bool has_color, bo
{
int index = -1;
GLuint fbo = 0;
GLuint depth_renderbuffer = 0;
GLuint color_renderbuffer = 0;
GLuint depth_renderbuffer = -1;
GLuint color_renderbuffer = -1;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@ -133,11 +133,11 @@ void framebuffer_remove(int index)
fbo->texture_attachments[i] = -1;
}
}
if(fbo->depth_renderbuffer != 0) glDeleteRenderbuffers(1, &fbo->depth_renderbuffer);
if(fbo->color_renderbuffer != 0) glDeleteRenderbuffers(1, &fbo->color_renderbuffer);
if(fbo->depth_renderbuffer > -1) glDeleteRenderbuffers(1, &fbo->depth_renderbuffer);
if(fbo->color_renderbuffer > -1) glDeleteRenderbuffers(1, &fbo->color_renderbuffer);
glDeleteFramebuffers(1, &fbo->handle);
fbo->color_renderbuffer = 0;
fbo->depth_renderbuffer = 0;
fbo->color_renderbuffer = -1;
fbo->depth_renderbuffer = -1;
fbo->handle = 0;
fbo->width = -1;
fbo->height = -1;
@ -184,14 +184,35 @@ void framebuffer_texture_set(int index, int texture, enum Framebuffer_Attachment
GLint current_fbo = 0;
GL_CHECK(glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &current_fbo));
framebuffer_bind(index);
GL_CHECK(glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,
gl_attachment,
GL_TEXTURE_2D,
texture_get_texture_handle(texture),
0));
fbo->texture_attachments[attachment] = texture;
if(attachment == FA_COLOR_ATTACHMENT0) glDrawBuffer(GL_COLOR_ATTACHMENT0);
{
GL_CHECK(glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,
gl_attachment,
GL_TEXTURE_2D,
texture_get_texture_handle(texture),
0));
fbo->texture_attachments[attachment] = texture;
if(attachment == FA_COLOR_ATTACHMENT0)
{
glDrawBuffer(GL_COLOR_ATTACHMENT0);
if(fbo->color_renderbuffer > -1)
{
glDeleteRenderbuffers(1, &fbo->color_renderbuffer);
fbo->color_renderbuffer = -1;
}
}
else if(attachment == FA_DEPTH_ATTACHMENT && fbo->depth_renderbuffer != -1)
{
glDeleteRenderbuffers(1, &fbo->depth_renderbuffer);
fbo->depth_renderbuffer = -1;
}
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
log_error("framebuffer:texture_set", "Framebuffer not complete!");
}
glBindFramebuffer(GL_FRAMEBUFFER, current_fbo);
}
@ -220,7 +241,7 @@ void framebuffer_resize(int index, int width, int height)
struct FBO* fbo = &fbo_list[index];
if(!fbo->resizeable) return;
framebuffer_bind(index);
if(fbo->depth_renderbuffer != 0)
if(fbo->depth_renderbuffer > -1)
{
glBindRenderbuffer(GL_RENDERBUFFER, fbo->depth_renderbuffer);
GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER,
@ -234,7 +255,7 @@ void framebuffer_resize(int index, int width, int height)
glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
if(fbo->color_renderbuffer != 0)
if(fbo->color_renderbuffer > -1)
{
glBindRenderbuffer(GL_RENDERBUFFER, fbo->color_renderbuffer);
GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER,

Loading…
Cancel
Save