一、Serializer
位置:OgreSerializer.h
主功能:读写文件
从它继承的类有:MeshSerializerImpl,SkeletonSerializer,GpuNamedConstantsSerializer。同时它又是继承自SerializerAlloc(一种内存管理模式,MaterialSerializer也继承自它)。
也就是ogre里涉及的文件,包括mesh、gpu program 、骨骼文件,都是通过它读的,除了材质文件(.material)。
说明:
里面采用了自己的方式,以免让别人读出来。
头,识别是哪种。
virtual void writeFileHeader(void);
virtual void writeChunkHeader(uint16 id, size_t size);
virtual void readFileHeader(DataStreamPtr& stream);
virtual unsigned short readChunk(DataStreamPtr& stream);
具体一般格式的读写
void writeFloats(const float* const pfloat, size_t count);
void writeFloats(const double* const pfloat, size_t count);
void writeShorts(const uint16* const pShort, size_t count);
void writeInts(const uint32* const pInt, size_t count);
void writeBools(const bool* const pLong, size_t count);
void writeObject(const Vector3& vec);
void writeObject(const Quaternion& q);
void writeString(const String& string);
void writeData(const void* const buf, size_t size, size_t count);
void readBools(DataStreamPtr& stream, bool* pDest, size_t count);
void readFloats(DataStreamPtr& stream, float* pDest, size_t count);
void readFloats(DataStreamPtr& stream, double* pDest, size_t count);
void readShorts(DataStreamPtr& stream, uint16* pDest, size_t count);
void readInts(DataStreamPtr& stream, uint32* pDest, size_t count);
void readObject(DataStreamPtr& stream, Vector3& pDest);
void readObject(DataStreamPtr& stream, Quaternion& pDest);
String readString(DataStreamPtr& stream);
String readString(DataStreamPtr& stream, size_t numChars);
内部特殊处理的函数
virtual void flipToLittleEndian(void* pData, size_t size, size_t count = );
virtual void flipFromLittleEndian(void* pData, size_t size, size_t count = );
追到跟的特殊处理方式:
void Serializer::flipEndian(void * pData, size_t size)
{
char swapByte;
for(unsigned int byteIndex = ; byteIndex < size/; byteIndex++)
{
swapByte = *(char *)((size_t)pData + byteIndex);
*(char *)((size_t)pData + byteIndex) = *(char *)((size_t)pData + size - byteIndex - );
*(char *)((size_t)pData + size - byteIndex - ) = swapByte;
}
}
其实这儿没必要深究啦,做插件的话会用这个类的函数就行。