[PyOpenGL-Users] Odd framebuffer error
Brought to you by:
mcfletch
|
From: Derakon <de...@gm...> - 2010-11-30 19:40:56
|
I have a program that displays large numbers (thousands) of textures,
with the user able to pan and zoom about the collection. The sheer
texture count is causing slowdown, so I'm working on adding
framebuffers which collect many of the textures at low detail levels,
like taking a photo of a group of photos. Since the individual
textures never move relative to each other, I can just display the one
pre-rendered texture instead whenever the user is sufficiently
zoomed-out.
I made a test program that works fine (on my OSX laptop), but I'm
running into an error when I try to adapt the code to the main program
(on a considerably more powerful Windows 7 box). Each small texture is
contained in a Tile class instance, and a single Tile can be placed
and oriented arbitrarily. Meanwhile, the entire working area is tiled
with MegaTile instances; Tiles are pre-rendered onto MegaTiles using
framebuffers as needed. However, I'm getting a 1286 error when I call
glEnd() after rendering a Tile. From what I can tell this means I
didn't set up the framebuffer properly, but it looks fine to me. I
must be missing something.
Here's the prerendering code in MegaTile:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.texture)
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D,
self.texture, 0)
glViewport(0, 0, megaTilePixelSize, megaTilePixelSize) #
megaTilePixelSize is 512
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-.375, viewer.m_w - .375, # m_w and m_h are the
width/height of the window
-.375, viewer.m_h - .375,
1, -1)
glScalef(megaTileScaleFactor, megaTileScaleFactor, 1) #
megaTileScaleFactor is 1/21.0
glTranslatef(-self.pos[0], -self.pos[1], 0)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_TEXTURE_2D)
for tile in newTiles: # Tile instances to render to MegaTile
tile.render(viewBox)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
Here's Tile.render():
def render(self, viewBox):
if not self.intersectsBox(viewBox):
return
glColor3f(1, 1, 1)
theta = N.pi/180 * self.rotation
c = N.cos(theta)
s = N.sin(theta)
(w,h) = self.size
cw = c*w
sw = s*w
ch = c*h
sh = s*h
img = self.textureData
pic_ny, pic_nx = img.shape
tex_nx,tex_ny = getTexSize(pic_nx,pic_ny)
picTexRatio_x = float(pic_nx) / tex_nx
picTexRatio_y = float(pic_ny) / tex_ny
(x,y) = self.pos
glBindTexture(GL_TEXTURE_2D, self.texture)
glBegin(GL_QUADS)
glTexCoord2f(0, 0)
glVertex2f(x, y)
glTexCoord2f(picTexRatio_x, 0)
glVertex2f(x + cw, y + sw)
glTexCoord2f(picTexRatio_x, picTexRatio_y)
glVertex2f(x + cw - sh, y + sw + ch)
glTexCoord2f(0, picTexRatio_y)
glVertex2f(x - sh, y + ch)
glEnd() # This is where the error triggers
Any ideas what could be causing this? Suggestions on what I should be
researching to figure it out?
-Chris
|