I am happy to report that MV3D works on Windows using Python-Ogre now. I also figured out what was wrong with the GUI. Maybe I mentioned that the Windows-like GUI skin was seemingly broken. It turns out that CEGUI subtly changed the names of some DLLs and ALSO changed the name of their skin files. For some reason, the old style skin files are around, and– you guessed it, they refer to the DLLs by name. So WindowsLookSkin.scheme is now WindowsLook.scheme. Fixing the filename issues in MV3D code lets me use the Windows-like skin again. Happyness! The other skin– while it looks good in some apps– just doesn’t do it for me. Here’s a pair of Windows screen shots:
For some reason, it looks like the whole image is partly gray. I’m not quite sure what the deal is there. I suspect it is CEGUI related though.
I’ve also gotten Ogre, OIS, and CEGUI python modules to compile, link, and import successfully in Linux. However, although I get no errors in MV3D, it just comes up as a black screen. It’s trying to render frames, but nothing is coming out for some reason. It isn’t an Ogre thing since the Python-Ogre demos run fine. I haven’t been able to get the Python-Ogre CEGUI demos to run at all yet (they seem to have CEGUI file name issues as well!), so it could be CEGUI related.
Finally, I was able to mark a ticket as finished. I added support for adding and deleting AssetGroups and Assets in the AssetTool webapp. Now it is considered fully functional, though it could use some sprucing up visually. That isn’t high on my list, so I marked it as done. One thing that I’m not too fond of with it is that to create a new Asset or AssetGroup, you have to enter the constructor info for it. In other words, the file name (as the import goes) and the class name must be entered. It’s not as big a problem with AssetGroups because there is only one type of AssetGroup. It is possible to include multiple AssetGroup types, but I don’t see any reason currently. I solved this problem in the IGE by using a type of asset called a CodeAsset (which at its most basic form stores the file name and class name of a constructor) and using an asset browser (filtered to only show CodeAssets) to select the appropriate class. That may be a solution to implement here as well. It is just a little odd to have Asset Code be itself an Asset.
Some video stuff came up last night, so I was stuck in Windows, but hopefully tonight, I will be in Linux and will be able to work on getting the client to work there. I just hate doing development on Windows. It makes me feel all icky.
In other (MV3D) news, I theoretically have OctreeArea splitting itself up amongst the servers simulating it, but I haven’t tested yet. In order to get the full benefit of this, I have to figure out how do quickly transfer ownership of objects from one server to another.
Input from anyone who knows Twisted well would be much appreciated. Here’s the issue. Let’s say you have four servers. Server A, B, C and D. Server A has a (pb.Cacheable) object that it is hosting– say a MV3D Avatar. MV3D considers server A as the master server for the object. Server B has a cached reference to the object and is considered by MV3D to be a slave server for the object. Servers C and D also have a cached reference to the object, but are just caching– they aren’t slaves (i.e. lowest priority). C is caching from A and D is caching from B.
MV3D decides it wants to switch the master server for the object from server A to server B (A would become a slave). What is the fastest way to do this assuming that both A and B have completely up to date copies of the object and C and D must continue caching (though it doesn’t really matter if they switch which server they are caching from as long as any clients connected to them don’t see a blip). How would you go about doing this in the fastest way?
This scenario does work and has been tested, but it is definitely not done the fastest way. What currently happens is that on server B, a new object is created and all the data is copied from the old object (including the list of caching clients). The new object then replaces the old object. The new object is sent to server A (all data gets transferred over the wire). Server A copies all its caching clients from the old object to the new and then puts the new object in place.
As you can see, in this case, all the data is sent from server B to server A, but server A already has the data– server B just needs to have the pointer to the remote object on server A in order to send future updates. My only thought in the matter is to somehow send a blank copy of the object from B to A, but I’m not sure how to do this and maybe there is a better way? Anyone out there know?