Hi Danny,
We did something like this.. using PIL to load in the image, convert
it to string data and load it into an opengl texture via the
glTexImage2D()
self.img = Image.open('image1.png')
self.texture = self.img.tostring()
width = image_width
height = image_height
glBindTexture(GL_TEXTURE_2D, 1)
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
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, width, height, 0,
GL_RGB,GL_UNSIGNED_BYTE, self.texture)
Thanks for the help Alex, I'll try to benchmark what this method
calls opposed to pyglet's method.. how can I save the output to a
file? With the logging module?
best,
mark
On Aug 29, 4:04 pm, Danny K <[EMAIL PROTECTED]> wrote:
> I'm having the same issue. Would you mind sharing the exact solution?
> Thanks
>
> Danny
>
> On Aug 29, 12:01 pm, jason <[EMAIL PROTECTED]> wrote:
>
> > Just to follow-up. We never were able to resolve the leak on OS X
> > boxes, but re-implementing the texture assignments in pure OpenGL did
> > the trick. Thanks again.
>
> > jason & mark
>
> > On Aug 28, 10:47 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
> > > Hi alex,
>
> > > Thanks for the suggestions, I tried it out with the debug:
>
> > > 8388608 (-8388608)
> > > 16777216 (+8388608)
> > > 8388608 (-8388608)
> > > 16777216 (+8388608)
> > > 8388608 (-8388608)
> > > 16777216 (+8388608)
> > > 8388608 (-8388608)
> > > 16777216 (+8388608)
> > > 8388608 (-8388608)
> > > 16777216 (+8388608)
> > > 8388608 (-8388608)
>
> > > and after little while of running:
>
> > > PID COMMAND %CPU TIME #TH #PRTS #MREGS RPRVT RSHRD RSIZE
> > > VSIZE
> > > 15816 Python 69.4% 1:34.97 2 86 979
> > > 1592M+ 15M- 1570M+ 2097M+
>
> > > We tried it out on OS X 10.4 and 10.5, and the leak was still present,
> > > in 10.4 the leak appeared to be in virtual memory and in 10.5 main
> > > memory. 10.5: RadeonX1600 10.4: GMA 950
> > > We have to stick to the Mac platform. Any other suggestions?
>
> > > thanks,
> > > jason + mark
>
> > > On Aug 27, 6:35 pm, "Alex Holkner" <[EMAIL PROTECTED]> wrote:
>
> > > > On 8/27/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> > > > > I'm trying to animate a loop through a set of images at an average of
> > > > > 1 fps, convert them to textures and then map them to a quad.
> > > > > I'm not loading them into memory at the start, but on the fly.
> > > > > Running with only three images at 1600x900 the script dies within a
> > > > > minute or so with a memory error.
>
> > > > > I'm reassigning the texture variable (self.img) with each loop, and
> > > > > have tried several ways to garbage collect it but
> > > > > it appears the texture data persists until it overflows. Am I going
> > > > > about this wrong, has anyone else encountered this?
>
> > > > > i've tried:
> > > > > self.img = None
> > > > > del self.img
> > > > > ...etc...
>
> > > > > It's important for this to be scalable, so loading them all into
> > > > > memory at the start is not an option.
>
> > > > > from __future__ import division
> > > > > from math import pi, sin, cos
> > > > > from numpy import *
> > > > > from pyglet import image
> > > > > from pyglet.gl import *
> > > > > from pyglet import clock
> > > > > from pyglet import window
> > > > > from pyglet.window import key
> > > > > import pyglet
> > > > > import random
> > > > > import glob, os, sys
> > > > > import gc
>
> > > > > try:
> > > > > config = Config(sample_buffers=1, samples=4,
> > > > > double_buffer=True,)
> > > > > w = window.Window(resizable=True, config=config)
>
> > > > > except window.NoSuchConfigException:
> > > > > w = window.Window(resizable=True)
>
> > > > > def setup():
> > > > > glClearColor(0, 0, 0, 1)
> > > > > glDisable(GL_DEPTH_TEST)
> > > > > glEnable(GL_LIGHT0)
> > > > > glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
> > > > > glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
> > > > > glEnable(player.img.target)
> > > > > glBindTexture(player.img.target, player.img.id)
>
> > > > > [EMAIL PROTECTED]
> > > > > def on_resize(width, height):
> > > > > glViewport(0, 0, width, height)
> > > > > glMatrixMode(GL_PROJECTION)
> > > > > glLoadIdentity()
> > > > > gluPerspective(60., float(width) / float(height), .1, 1000.)
> > > > > glMatrixMode(GL_MODELVIEW)
> > > > > glClearColor(0, 0, 0, 1)
> > > > > glDisable(GL_DEPTH_TEST)
> > > > > glEnable(GL_LIGHT0)
> > > > > glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
> > > > > glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
> > > > > glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
> > > > > return pyglet.event.EVENT_HANDLED
>
> > > > > class Player():
> > > > > def __init__(self):
> > > > > self.images = ['image.png','image2.png','iamge3.png']
> > > > > self.x = 0
> > > > > self.img = image.load(self.images[0]).texture
> > > > > def new_img(self,dt):
> > > > > self.x += 1
> > > > > self.img = image.load(self.images[self.x%3]).texture
>
> > > > > def draw(self):
> > > > > glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
> > > > > glBegin(GL_QUADS)
> > > > > glTexCoord2f(0,0)
> > > > > glVertex2f(-1,-1)
> > > > > glTexCoord2f(0,1)
> > > > > glVertex2f(-1,1)
> > > > > glTexCoord2f(1,1)
> > > > > glVertex2f(1,1)
> > > > > glTexCoord2f(1,0)
> > > > > glVertex2f(1,-1)
> > > > > glEnd()
>
> > > > > player = Player()
> > > > > setup()
>
> > > > > pyglet.clock.schedule_interval(player.new_img, 0.001)
>
> > > > > [EMAIL PROTECTED]
> > > > > def on_draw():
> > > > > glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
> > > > > glLoadIdentity()
> > > > > glTranslatef(0,0,-3)
> > > > > player.draw()
>
> > > > > pyglet.app.run()
>
> > > > Hello,
>
> > > > I tried your program with some reasonably-sized images but didn't see
> > > > any memory leak, nor did the program crash. This probably means the
> > > > problem is specific to your video driver or operating system (which
> > > > you didn't specify).
>
> > > > If you set the environment variable PYGLET_DEBUG_TEXTURE to 1, pyglet
> > > > will print out its estimate of the current texture memory usage after
> > > > any texture allocation or deallocation. For example, I get:
>
> > > > 4194304 (+4194304)
> > > > 8388608 (+4194304)
> > > > 4194304 (-4194304)
> > > > 8388608 (+4194304)
> > > > 4194304 (-4194304)
> > > > 8388608 (+4194304)
> > > > 4194304 (-4194304)
> > > > 8388608 (+4194304)
> > > > 4194304 (-4194304)
> > > > 8388608 (+4194304)
> > > > 4194304 (-4194304)
> > > > etc
>
> > > > The number in brackets shows the change in memory since the last
> > > > reading.
>
> > > > Alex.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---