Use aluVector in some more places
This commit is contained in:
parent
97f6d302fe
commit
3b8f54d572
@ -2259,12 +2259,8 @@ static ALvoid InitContext(ALCcontext *Context)
|
||||
//Initialise listener
|
||||
Context->Listener->Gain = 1.0f;
|
||||
Context->Listener->MetersPerUnit = 1.0f;
|
||||
Context->Listener->Position[0] = 0.0f;
|
||||
Context->Listener->Position[1] = 0.0f;
|
||||
Context->Listener->Position[2] = 0.0f;
|
||||
Context->Listener->Velocity[0] = 0.0f;
|
||||
Context->Listener->Velocity[1] = 0.0f;
|
||||
Context->Listener->Velocity[2] = 0.0f;
|
||||
aluVectorSet(&Context->Listener->Position, 0.0f, 0.0f, 0.0f, 1.0f);
|
||||
aluVectorSet(&Context->Listener->Velocity, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
Context->Listener->Forward[0] = 0.0f;
|
||||
Context->Listener->Forward[1] = 0.0f;
|
||||
Context->Listener->Forward[2] = -1.0f;
|
||||
|
67
Alc/ALu.c
67
Alc/ALu.c
@ -260,9 +260,9 @@ static ALvoid CalcListenerParams(ALlistener *Listener)
|
||||
aluCrossproduct(N, V, U);
|
||||
aluNormalize(U);
|
||||
|
||||
P[0] = Listener->Position[0];
|
||||
P[1] = Listener->Position[1];
|
||||
P[2] = Listener->Position[2];
|
||||
P[0] = Listener->Position.v[0];
|
||||
P[1] = Listener->Position.v[1];
|
||||
P[2] = Listener->Position.v[2];
|
||||
|
||||
aluMatrixSet(&Listener->Params.Matrix,
|
||||
U[0], V[0], -N[0], 0.0f,
|
||||
@ -273,9 +273,7 @@ static ALvoid CalcListenerParams(ALlistener *Listener)
|
||||
aluMatrixVector(P, 1.0f, &Listener->Params.Matrix);
|
||||
aluMatrixSetRow(&Listener->Params.Matrix, 3, -P[0], -P[1], -P[2], 1.0f);
|
||||
|
||||
aluVectorSet(&Listener->Params.Velocity,
|
||||
Listener->Velocity[0], Listener->Velocity[1], Listener->Velocity[2], 0.0f
|
||||
);
|
||||
Listener->Params.Velocity = Listener->Velocity;
|
||||
aluMatrixVector(Listener->Params.Velocity.v, 0.0f, &Listener->Params.Matrix);
|
||||
}
|
||||
|
||||
@ -669,7 +667,7 @@ ALvoid CalcNonAttnSourceParams(ALvoice *voice, const ALsource *ALSource, const A
|
||||
ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCcontext *ALContext)
|
||||
{
|
||||
ALCdevice *Device = ALContext->Device;
|
||||
ALfloat Velocity[3],Direction[3],Position[3],SourceToListener[3];
|
||||
aluVector Position, Velocity, Direction, SourceToListener;
|
||||
ALfloat InnerAngle,OuterAngle,Angle,Distance,ClampedDist;
|
||||
ALfloat MinVolume,MaxVolume,MinDist,MaxDist,Rolloff;
|
||||
ALfloat ConeVolume,ConeHF,SourceVolume,ListenerGain;
|
||||
@ -720,15 +718,9 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
MinVolume = ALSource->MinGain;
|
||||
MaxVolume = ALSource->MaxGain;
|
||||
Pitch = ALSource->Pitch;
|
||||
Position[0] = ALSource->Position[0];
|
||||
Position[1] = ALSource->Position[1];
|
||||
Position[2] = ALSource->Position[2];
|
||||
Direction[0] = ALSource->Direction[0];
|
||||
Direction[1] = ALSource->Direction[1];
|
||||
Direction[2] = ALSource->Direction[2];
|
||||
Velocity[0] = ALSource->Velocity[0];
|
||||
Velocity[1] = ALSource->Velocity[1];
|
||||
Velocity[2] = ALSource->Velocity[2];
|
||||
Position = ALSource->Position;
|
||||
Direction = ALSource->Direction;
|
||||
Velocity = ALSource->Velocity;
|
||||
MinDist = ALSource->RefDistance;
|
||||
MaxDist = ALSource->MaxDistance;
|
||||
Rolloff = ALSource->RollOffFactor;
|
||||
@ -791,27 +783,28 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
{
|
||||
const aluMatrix *Matrix = &ALContext->Listener->Params.Matrix;
|
||||
/* Transform source vectors */
|
||||
aluMatrixVector(Position, 1.0f, Matrix);
|
||||
aluMatrixVector(Direction, 0.0f, Matrix);
|
||||
aluMatrixVector(Velocity, 0.0f, Matrix);
|
||||
aluMatrixVector(Position.v, 1.0f, Matrix);
|
||||
aluMatrixVector(Direction.v, 0.0f, Matrix);
|
||||
aluMatrixVector(Velocity.v, 0.0f, Matrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
const aluVector *lvelocity = &ALContext->Listener->Params.Velocity;
|
||||
/* Offset the source velocity to be relative of the listener velocity */
|
||||
Velocity[0] += lvelocity->v[0];
|
||||
Velocity[1] += lvelocity->v[1];
|
||||
Velocity[2] += lvelocity->v[2];
|
||||
Velocity.v[0] += lvelocity->v[0];
|
||||
Velocity.v[1] += lvelocity->v[1];
|
||||
Velocity.v[2] += lvelocity->v[2];
|
||||
}
|
||||
|
||||
SourceToListener[0] = -Position[0];
|
||||
SourceToListener[1] = -Position[1];
|
||||
SourceToListener[2] = -Position[2];
|
||||
aluNormalize(SourceToListener);
|
||||
aluNormalize(Direction);
|
||||
SourceToListener.v[0] = -Position.v[0];
|
||||
SourceToListener.v[1] = -Position.v[1];
|
||||
SourceToListener.v[2] = -Position.v[2];
|
||||
SourceToListener.v[2] = 0.0f;
|
||||
aluNormalize(SourceToListener.v);
|
||||
aluNormalize(Direction.v);
|
||||
|
||||
/* Calculate distance attenuation */
|
||||
Distance = sqrtf(aluDotproduct(Position, Position));
|
||||
Distance = sqrtf(aluDotproduct(Position.v, Position.v));
|
||||
ClampedDist = Distance;
|
||||
|
||||
Attenuation = 1.0f;
|
||||
@ -908,7 +901,7 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
}
|
||||
|
||||
/* Calculate directional soundcones */
|
||||
Angle = RAD2DEG(acosf(aluDotproduct(Direction,SourceToListener)) * ConeScale) * 2.0f;
|
||||
Angle = RAD2DEG(acosf(aluDotproduct(Direction.v,SourceToListener.v)) * ConeScale) * 2.0f;
|
||||
if(Angle > InnerAngle && Angle <= OuterAngle)
|
||||
{
|
||||
ALfloat scale = (Angle-InnerAngle) / (OuterAngle-InnerAngle);
|
||||
@ -968,8 +961,8 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
SpeedOfSound = 1.0f;
|
||||
}
|
||||
|
||||
VSS = aluDotproduct(Velocity, SourceToListener) * DopplerFactor;
|
||||
VLS = aluDotproduct(lvelocity->v, SourceToListener) * DopplerFactor;
|
||||
VSS = aluDotproduct(Velocity.v, SourceToListener.v) * DopplerFactor;
|
||||
VLS = aluDotproduct(lvelocity->v, SourceToListener.v) * DopplerFactor;
|
||||
|
||||
Pitch *= clampf(SpeedOfSound-VLS, 1.0f, SpeedOfSound*2.0f - 1.0f) /
|
||||
clampf(SpeedOfSound-VSS, 1.0f, SpeedOfSound*2.0f - 1.0f);
|
||||
@ -1012,9 +1005,9 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
if(Distance > FLT_EPSILON)
|
||||
{
|
||||
ALfloat invlen = 1.0f/Distance;
|
||||
dir[0] = Position[0] * invlen;
|
||||
dir[1] = Position[1] * invlen;
|
||||
dir[2] = Position[2] * invlen * ZScale;
|
||||
dir[0] = Position.v[0] * invlen;
|
||||
dir[1] = Position.v[1] * invlen;
|
||||
dir[2] = Position.v[2] * invlen * ZScale;
|
||||
|
||||
/* Calculate elevation and azimuth only when the source is not at
|
||||
* the listener. This prevents +0 and -0 Z from producing
|
||||
@ -1075,9 +1068,9 @@ ALvoid CalcSourceParams(ALvoice *voice, const ALsource *ALSource, const ALCconte
|
||||
if(Distance > FLT_EPSILON || radius > FLT_EPSILON)
|
||||
{
|
||||
ALfloat invlen = 1.0f/maxf(Distance, radius);
|
||||
dir[0] = Position[0] * invlen;
|
||||
dir[1] = Position[1] * invlen;
|
||||
dir[2] = Position[2] * invlen * ZScale;
|
||||
dir[0] = Position.v[0] * invlen;
|
||||
dir[1] = Position.v[1] * invlen;
|
||||
dir[2] = Position.v[2] * invlen * ZScale;
|
||||
}
|
||||
ComputeDirectionalGains(Device, dir, DryGain, Target);
|
||||
|
||||
|
@ -9,8 +9,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct ALlistener {
|
||||
volatile ALfloat Position[3];
|
||||
volatile ALfloat Velocity[3];
|
||||
aluVector Position;
|
||||
aluVector Velocity;
|
||||
volatile ALfloat Forward[3];
|
||||
volatile ALfloat Up[3];
|
||||
volatile ALfloat Gain;
|
||||
|
@ -57,9 +57,9 @@ typedef struct ALsource {
|
||||
volatile ALfloat RefDistance;
|
||||
volatile ALfloat MaxDistance;
|
||||
volatile ALfloat RollOffFactor;
|
||||
volatile ALfloat Position[3];
|
||||
volatile ALfloat Velocity[3];
|
||||
volatile ALfloat Direction[3];
|
||||
aluVector Position;
|
||||
aluVector Velocity;
|
||||
aluVector Direction;
|
||||
volatile ALfloat Orientation[2][3];
|
||||
volatile ALboolean HeadRelative;
|
||||
volatile ALboolean Looping;
|
||||
|
@ -74,9 +74,7 @@ AL_API ALvoid AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat val
|
||||
SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done);
|
||||
|
||||
LockContext(context);
|
||||
context->Listener->Position[0] = value1;
|
||||
context->Listener->Position[1] = value2;
|
||||
context->Listener->Position[2] = value3;
|
||||
aluVectorSet(&context->Listener->Position, value1, value2, value3, 1.0f);
|
||||
ATOMIC_STORE(&context->UpdateSources, AL_TRUE);
|
||||
UnlockContext(context);
|
||||
break;
|
||||
@ -86,9 +84,7 @@ AL_API ALvoid AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat val
|
||||
SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done);
|
||||
|
||||
LockContext(context);
|
||||
context->Listener->Velocity[0] = value1;
|
||||
context->Listener->Velocity[1] = value2;
|
||||
context->Listener->Velocity[2] = value3;
|
||||
aluVectorSet(&context->Listener->Velocity, value1, value2, value3, 0.0f);
|
||||
ATOMIC_STORE(&context->UpdateSources, AL_TRUE);
|
||||
UnlockContext(context);
|
||||
break;
|
||||
@ -282,17 +278,17 @@ AL_API ALvoid AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat
|
||||
{
|
||||
case AL_POSITION:
|
||||
LockContext(context);
|
||||
*value1 = context->Listener->Position[0];
|
||||
*value2 = context->Listener->Position[1];
|
||||
*value3 = context->Listener->Position[2];
|
||||
*value1 = context->Listener->Position.v[0];
|
||||
*value2 = context->Listener->Position.v[1];
|
||||
*value3 = context->Listener->Position.v[2];
|
||||
UnlockContext(context);
|
||||
break;
|
||||
|
||||
case AL_VELOCITY:
|
||||
LockContext(context);
|
||||
*value1 = context->Listener->Velocity[0];
|
||||
*value2 = context->Listener->Velocity[1];
|
||||
*value3 = context->Listener->Velocity[2];
|
||||
*value1 = context->Listener->Velocity.v[0];
|
||||
*value2 = context->Listener->Velocity.v[1];
|
||||
*value3 = context->Listener->Velocity.v[2];
|
||||
UnlockContext(context);
|
||||
break;
|
||||
|
||||
@ -383,17 +379,17 @@ AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *valu
|
||||
{
|
||||
case AL_POSITION:
|
||||
LockContext(context);
|
||||
*value1 = (ALint)context->Listener->Position[0];
|
||||
*value2 = (ALint)context->Listener->Position[1];
|
||||
*value3 = (ALint)context->Listener->Position[2];
|
||||
*value1 = (ALint)context->Listener->Position.v[0];
|
||||
*value2 = (ALint)context->Listener->Position.v[1];
|
||||
*value3 = (ALint)context->Listener->Position.v[2];
|
||||
UnlockContext(context);
|
||||
break;
|
||||
|
||||
case AL_VELOCITY:
|
||||
LockContext(context);
|
||||
*value1 = (ALint)context->Listener->Velocity[0];
|
||||
*value2 = (ALint)context->Listener->Velocity[1];
|
||||
*value3 = (ALint)context->Listener->Velocity[2];
|
||||
*value1 = (ALint)context->Listener->Velocity.v[0];
|
||||
*value2 = (ALint)context->Listener->Velocity.v[1];
|
||||
*value3 = (ALint)context->Listener->Velocity.v[2];
|
||||
UnlockContext(context);
|
||||
break;
|
||||
|
||||
|
@ -519,9 +519,7 @@ static ALboolean SetSourcefv(ALsource *Source, ALCcontext *Context, SrcFloatProp
|
||||
CHECKVAL(isfinite(values[0]) && isfinite(values[1]) && isfinite(values[2]));
|
||||
|
||||
LockContext(Context);
|
||||
Source->Position[0] = values[0];
|
||||
Source->Position[1] = values[1];
|
||||
Source->Position[2] = values[2];
|
||||
aluVectorSet(&Source->Position, values[0], values[1], values[2], 1.0f);
|
||||
UnlockContext(Context);
|
||||
ATOMIC_STORE(&Source->NeedsUpdate, AL_TRUE);
|
||||
return AL_TRUE;
|
||||
@ -530,9 +528,7 @@ static ALboolean SetSourcefv(ALsource *Source, ALCcontext *Context, SrcFloatProp
|
||||
CHECKVAL(isfinite(values[0]) && isfinite(values[1]) && isfinite(values[2]));
|
||||
|
||||
LockContext(Context);
|
||||
Source->Velocity[0] = values[0];
|
||||
Source->Velocity[1] = values[1];
|
||||
Source->Velocity[2] = values[2];
|
||||
aluVectorSet(&Source->Velocity, values[0], values[1], values[2], 0.0f);
|
||||
UnlockContext(Context);
|
||||
ATOMIC_STORE(&Source->NeedsUpdate, AL_TRUE);
|
||||
return AL_TRUE;
|
||||
@ -541,9 +537,7 @@ static ALboolean SetSourcefv(ALsource *Source, ALCcontext *Context, SrcFloatProp
|
||||
CHECKVAL(isfinite(values[0]) && isfinite(values[1]) && isfinite(values[2]));
|
||||
|
||||
LockContext(Context);
|
||||
Source->Direction[0] = values[0];
|
||||
Source->Direction[1] = values[1];
|
||||
Source->Direction[2] = values[2];
|
||||
aluVectorSet(&Source->Direction, values[0], values[1], values[2], 0.0f);
|
||||
UnlockContext(Context);
|
||||
ATOMIC_STORE(&Source->NeedsUpdate, AL_TRUE);
|
||||
return AL_TRUE;
|
||||
@ -1054,25 +1048,25 @@ static ALboolean GetSourcedv(ALsource *Source, ALCcontext *Context, SrcFloatProp
|
||||
|
||||
case AL_POSITION:
|
||||
LockContext(Context);
|
||||
values[0] = Source->Position[0];
|
||||
values[1] = Source->Position[1];
|
||||
values[2] = Source->Position[2];
|
||||
values[0] = Source->Position.v[0];
|
||||
values[1] = Source->Position.v[1];
|
||||
values[2] = Source->Position.v[2];
|
||||
UnlockContext(Context);
|
||||
return AL_TRUE;
|
||||
|
||||
case AL_VELOCITY:
|
||||
LockContext(Context);
|
||||
values[0] = Source->Velocity[0];
|
||||
values[1] = Source->Velocity[1];
|
||||
values[2] = Source->Velocity[2];
|
||||
values[0] = Source->Velocity.v[0];
|
||||
values[1] = Source->Velocity.v[1];
|
||||
values[2] = Source->Velocity.v[2];
|
||||
UnlockContext(Context);
|
||||
return AL_TRUE;
|
||||
|
||||
case AL_DIRECTION:
|
||||
LockContext(Context);
|
||||
values[0] = Source->Direction[0];
|
||||
values[1] = Source->Direction[1];
|
||||
values[2] = Source->Direction[2];
|
||||
values[0] = Source->Direction.v[0];
|
||||
values[1] = Source->Direction.v[1];
|
||||
values[2] = Source->Direction.v[2];
|
||||
UnlockContext(Context);
|
||||
return AL_TRUE;
|
||||
|
||||
@ -2464,15 +2458,9 @@ static ALvoid InitSourceParams(ALsource *Source)
|
||||
Source->InnerAngle = 360.0f;
|
||||
Source->OuterAngle = 360.0f;
|
||||
Source->Pitch = 1.0f;
|
||||
Source->Position[0] = 0.0f;
|
||||
Source->Position[1] = 0.0f;
|
||||
Source->Position[2] = 0.0f;
|
||||
Source->Velocity[0] = 0.0f;
|
||||
Source->Velocity[1] = 0.0f;
|
||||
Source->Velocity[2] = 0.0f;
|
||||
Source->Direction[0] = 0.0f;
|
||||
Source->Direction[1] = 0.0f;
|
||||
Source->Direction[2] = 0.0f;
|
||||
aluVectorSet(&Source->Position, 0.0f, 0.0f, 0.0f, 1.0f);
|
||||
aluVectorSet(&Source->Velocity, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
aluVectorSet(&Source->Direction, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
Source->Orientation[0][0] = 0.0f;
|
||||
Source->Orientation[0][1] = 0.0f;
|
||||
Source->Orientation[0][2] = -1.0f;
|
||||
|
Loading…
Reference in New Issue
Block a user