more endianness swapping fun for BVH serialization.

This commit is contained in:
ejcoumans
2007-09-19 22:37:22 +00:00
parent 1d556b9a6c
commit 287f11de01
2 changed files with 22 additions and 33 deletions

View File

@@ -1106,7 +1106,7 @@ btOptimizedBvh *btOptimizedBvh::deSerializeInPlace(void *i_alignedDataBuffer, un
unsigned char *nodeData = (unsigned char *)bvh;
nodeData += sizeof(btOptimizedBvh);
unsigned sizeToAdd = BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK);
unsigned sizeToAdd = (BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
nodeData += sizeToAdd;
int nodeCount = bvh->m_curNodeIndex;
@@ -1155,7 +1155,7 @@ btOptimizedBvh *btOptimizedBvh::deSerializeInPlace(void *i_alignedDataBuffer, un
nodeData += sizeof(btOptimizedBvhNode) * nodeCount;
}
sizeToAdd = BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK);
sizeToAdd = (BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
nodeData += sizeToAdd;
// Now serialize the subtree headers

View File

@@ -405,11 +405,11 @@ public:
///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3& destVec)
SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar& sourceVal, btScalar& destVal)
{
#ifdef BT_USE_DOUBLE_PRECISION
unsigned char* dest = (unsigned char*) &destVec;
unsigned char* src = (unsigned char*) &sourceVec;
#ifdef BT_USE_DOUBLE_PRECISION
unsigned char* dest = (unsigned char*) &destVal;
unsigned char* src = (unsigned char*) &sourceVal;
dest[0] = src[7];
dest[1] = src[6];
dest[2] = src[5];
@@ -419,45 +419,34 @@ SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3
dest[6] = src[1];
dest[7] = src[0];
#else
unsigned char* dest = (unsigned char*) &destVec;
unsigned char* src = (unsigned char*) &sourceVec;
unsigned char* dest = (unsigned char*) &destVal;
unsigned char* src = (unsigned char*) &sourceVal;
dest[0] = src[3];
dest[1] = src[2];
dest[2] = src[1];
dest[3] = src[0];
#endif //BT_USE_DOUBLE_PRECISION
}
///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3& destVec)
{
for (int i=0;i<4;i++)
{
btSwapScalarEndian(sourceVec[i],destVec[i]);
}
}
///btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector)
{
#ifdef BT_USE_DOUBLE_PRECISION
btVector3 swappedVec;
unsigned char* dest = (unsigned char*) &swappedVec;
unsigned char* src = (unsigned char*) &vector;
dest[0] = src[7];
dest[1] = src[6];
dest[2] = src[5];
dest[3] = src[4];
dest[4] = src[3];
dest[5] = src[2];
dest[6] = src[1];
dest[7] = src[0];
for (int i=0;i<4;i++)
{
btSwapScalarEndian(vector[i],swappedVec[i]);
}
vector = swappedVec;
#else
btVector3 swappedVec;
unsigned char* dest = (unsigned char*) &swappedVec;
unsigned char* src = (unsigned char*) &vector;
dest[0] = src[3];
dest[1] = src[2];
dest[2] = src[1];
dest[3] = src[0];
vector = swappedVec;
#endif //BT_USE_DOUBLE_PRECISION
}
#endif //SIMD__VECTOR3_H