Project Overview:
After some recent work with ITextureEffect, I had the idea of creating a common interface for animating textures, whether from GIFs, AVIs, MOVs, etc., or from manual 2D graphics manipulation.
This project is built around a 2D animation controller interface, called I2DAnimationController. It has interface methods for common actions like open(), play(), stop(), pause(), rewind(), etc. On the surface, it might look like a movie player, but depending on what the controller is used for, you only need to implement whichever of the methods you want to use. So for example, for manual 2D graphics manipulation, you only implement the following two methods:
public Image getFrame();
public boolean frameChanged();
public int getWidth();
public int getHeight();
public void cleanup();
This allows you to manually manipulate the awt.Image however you like, and that image will be applied to the animated texture.
The second part of this project is a helper class called TextureAnimator, which takes instances of I2DAnimationController and creates ITextureEffects for the specified textures. You can animate them individually via an animate( String texturename, Object syncObject ) method, or animate all of them them at once via an animateAll( Object syncObject ) method.
Just to give you an idea of how versatile this setup is, it is possible to create a second World and FrameBuffer with software-rendering, passing the display() method a BufferedImage's getGraphics(), and return a handle to that image through the getFrame() implementation. This allows you to create a seperate 3D world rendered onto a texture inside another 3D world. I'm not sure what you would use that for, but I tried it and it does work.
I also provided some example ITextureAnimator implementations for GIF, JMF video, and manual 2D image manipulation.