summaryrefslogtreecommitdiff
path: root/glstate.cpp
diff options
context:
space:
mode:
authorJosé Fonseca <jose.r.fonseca@gmail.com>2011-11-25 11:15:06 +0000
committerJosé Fonseca <jose.r.fonseca@gmail.com>2011-11-25 11:15:06 +0000
commit3da77a1ad0b5960ffb1161ec327c80c49edc3dfe (patch)
tree35d89a5da14ed6ab6cedac4e452e6ba49d6fae16 /glstate.cpp
parent447b3d5c7402b0a9e780a26dfed76376e723ac94 (diff)
Fix internalformat determination for renderbuffers.
glGetRenderbufferParameteriv takes a target.
Diffstat (limited to 'glstate.cpp')
-rw-r--r--glstate.cpp27
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;