width = 512
height = 512
glutInit()
glutInitWindowSize(512, 512)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)
win = glutCreateWindow("Test")
texture_id = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, texture_id)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, None)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
glBindTexture(GL_TEXTURE_2D, 0)
# bind / create
fbo = glGenFramebuffersEXT(1)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, int(fbo))
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture_id, 0)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
# use
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, int(fbo))
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT)
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT)
currentBufferStatus = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
if (currentBufferStatus != GL_FRAMEBUFFER_COMPLETE_EXT):
print "glCheckFramebufferStatusEXT = 0x%x" % currentBufferStatus
self.assertEquals(currentBufferStatus, GL_FRAMEBUFFER_COMPLETE_EXT)
# test
glClearColor(1.0, 1.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT)
colors = glReadPixelsf(0, 0, 1, 1, GL_RGBA)
pixel = _get_pixel(colors)
self.assertEquals( pixel[0], 1.0 )
self.assertEquals( pixel[1], 1.0 )
self.assertEquals( pixel[2], 0.0 )
self.assertEquals( pixel[3], 1.0 )
glClearColor(1.0, 2.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT)
colors = glReadPixelsf(0, 0, 1, 1, GL_RGBA)
pixel = _get_pixel(colors)
self.assertEquals( pixel[0], 1.0 )
self.assertEquals( pixel[1], 2.0 )
self.assertEquals( pixel[2], 0.0 )
self.assertEquals( pixel[3], 1.0 )
# unbind
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
glutDestroyWindow(win)