ogre 不常用类记录之Serializer

一、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 = 1);
 virtual void flipFromLittleEndian(void* pData, size_t size, size_t count = 1);

追到跟的特殊处理方式:

void Serializer::flipEndian(void * pData, size_t size)
    {
        char swapByte;
        for(unsigned int byteIndex = 0; byteIndex < size/2; byteIndex++)
        {
            swapByte = *(char *)((size_t)pData + byteIndex);
            *(char *)((size_t)pData + byteIndex) = *(char *)((size_t)pData + size - byteIndex - 1);
            *(char *)((size_t)pData + size - byteIndex - 1) = swapByte;
        }
    }

其实这儿没必要深究啦,做插件的话会用这个类的函数就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思依_xuni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值