I'm using a framebuffer object to draw into a texture for a program I
am working on. I only have an ID for the texture which resides on the
GPU, but would like to save that texture to a file (png or jpeg).
However I am having some trouble figuring out how to read back the
image from the gpu using pyglet.
I have tried using glReadPixles as follows, but cant get it to work:
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, byref
(buffer))
Does anyone know what type I have to make 'buffer' to make this work?
I tried buffer = c_uint(0) as well as c_ubyte(0), but that didnt seem
to work. Do I have to allocate the size for the data as well? if so
does anyone know how to declare a c array of a specific size in
python, or where I can read some more about the types? Amybe I am
totally off as well.
I'd like to try to save the image after getting the data from
glReadPixles the following way using PIL, unless there is a better
way:
image = Image.fromstring(mode="RGB", size=(width, height),
data=buffer)
image.save('test.png')
Any help is greatly apretiated!
--
Thomas
Here is the FBO class I am using...I'm trying to write a saveTexture
method for it:
class Fbo:
def __init__(self, size=(1024,1024)):
self.framebuffer = c_uint(0)
self.depthbuffer = c_uint(0)
self.texture = c_uint(0)
self.size=size
glGenFramebuffersEXT(1,byref(self.framebuffer))
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
glGenRenderbuffersEXT(1, byref(self.depthbuffer));
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.depthbuffer)
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,
GL_DEPTH_COMPONENT, size[0], size[1])
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, self.depthbuffer)
glGenTextures (1, byref(self.texture))
glBindTexture (GL_TEXTURE_2D, self.texture)
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR)
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, size[0], size[1], 0,GL_RGB,
GL_UNSIGNED_BYTE, 0)
glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, self.texture, 0)
glBindRenderbufferEXT (GL_RENDERBUFFER_EXT, 0)
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0)
status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
if status != GL_FRAMEBUFFER_COMPLETE_EXT:
print "Error in framebuffer activation"
def bind(self):
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
glPushAttrib(GL_VIEWPORT_BIT)
glViewport(0,0,self.size[0], self.size[1])
def release(self):
glPopAttrib()
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pyglet-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/pyglet-users?hl=en
-~----------~----~----~----~------~----~------~--~---