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()
------
thanks,
mark beasley
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---