OpenIllusionist v0.05 is now available via CVS. This is a continuation of the major overhaul! OI is now implemented using wxWidgets, meaning that it can potentially be compiled on any major platform. It is currently running under windows, and a test version is running under linux (Fedora Core 4), although the linux version is still lacking a framegrabber which will have to be written at a later date. Some of the changes are as follows:
*Agents are now descended from wxThread and so have inherent threading properties. The interface and overrides structures have now been completely removed
*The AgentController creates a new agent, creates it's thread and sets it going. This is all it needs to do since the agent automatically adds itself to the agent list when it is ready, removes itself from the list as it is finishing and deletes itself (since a detached wxThread automatically deletes itself when finished)
*The CFrameGrabber has a slightly modified interface (the VFW one has yet to be updated). It provides a list (wxArrayString) of capture devices available on the system. Then a device can be selected and connected to
*The main window (CMainFrame) now reflects this change and provides a drop-down list of capture devices which can be selected. The main window also has a launch button which, when pressed, opens up the render window (CRenderFrame) and starts all of the threads going. When the render window is closed the threads are all stopped, but can continue where they left off when the launch button is pressed again!
*The render window now uses a wxTimer to trigger a refresh of the renderer (CRender)
*CRender is descended from a wxGLCanvas and renders the world through it's OnPaint event
*New message posting system based on wxWidgets events. This allows the agents to post messages in a cross-platform way
*All critical sections are now wxCriticalSection variable (so that they are cross-platform and work properly with the wxThreads). They are also members of various classes throughout the framework and are no longer global variables. Global variables are bad m'kay!
-All opengl calls must occur in the same thread, this was not happening for the freeing of textures. The agent now goes through different stages of termination which ensure that the render thread frees the texture memory properly
-The DirectShow framegrabber was dumping memory when the application quit due to a bug in the way the graph was built and destroyed.
-CRender being created in the constructor of CRenderFrame caused all sorts of problems under linux, so this was moved
-The OpenGL Auxiliary Image loader was causing memory leaks. Switched to using wxImage to load textures. This means that textures (and other images) can now be a variety of formats. We've selected PNG for the splash screen and textures that are currently used by OI
-Some of the critical sections have been tweaked to improve performance