Summary:

  • Make OgreMain independent of the resource system; providing hooks for an external resource system to integrate itself
  • Move the mesh/material/etc loaders to their own (optional) libraries
  • Reimplement the existing resource system in its own optional library
  • Generalize the existing codec system to all resource formats


(All of the above libraries will become optional libraries in the same manner as the RTSS and similar are now)

Bitbucket Repository

Proposed timeline

Bonding Period (-17 June)

Establish current interractions between OgreMain and the resource system (especially those not passing through the Resource class and its' descendants). Establish additional requirements for new architecture from other users. Finalize design of the new resource architecture. Consider design changes to existing resource manager as it is migrated to become the "default resource system"

Preliminaries (~1 week 17 June - 24 June)

Remove all convenience methods in OgreMain taking resource names and provide replacements taking Resource pointers where necessary (e.g. createEntity)
Remove all methods in OgreMain taking resource file paths and provide replacements taking DataStreamPtr or other parameter types where necessary (e.g. setWorldGeometry)
Provide "forward compatibility" stubs for accessing resources matching the future "default resource system" API
Update all samples to use the new forward compatibility stubs for all resource accesses

OgreMain refactor & redesign (~5 weeks 25 June - 29 July)

Move most of the existing resource system (ResourceGroup*, Archive*, etc) to the (initially unbuilt) OrgeResourceManager library
Move the existing resource loaders (Mesh loader, Material loader, etc) into the new Ogre*Loader libraries (built)
Move the existing script parser into the new OgreScriptParser library (built)

Refactor and rewrite ResourceManager and Resource inline with the new resource system design. Create the new ResourceLoader interface. Migrate all existing resource types and managers across to the new interface.

Implement a "trivial/example" resource system (one which vends hard-coded resources) to verify changes to OgreMain

Schedule slack (29 July - 02 August)

Midterm Evaluation (02 August)

At this stage changes to OgreMain should be largely complete. Remaining changes will focus on re-implementing the a resource system with functionality at least equivalent to the existing resource system and implementing libraries with additional functionality

Default Resource System (1.5 weeks 03 August - 13 August)

Modify the existing resource system (separated into the OgreResourceSystem library back in Stage 2) to function with the new OgreMain resource hooks. Bring it back up to at least functional parity with the existing resource system.
Ensure all samples build against this new library

Network Resource System (1.5 weeks 14 August - 24 August)

Implement an "on demand" network loading resource system (perhaps based upon the popular, widely available and liberally licensed libcurl) and place it in the optional OgreNetworkResourceSystem library. Implement a sample which uses this library.

Additional Model Format Loader (1 week 25 August - 31 August)

Add an additional model codec, either based upon the AssImp library or similar, or for a relatively simple and common model format (.x perhaps?).

Merge, Bug Fixing and Schedule Slack (2 weeks 1 September - 16 September)

Time set aside for resolving merge conflicts, finding and fixing bugs, and any overruns in the above, and reserved for any additional suggested projects/stretch goals.