Completely worked out how to deal with texture animation and sprite textures: TextureMovie - derives from Texture - isAnimated() - returns true - getFrames - decodes all frames and returns them as individual textures. Make a note that this is an extremely slow process. For normals textures it just returns self. - I will need this when providing a texture to SpriteGenerator among other things, so it may extract frames an generate an atlas (although I don't expect this will be needed for actual movies, I want to keep the functionality the same for all textures) - getBindableTexture() - texture used by RenderSystem. Normal textures just return self, while animated textures return the current frame - DOES NOT support sprites (i.e. multiple textures from a single atlas, only multiple separate textures) - TextureMovieTheora decodes textures on the fly - TextureMovieRaw is created from a bunch of normal textures (using some utility method) - play/stop/rewind/setSpeed/move(+/- frameCount) SpriteTexture - Inherits from Resource - Replace all references to it using shared_ptr with handles - How do I create it? - From native code allow a constructor that accepts a single texture (no atlas) - And another constructor that accepts an uv an atlas - Can contain sprite animation - Some constructors accept a list of uvs, list of pages (referencing an atlas), a list of atlases and FPS - (Need multiple atlases as some animations might be lengthty) - Will have play/stop/rewind/getTime()/etc. methods - It is up to the renderer to use animation data. - GUIManager will be modified so use animation data if it exists - For use in Scene I may add a special SpriteRenderer that uses certain logic and a certain material which supports sprite animation SpriteGenerator - generateAtlas: Accepts a list of textures and outputs a list of SpriteTextures and a texture atlas - generateSpriteAnimation: Accepts a list of textures, and generates a single SpriteTexture with a set of UVs and FPS - All of them must be manually saved using Resources::create if they are to persist TODO - How to handle animating uvs? - Things using animated textures will need to manually set the uvs every frame?