From: Filip V. <f.v...@ce...> - 2007-04-17 16:04:40
|
Lucas Keane wrote: >> I will gladly welcome you in the team. Do you, by any chance, have an >> access >> to a big-endian Mac machine(I suppose non-intel mac's are)? > > Yep. > Fine! >> I suppose you are mainly solving the byte order problems. If so, let's >> discuss the right way to implement a byte-order independency. > > What's that Serailizer thing that is supost to handle Byte-order? If > we got that to flip endiness(*Very* easy on a Mac), we'd have basicly > no problems, other that the fact that I'm having trouble geting ogre > working... > You're right about the Ogre::Serializer, pity is that is seems to be pretty focused on Ogre's kind of operations (reading from DataStreamPtr). Handling the mission files/save-games will require some flexibility. DataStream does not have a write support... Now what I would propose is writing that kind of class, that would take a File instance and work with that, exposing that kind of methods, or implementing some useful methods in File class itself (This one should be central to all file handling later anyway). Those would be directed to write arrays of ints/floats/etc. Then there is DTypeDef, which should get big-endian support because I can't guarantee that there won't be an ugly union in the future to handle, and swapping to little endian when writing, and from when reading would solve any issue (I don't believe that it would be so time consuming to swap). This class could be used for pretty any struct if there is not a need to iterate through the array fields defined inside (expensive to do). Bonus here is that there would be no need to swap each and every element for each and every struct. There are quite many in Dark Engine - for link data, properties, and specialized chunks, which would cause a nightmare to handle. Plan was to add a binary service, which would load and hold structure definitions (some differ game-to-game). Then, when loading binary data, one would request a structure by it's family and name, and use it to determine the size in bytes to load and interpret the loaded data (as well as write if needed). Now, I was looking at cmake's support at detecting endianness, and there is a TestBigEndian module that will fill a variable with one if the platform is big-endian. I suppose putting the result in config.h as a start is a nice idea, so I'll do this today, along with some more plan details in TODO, as I promissed. I face some small problems with ogre too now, good luck with yours. There is a very good forum on ogre's homepage, but I suppose you've already found it. Here: http://www.ogre3d.org/phpBB2/ If there would be something I could do to make it simpler for you just write me an e-mail. Filip |