zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
alcDedicated.c
Go to the documentation of this file.
1 
21 #include "config.h"
22 
23 #include <stdlib.h>
24 
25 #include "alMain.h"
26 #include "alFilter.h"
27 #include "alAuxEffectSlot.h"
28 #include "alError.h"
29 #include "alu.h"
30 
31 
32 typedef struct ALdedicatedState {
33  // Must be first in all effects!
34  ALeffectState state;
35 
36  ALfloat gains[MaxChannels];
38 
39 
41 {
42  ALdedicatedState *state = (ALdedicatedState*)effect;
43  free(state);
44 }
45 
47 {
48  (void)effect;
49  (void)Device;
50  return AL_TRUE;
51 }
52 
53 static ALvoid DedicatedUpdate(ALeffectState *effect, ALCdevice *device, const ALeffectslot *Slot)
54 {
55  ALdedicatedState *state = (ALdedicatedState*)effect;
56  ALfloat Gain;
57  ALsizei s;
58 
59  Gain = Slot->Gain * Slot->effect.Dedicated.Gain;
60  for(s = 0;s < MaxChannels;s++)
61  state->gains[s] = 0.0f;
62 
64  ComputeAngleGains(device, atan2f(0.0f, 1.0f), 0.0f, Gain, state->gains);
66  state->gains[LFE] = Gain;
67 }
68 
69 static ALvoid DedicatedProcess(ALeffectState *effect, ALuint SamplesToDo, const ALfloat *RESTRICT SamplesIn, ALfloat (*RESTRICT SamplesOut)[BUFFERSIZE])
70 {
71  ALdedicatedState *state = (ALdedicatedState*)effect;
72  const ALfloat *gains = state->gains;
73  ALuint i, c;
74 
75  for(c = 0;c < MaxChannels;c++)
76  {
77  for(i = 0;i < SamplesToDo;i++)
78  SamplesOut[c][i] = SamplesIn[i] * gains[c];
79  }
80 }
81 
83 {
84  ALdedicatedState *state;
85  ALsizei s;
86 
87  state = malloc(sizeof(*state));
88  if(!state)
89  return NULL;
90 
91  state->state.Destroy = DedicatedDestroy;
92  state->state.DeviceUpdate = DedicatedDeviceUpdate;
93  state->state.Update = DedicatedUpdate;
94  state->state.Process = DedicatedProcess;
95 
96  for(s = 0;s < MaxChannels;s++)
97  state->gains[s] = 0.0f;
98 
99  return &state->state;
100 }
static ALvoid DedicatedDestroy(ALeffectState *effect)
Definition: alcDedicated.c:40
void ALvoid
Definition: al.h:74
GLdouble s
Definition: glew.h:1376
GLvoid **typedef void(GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint
Definition: glew.h:1824
Definition: alMain.h:484
#define AL_TRUE
Definition: al.h:86
#define NULL
Definition: ftobjs.h:61
GLclampf f
Definition: glew.h:3390
int ALsizei
Definition: al.h:62
SDL_EventEntry * free
Definition: SDL_events.c:80
float ALfloat
Definition: al.h:68
struct ALdedicatedState ALdedicatedState
ALeffect effect
static ALboolean DedicatedDeviceUpdate(ALeffectState *effect, ALCdevice *Device)
Definition: alcDedicated.c:46
#define AL_EFFECT_DEDICATED_DIALOGUE
Definition: alext.h:202
const GLfloat * c
Definition: glew.h:14913
ALvoid ComputeAngleGains(const ALCdevice *device, ALfloat angle, ALfloat hwidth, ALfloat ingain, ALfloat *gains)
Definition: panning.c:149
static ALvoid DedicatedUpdate(ALeffectState *effect, ALCdevice *device, const ALeffectslot *Slot)
Definition: alcDedicated.c:53
volatile ALfloat Gain
unsigned int ALuint
Definition: al.h:59
static ALvoid DedicatedProcess(ALeffectState *effect, ALuint SamplesToDo, const ALfloat *RESTRICT SamplesIn, ALfloat(*RESTRICT SamplesOut)[BUFFERSIZE])
Definition: alcDedicated.c:69
#define malloc
Definition: SDL_malloc.c:635
ALeffectState * DedicatedCreate(void)
Definition: alcDedicated.c:82
struct ALeffect::@55 Dedicated
char ALboolean
Definition: al.h:38
ALfloat Gain
Definition: alEffect.h:33
#define AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT
Definition: alext.h:203
int i
Definition: pngrutil.c:1377
#define BUFFERSIZE
Definition: alMain.h:556
ALenum type
Definition: alEffect.h:27