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) > > > > @w.event > > > 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) > > > > @w.event > > > 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 -~----------~----~----~----~------~----~------~--~---
