mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2024-11-27 11:34:14 +01:00
36 lines
832 B
C
36 lines
832 B
C
|
#pragma once
|
||
|
|
||
|
struct CompressedVector
|
||
|
{
|
||
|
#ifdef COMPRESSED_COL_VECTORS
|
||
|
int16 x, y, z;
|
||
|
CVector Get(void) const { return CVector(x, y, z)/128.0f; };
|
||
|
void Set(float x, float y, float z) { this->x = x*128.0f; this->y = y*128.0f; this->z = z*128.0f; };
|
||
|
#ifdef GTA_PS2
|
||
|
void Unpack(uint128 &qword) const {
|
||
|
__asm__ volatile (
|
||
|
"lh $8, 0(%1)\n"
|
||
|
"lh $9, 2(%1)\n"
|
||
|
"lh $10, 4(%1)\n"
|
||
|
"pextlw $10, $8\n"
|
||
|
"pextlw $2, $9, $10\n"
|
||
|
"sq $2, %0\n"
|
||
|
: "=m" (qword)
|
||
|
: "r" (this)
|
||
|
: "$8", "$9", "$10", "$2"
|
||
|
);
|
||
|
}
|
||
|
#else
|
||
|
void Unpack(int32 *qword) const {
|
||
|
qword[0] = x;
|
||
|
qword[1] = y;
|
||
|
qword[2] = z;
|
||
|
qword[3] = 0; // junk
|
||
|
}
|
||
|
#endif
|
||
|
#else
|
||
|
float x, y, z;
|
||
|
CVector Get(void) const { return CVector(x, y, z); };
|
||
|
void Set(float x, float y, float z) { this->x = x; this->y = y; this->z = z; };
|
||
|
#endif
|
||
|
};
|