@ -39,44 +39,20 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead , WA 99021
* = = LICENSE = = */
# include "plPXConvert.h"
bool plPXConvert : : Validate ( )
{
NxVec3 nxVec ;
hsVector3 plVec ;
int nxVecXOffset = ( ( char * ) & nxVec . x ) - ( ( char * ) & nxVec ) ;
int nxVecYOffset = ( ( char * ) & nxVec . y ) - ( ( char * ) & nxVec ) ;
int nxVecZOffset = ( ( char * ) & nxVec . z ) - ( ( char * ) & nxVec ) ;
int plVecXOffset = ( ( char * ) & plVec . fX ) - ( ( char * ) & plVec ) ;
int plVecYOffset = ( ( char * ) & plVec . fY ) - ( ( char * ) & plVec ) ;
int plVecZOffset = ( ( char * ) & plVec . fZ ) - ( ( char * ) & plVec ) ;
NxQuat nxQuat ;
hsQuat plQuat ;
int nxQuatXOffset = ( ( char * ) & nxQuat . x ) - ( ( char * ) & nxQuat ) ;
int nxQuatYOffset = ( ( char * ) & nxQuat . y ) - ( ( char * ) & nxQuat ) ;
int nxQuatZOffset = ( ( char * ) & nxQuat . z ) - ( ( char * ) & nxQuat ) ;
int nxQuatWOffset = ( ( char * ) & nxQuat . w ) - ( ( char * ) & nxQuat ) ;
# include "plPXConvert.h"
int plQuatXOffset = ( ( char * ) & plQuat . fX ) - ( ( char * ) & plQuat ) ;
int plQuatYOffset = ( ( char * ) & plQuat . fY ) - ( ( char * ) & plQuat ) ;
int plQuatZOffset = ( ( char * ) & plQuat . fZ ) - ( ( char * ) & plQuat ) ;
int plQuatWOffset = ( ( char * ) & plQuat . fW ) - ( ( char * ) & plQuat ) ;
# define CHECK_OFFSET(NxCls, NxMem, hsCls, hsMem) \
static_assert ( offsetof ( NxCls , NxMem ) = = offsetof ( hsCls , hsMem ) , \
" PhysX Conversion Failure: " # NxCls " and " # hsCls " offsets do not match for " # NxMem " ! " ) ;
bool offsetsOK =
nxVecXOffset = = plVecXOffset & &
nxVecYOffset = = plVecYOffset & &
nxVecZOffset = = plVecZOffset & &
nxQuatXOffset = = plQuatXOffset & &
nxQuatYOffset = = plQuatYOffset & &
nxQuatZOffset = = plQuatZOffset & &
nxQuatWOffset = = plQuatWOffset ;
CHECK_OFFSET ( NxVec3 , x , hsScalarTriple , fX ) ;
CHECK_OFFSET ( NxVec3 , y , hsScalarTriple , fY ) ;
CHECK_OFFSET ( NxVec3 , z , hsScalarTriple , fZ ) ;
hsAssert ( offsetsOK , " PhysX or Plasma offsets have changed, need to rewrite conversion code " ) ;
CHECK_OFFSET ( NxQuat , x , hsQuat , fX ) ;
CHECK_OFFSET ( NxQuat , y , hsQuat , fY ) ;
CHECK_OFFSET ( NxQuat , z , hsQuat , fZ ) ;
CHECK_OFFSET ( NxQuat , w , hsQuat , fW ) ;
# undef CHECK_OFFSET
return offsetsOK ;
}