mirror of
https://github.com/yquake2/3zb2.git
synced 2024-11-28 14:52:06 +00:00
Fix build on Windows.
This commit is contained in:
parent
685d0443c5
commit
9174879424
1 changed files with 73 additions and 308 deletions
381
src/q_shared.c
381
src/q_shared.c
|
@ -229,32 +229,6 @@ void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4])
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
|
|
||||||
float Q_fabs (float f)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if (f >= 0)
|
|
||||||
return f;
|
|
||||||
return -f;
|
|
||||||
#else
|
|
||||||
int tmp = * ( int * ) &f;
|
|
||||||
tmp &= 0x7FFFFFFF;
|
|
||||||
return * ( float * ) &tmp;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined _M_IX86 && !defined C_ONLY
|
|
||||||
#pragma warning (disable:4035)
|
|
||||||
__declspec( naked ) long Q_ftol( float f )
|
|
||||||
{
|
|
||||||
static int tmp;
|
|
||||||
__asm fld dword ptr [esp+4]
|
|
||||||
__asm fistp tmp
|
|
||||||
__asm mov eax, tmp
|
|
||||||
__asm ret
|
|
||||||
}
|
|
||||||
#pragma warning (default:4035)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
LerpAngle
|
LerpAngle
|
||||||
|
@ -326,307 +300,98 @@ BoxOnPlaneSide
|
||||||
Returns 1, 2, or 1 + 2
|
Returns 1, 2, or 1 + 2
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
#if !id386
|
int
|
||||||
int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
|
BoxOnPlaneSide(vec3_t emins, vec3_t emaxs, struct cplane_s *p)
|
||||||
{
|
{
|
||||||
float dist1, dist2;
|
float dist1, dist2;
|
||||||
int sides;
|
int sides;
|
||||||
|
|
||||||
// fast axial cases
|
/* fast axial cases */
|
||||||
if (p->type < 3)
|
if (p->type < 3)
|
||||||
{
|
{
|
||||||
if (p->dist <= emins[p->type])
|
if (p->dist <= emins[p->type])
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (p->dist >= emaxs[p->type])
|
if (p->dist >= emaxs[p->type])
|
||||||
|
{
|
||||||
return 2;
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// general case
|
/* general case */
|
||||||
switch (p->signbits)
|
switch (p->signbits)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
|
dist1 = p->normal[0] * emaxs[0] + p->normal[1] * emaxs[1] +
|
||||||
dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
|
p->normal[2] * emaxs[2];
|
||||||
break;
|
dist2 = p->normal[0] * emins[0] + p->normal[1] * emins[1] +
|
||||||
case 1:
|
p->normal[2] * emins[2];
|
||||||
dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
|
break;
|
||||||
dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
|
case 1:
|
||||||
break;
|
dist1 = p->normal[0] * emins[0] + p->normal[1] * emaxs[1] +
|
||||||
case 2:
|
p->normal[2] * emaxs[2];
|
||||||
dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
|
dist2 = p->normal[0] * emaxs[0] + p->normal[1] * emins[1] +
|
||||||
dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
|
p->normal[2] * emins[2];
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 2:
|
||||||
dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
|
dist1 = p->normal[0] * emaxs[0] + p->normal[1] * emins[1] +
|
||||||
dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
|
p->normal[2] * emaxs[2];
|
||||||
break;
|
dist2 = p->normal[0] * emins[0] + p->normal[1] * emaxs[1] +
|
||||||
case 4:
|
p->normal[2] * emins[2];
|
||||||
dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
|
break;
|
||||||
dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
|
case 3:
|
||||||
break;
|
dist1 = p->normal[0] * emins[0] + p->normal[1] * emins[1] +
|
||||||
case 5:
|
p->normal[2] * emaxs[2];
|
||||||
dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
|
dist2 = p->normal[0] * emaxs[0] + p->normal[1] * emaxs[1] +
|
||||||
dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
|
p->normal[2] * emins[2];
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 4:
|
||||||
dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
|
dist1 = p->normal[0] * emaxs[0] + p->normal[1] * emaxs[1] +
|
||||||
dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
|
p->normal[2] * emins[2];
|
||||||
break;
|
dist2 = p->normal[0] * emins[0] + p->normal[1] * emins[1] +
|
||||||
case 7:
|
p->normal[2] * emaxs[2];
|
||||||
dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
|
break;
|
||||||
dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
|
case 5:
|
||||||
break;
|
dist1 = p->normal[0] * emins[0] + p->normal[1] * emaxs[1] +
|
||||||
default:
|
p->normal[2] * emins[2];
|
||||||
dist1 = dist2 = 0; // shut up compiler
|
dist2 = p->normal[0] * emaxs[0] + p->normal[1] * emins[1] +
|
||||||
assert( 0 );
|
p->normal[2] * emaxs[2];
|
||||||
break;
|
break;
|
||||||
|
case 6:
|
||||||
|
dist1 = p->normal[0] * emaxs[0] + p->normal[1] * emins[1] +
|
||||||
|
p->normal[2] * emins[2];
|
||||||
|
dist2 = p->normal[0] * emins[0] + p->normal[1] * emaxs[1] +
|
||||||
|
p->normal[2] * emaxs[2];
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
dist1 = p->normal[0] * emins[0] + p->normal[1] * emins[1] +
|
||||||
|
p->normal[2] * emins[2];
|
||||||
|
dist2 = p->normal[0] * emaxs[0] + p->normal[1] * emaxs[1] +
|
||||||
|
p->normal[2] * emaxs[2];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dist1 = dist2 = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sides = 0;
|
sides = 0;
|
||||||
if (dist1 >= p->dist)
|
|
||||||
sides = 1;
|
|
||||||
if (dist2 < p->dist)
|
|
||||||
sides |= 2;
|
|
||||||
|
|
||||||
assert( sides != 0 );
|
if (dist1 >= p->dist)
|
||||||
|
{
|
||||||
|
sides = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dist2 < p->dist)
|
||||||
|
{
|
||||||
|
sides |= 2;
|
||||||
|
}
|
||||||
|
|
||||||
return sides;
|
return sides;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#pragma warning( disable: 4035 )
|
|
||||||
|
|
||||||
__declspec( naked ) int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
|
|
||||||
{
|
|
||||||
static int bops_initialized;
|
|
||||||
static int Ljmptab[8];
|
|
||||||
|
|
||||||
__asm {
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
cmp bops_initialized, 1
|
|
||||||
je initialized
|
|
||||||
mov bops_initialized, 1
|
|
||||||
|
|
||||||
mov Ljmptab[0*4], offset Lcase0
|
|
||||||
mov Ljmptab[1*4], offset Lcase1
|
|
||||||
mov Ljmptab[2*4], offset Lcase2
|
|
||||||
mov Ljmptab[3*4], offset Lcase3
|
|
||||||
mov Ljmptab[4*4], offset Lcase4
|
|
||||||
mov Ljmptab[5*4], offset Lcase5
|
|
||||||
mov Ljmptab[6*4], offset Lcase6
|
|
||||||
mov Ljmptab[7*4], offset Lcase7
|
|
||||||
|
|
||||||
initialized:
|
|
||||||
|
|
||||||
mov edx,ds:dword ptr[4+12+esp]
|
|
||||||
mov ecx,ds:dword ptr[4+4+esp]
|
|
||||||
xor eax,eax
|
|
||||||
mov ebx,ds:dword ptr[4+8+esp]
|
|
||||||
mov al,ds:byte ptr[17+edx]
|
|
||||||
cmp al,8
|
|
||||||
jge Lerror
|
|
||||||
fld ds:dword ptr[0+edx]
|
|
||||||
fld st(0)
|
|
||||||
jmp dword ptr[Ljmptab+eax*4]
|
|
||||||
Lcase0:
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase1:
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase2:
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase3:
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase4:
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase5:
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase6:
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
jmp LSetSides
|
|
||||||
Lcase7:
|
|
||||||
fmul ds:dword ptr[ecx]
|
|
||||||
fld ds:dword ptr[0+4+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[4+ecx]
|
|
||||||
fld ds:dword ptr[0+8+edx]
|
|
||||||
fxch st(2)
|
|
||||||
fmul ds:dword ptr[4+ebx]
|
|
||||||
fxch st(2)
|
|
||||||
fld st(0)
|
|
||||||
fmul ds:dword ptr[8+ecx]
|
|
||||||
fxch st(5)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fmul ds:dword ptr[8+ebx]
|
|
||||||
fxch st(1)
|
|
||||||
faddp st(3),st(0)
|
|
||||||
fxch st(3)
|
|
||||||
faddp st(2),st(0)
|
|
||||||
LSetSides:
|
|
||||||
faddp st(2),st(0)
|
|
||||||
fcomp ds:dword ptr[12+edx]
|
|
||||||
xor ecx,ecx
|
|
||||||
fnstsw ax
|
|
||||||
fcomp ds:dword ptr[12+edx]
|
|
||||||
and ah,1
|
|
||||||
xor ah,1
|
|
||||||
add cl,ah
|
|
||||||
fnstsw ax
|
|
||||||
and ah,1
|
|
||||||
add ah,ah
|
|
||||||
add cl,ah
|
|
||||||
pop ebx
|
|
||||||
mov eax,ecx
|
|
||||||
ret
|
|
||||||
Lerror:
|
|
||||||
int 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma warning( default: 4035 )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ClearBounds (vec3_t mins, vec3_t maxs)
|
void ClearBounds (vec3_t mins, vec3_t maxs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue