aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2011-05-06 00:20:40 -0700
committerChris Robinson <[email protected]>2011-05-06 00:20:40 -0700
commit2972de1047b36d3f31c2e85f6e29b7b52682878f (patch)
tree94615b1c5920bf21df69e556b8556c2d97af8605 /OpenAL32
parent38db4115fcaa0b36f70b4a4a50b7acd951f28ba4 (diff)
Use function pointers to call the source mixer
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/Include/alSource.h12
-rw-r--r--OpenAL32/Include/alu.h2
-rw-r--r--OpenAL32/alSource.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h
index ee342f92..1b9d92ad 100644
--- a/OpenAL32/Include/alSource.h
+++ b/OpenAL32/Include/alSource.h
@@ -112,11 +112,21 @@ typedef struct ALsource
} Params;
ALvoid (*Update)(struct ALsource *self, const ALCcontext *context);
+ ALvoid (*DoMix)(struct ALsource *self, ALCdevice *Device,
+ const ALvoid *RESTRICT data,
+ ALuint *DataPosInt, ALuint *DataPosFrac,
+ ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize);
+ ALvoid (*DoHrtfMix)(struct ALsource *self, ALCdevice *Device,
+ const ALvoid *RESTRICT data,
+ ALuint *DataPosInt, ALuint *DataPosFrac,
+ ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize);
// Index to itself
ALuint source;
} ALsource;
-#define ALsource_Update(s,a) ((s)->Update(s,a))
+#define ALsource_Update(s,a) ((s)->Update(s,a))
+#define ALsource_DoMix(s,a,b,c,d,e,f,g) ((s)->DoMix(s,a,b,c,d,e,f,g))
+#define ALsource_DoHrtfMix(s,a,b,c,d,e,f,g) ((s)->DoHrtfMix(s,a,b,c,d,e,f,g))
ALvoid ReleaseALSources(ALCcontext *Context);
diff --git a/OpenAL32/Include/alu.h b/OpenAL32/Include/alu.h
index cc47cc1b..41ad5f6b 100644
--- a/OpenAL32/Include/alu.h
+++ b/OpenAL32/Include/alu.h
@@ -111,6 +111,7 @@ static __inline ALdouble cubic(ALdouble val0, ALdouble val1, ALdouble val2, ALdo
}
struct ALsource;
+struct ALbuffer;
ALvoid aluInitPanning(ALCdevice *Device);
ALint aluCart2LUTpos(ALfloat re, ALfloat im);
@@ -118,6 +119,7 @@ ALint aluCart2LUTpos(ALfloat re, ALfloat im);
ALvoid CalcSourceParams(struct ALsource *ALSource, const ALCcontext *ALContext);
ALvoid CalcNonAttnSourceParams(struct ALsource *ALSource, const ALCcontext *ALContext);
+ALvoid SelectMixer(struct ALsource *Source, struct ALbuffer *Buffer);
ALvoid MixSource(struct ALsource *Source, ALCdevice *Device, ALuint SamplesToDo);
ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size);
diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c
index d6e9b18a..fd77527f 100644
--- a/OpenAL32/alSource.c
+++ b/OpenAL32/alSource.c
@@ -570,6 +570,7 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
Source->Update = CalcSourceParams;
else
Source->Update = CalcNonAttnSourceParams;
+ SelectMixer(Source, buffer);
// Increment reference counter for buffer
buffer->refcount++;
@@ -1614,6 +1615,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
Source->Update = CalcSourceParams;
else
Source->Update = CalcNonAttnSourceParams;
+ SelectMixer(Source, buffer);
Source->NeedsUpdate = AL_TRUE;
}