more endianness swapping fun for BVH serialization.
This commit is contained in:
@@ -1106,7 +1106,7 @@ btOptimizedBvh *btOptimizedBvh::deSerializeInPlace(void *i_alignedDataBuffer, un
|
|||||||
unsigned char *nodeData = (unsigned char *)bvh;
|
unsigned char *nodeData = (unsigned char *)bvh;
|
||||||
nodeData += sizeof(btOptimizedBvh);
|
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;
|
nodeData += sizeToAdd;
|
||||||
|
|
||||||
int nodeCount = bvh->m_curNodeIndex;
|
int nodeCount = bvh->m_curNodeIndex;
|
||||||
@@ -1155,7 +1155,7 @@ btOptimizedBvh *btOptimizedBvh::deSerializeInPlace(void *i_alignedDataBuffer, un
|
|||||||
nodeData += sizeof(btOptimizedBvhNode) * nodeCount;
|
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;
|
nodeData += sizeToAdd;
|
||||||
|
|
||||||
// Now serialize the subtree headers
|
// Now serialize the subtree headers
|
||||||
|
|||||||
@@ -405,11 +405,11 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
|
///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
|
#ifdef BT_USE_DOUBLE_PRECISION
|
||||||
unsigned char* dest = (unsigned char*) &destVec;
|
unsigned char* dest = (unsigned char*) &destVal;
|
||||||
unsigned char* src = (unsigned char*) &sourceVec;
|
unsigned char* src = (unsigned char*) &sourceVal;
|
||||||
dest[0] = src[7];
|
dest[0] = src[7];
|
||||||
dest[1] = src[6];
|
dest[1] = src[6];
|
||||||
dest[2] = src[5];
|
dest[2] = src[5];
|
||||||
@@ -419,45 +419,34 @@ SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3
|
|||||||
dest[6] = src[1];
|
dest[6] = src[1];
|
||||||
dest[7] = src[0];
|
dest[7] = src[0];
|
||||||
#else
|
#else
|
||||||
unsigned char* dest = (unsigned char*) &destVec;
|
unsigned char* dest = (unsigned char*) &destVal;
|
||||||
unsigned char* src = (unsigned char*) &sourceVec;
|
unsigned char* src = (unsigned char*) &sourceVal;
|
||||||
dest[0] = src[3];
|
dest[0] = src[3];
|
||||||
dest[1] = src[2];
|
dest[1] = src[2];
|
||||||
dest[2] = src[1];
|
dest[2] = src[1];
|
||||||
dest[3] = src[0];
|
dest[3] = src[0];
|
||||||
#endif //BT_USE_DOUBLE_PRECISION
|
#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
|
///btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
|
||||||
SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector)
|
SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef BT_USE_DOUBLE_PRECISION
|
|
||||||
btVector3 swappedVec;
|
btVector3 swappedVec;
|
||||||
unsigned char* dest = (unsigned char*) &swappedVec;
|
for (int i=0;i<4;i++)
|
||||||
unsigned char* src = (unsigned char*) &vector;
|
{
|
||||||
|
btSwapScalarEndian(vector[i],swappedVec[i]);
|
||||||
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];
|
|
||||||
|
|
||||||
vector = swappedVec;
|
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
|
#endif //SIMD__VECTOR3_H
|
||||||
|
|||||||
Reference in New Issue
Block a user