diff options
author | José Fonseca <jose.r.fonseca@gmail.com> | 2011-11-25 11:15:06 +0000 |
---|---|---|
committer | José Fonseca <jose.r.fonseca@gmail.com> | 2011-11-25 11:15:06 +0000 |
commit | 3da77a1ad0b5960ffb1161ec327c80c49edc3dfe (patch) | |
tree | 35d89a5da14ed6ab6cedac4e452e6ba49d6fae16 /glstate.cpp | |
parent | 447b3d5c7402b0a9e780a26dfed76376e723ac94 (diff) |
Fix internalformat determination for renderbuffers.
glGetRenderbufferParameteriv takes a target.
Diffstat (limited to 'glstate.cpp')
-rw-r--r-- | glstate.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/glstate.cpp b/glstate.cpp index 665f887..6b9c072 100644 --- a/glstate.cpp +++ b/glstate.cpp @@ -825,7 +825,7 @@ getTextureLevelSize(GLint texture, GLint level, GLint *width, GLint *height) } -static GLint +static GLenum getTextureLevelFormat(GLint texture, GLint level) { GLenum target; @@ -862,6 +862,22 @@ getRenderbufferSize(GLint renderbuffer, GLint *width, GLint *height) } +static GLenum +getRenderbufferFormat(GLint renderbuffer) +{ + GLint bound_renderbuffer = 0; + glGetIntegerv(GL_RENDERBUFFER_BINDING, &bound_renderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer); + + GLint format = GL_NONE; + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_INTERNAL_FORMAT, &format); + + glBindRenderbuffer(GL_RENDERBUFFER, bound_renderbuffer); + + return format; +} + + static bool getFramebufferAttachmentSize(GLenum target, GLenum attachment, GLint *width, GLint *height) { @@ -917,18 +933,13 @@ getFramebufferAttachmentFormat(GLenum target, GLenum attachment) } if (object_type == GL_RENDERBUFFER) { - GLint format = GL_NONE; - glGetRenderbufferParameteriv(object_name, GL_RENDERBUFFER_INTERNAL_FORMAT, - &format); - return format; + return getRenderbufferFormat(object_name); } else if (object_type == GL_TEXTURE) { GLint texture_level = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &texture_level); - - GLint format = getTextureLevelFormat(object_name, texture_level); - return format; + return getTextureLevelFormat(object_name, texture_level); } else { std::cerr << "warning: unexpected GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = " << object_type << "\n"; return GL_NONE; |