AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots) { ALCcontext *Context; ALeffectslot *EffectSlot; ALboolean SlotsValid = AL_FALSE; ALsizei i; Context = GetContextSuspended(); if(!Context) return; if(n < 0) alSetError(Context, AL_INVALID_VALUE); else { SlotsValid = AL_TRUE; // Check that all effectslots are valid for(i = 0;i < n;i++) { if((EffectSlot=LookupEffectSlot(Context->EffectSlotMap, effectslots[i])) == NULL) { alSetError(Context, AL_INVALID_NAME); SlotsValid = AL_FALSE; break; } else if(EffectSlot->refcount > 0) { alSetError(Context, AL_INVALID_NAME); SlotsValid = AL_FALSE; break; } } } if(SlotsValid) { // All effectslots are valid for(i = 0;i < n;i++) { // Recheck that the effectslot is valid, because there could be duplicated names if((EffectSlot=LookupEffectSlot(Context->EffectSlotMap, effectslots[i])) == NULL) continue; ALEffect_Destroy(EffectSlot->EffectState); RemoveUIntMapKey(&Context->EffectSlotMap, EffectSlot->effectslot); ALTHUNK_REMOVEENTRY(EffectSlot->effectslot); memset(EffectSlot, 0, sizeof(ALeffectslot)); free(EffectSlot); } } ProcessContext(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue) { ALCcontext *Context; ALeffectslot *EffectSlot; Context = GetContextRef(); if(!Context) return; if((EffectSlot=LookupEffectSlot(Context, effectslot)) != NULL) { switch(param) { case AL_EFFECTSLOT_GAIN: *pflValue = EffectSlot->Gain; break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues) { ALCcontext *Context; switch(param) { case AL_EFFECTSLOT_EFFECT: case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: alGetAuxiliaryEffectSloti(effectslot, param, piValues); return; } Context = GetContextRef(); if(!Context) return; if(LookupEffectSlot(Context, effectslot) != NULL) { switch(param) { default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues) { ALCcontext *Context; switch(param) { case AL_EFFECTSLOT_GAIN: alAuxiliaryEffectSlotf(effectslot, param, pflValues[0]); return; } Context = GetContextRef(); if(!Context) return; if(LookupEffectSlot(Context, effectslot) != NULL) { switch(param) { default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *values) { ALCcontext *Context; switch(param) { case AL_EFFECTSLOT_GAIN: alGetAuxiliaryEffectSlotf(effectslot, param, values); return; } Context = GetContextRef(); if(!Context) return; al_try { if(LookupEffectSlot(Context, effectslot) == NULL) al_throwerr(Context, AL_INVALID_NAME); switch(param) { default: al_throwerr(Context, AL_INVALID_ENUM); } } al_endtry; ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *values) { ALCcontext *context; switch(param) { case AL_EFFECTSLOT_GAIN: alGetAuxiliaryEffectSlotf(effectslot, param, values); return; } context = GetContextRef(); if(!context) return; if(LookupEffectSlot(context, effectslot) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } done: ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue) { ALCcontext *Context; ALeffectslot *EffectSlot; Context = GetContextRef(); if(!Context) return; if((EffectSlot=LookupEffectSlot(Context, effectslot)) != NULL) { switch(param) { case AL_EFFECTSLOT_GAIN: if(flValue >= 0.0f && flValue <= 1.0f) { EffectSlot->Gain = flValue; EffectSlot->NeedsUpdate = AL_TRUE; } else alSetError(Context, AL_INVALID_VALUE); break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *value) { ALCcontext *Context; ALeffectslot *Slot; Context = GetContextRef(); if(!Context) return; al_try { if((Slot=LookupEffectSlot(Context, effectslot)) == NULL) al_throwerr(Context, AL_INVALID_NAME); switch(param) { case AL_EFFECTSLOT_EFFECT: *value = Slot->effect.id; break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: *value = Slot->AuxSendAuto; break; default: al_throwerr(Context, AL_INVALID_ENUM); } } al_endtry; ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *value) { ALCcontext *Context; ALeffectslot *Slot; Context = GetContextRef(); if(!Context) return; al_try { if((Slot=LookupEffectSlot(Context, effectslot)) == NULL) al_throwerr(Context, AL_INVALID_NAME); switch(param) { case AL_EFFECTSLOT_GAIN: *value = Slot->Gain; break; default: al_throwerr(Context, AL_INVALID_ENUM); } } al_endtry; ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *values) { ALCcontext *Context; switch(param) { case AL_EFFECTSLOT_EFFECT: case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: alAuxiliaryEffectSloti(effectslot, param, values[0]); return; } Context = GetContextRef(); if(!Context) return; al_try { if(LookupEffectSlot(Context, effectslot) == NULL) al_throwerr(Context, AL_INVALID_NAME); switch(param) { default: al_throwerr(Context, AL_INVALID_ENUM); } } al_endtry; ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat value) { ALCcontext *Context; ALeffectslot *Slot; Context = GetContextRef(); if(!Context) return; al_try { if((Slot=LookupEffectSlot(Context, effectslot)) == NULL) al_throwerr(Context, AL_INVALID_NAME); switch(param) { case AL_EFFECTSLOT_GAIN: CHECK_VALUE(Context, value >= 0.0f && value <= 1.0f); Slot->Gain = value; Slot->NeedsUpdate = AL_TRUE; break; default: al_throwerr(Context, AL_INVALID_ENUM); } } al_endtry; ALCcontext_DecRef(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues) { ALCcontext *Context; Context = GetContextSuspended(); if(!Context) return; if(LookupEffectSlot(Context->EffectSlotMap, effectslot) != NULL) { switch(param) { case AL_EFFECTSLOT_GAIN: alGetAuxiliaryEffectSlotf(effectslot, param, pflValues); break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ProcessContext(Context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue) { ALCcontext *Context; ALeffectslot *EffectSlot; Context = GetContextSuspended(); if(!Context) return; if((EffectSlot=LookupEffectSlot(Context->EffectSlotMap, effectslot)) != NULL) { switch(param) { case AL_EFFECTSLOT_EFFECT: *piValue = EffectSlot->effect.effect; break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: *piValue = EffectSlot->AuxSendAuto; break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ProcessContext(Context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flArg) { ALCcontext *Context; ALeffectslot *EffectSlot; ALfp flValue = float2ALfp(flArg); Context = GetContextSuspended(); if(!Context) return; if((EffectSlot=LookupEffectSlot(Context->EffectSlotMap, effectslot)) != NULL) { switch(param) { case AL_EFFECTSLOT_GAIN: if(flValue >= int2ALfp(0) && flValue <= int2ALfp(1)) EffectSlot->Gain = flValue; else alSetError(Context, AL_INVALID_VALUE); break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ProcessContext(Context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *values) { ALCcontext *context; switch(param) { case AL_EFFECTSLOT_EFFECT: case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: alAuxiliaryEffectSloti(effectslot, param, values[0]); return; } context = GetContextRef(); if(!context) return; if(LookupEffectSlot(context, effectslot) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } done: ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat value) { ALCcontext *context; ALeffectslot *slot; context = GetContextRef(); if(!context) return; if((slot=LookupEffectSlot(context, effectslot)) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { case AL_EFFECTSLOT_GAIN: if(!(value >= 0.0f && value <= 1.0f)) SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done); slot->Gain = value; ATOMIC_STORE(&slot->NeedsUpdate, AL_TRUE); break; default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } done: ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *values) { ALCcontext *context; switch(param) { case AL_EFFECTSLOT_EFFECT: case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: alAuxiliaryEffectSloti(effectslot, param, values[0]); return; } context = GetContextRef(); if(!context) return; LockEffectSlotList(context); if(LookupEffectSlot(context, effectslot) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslot); switch(param) { default: alSetError(context, AL_INVALID_ENUM, "Invalid effect slot integer-vector property 0x%04x", param); } done: UnlockEffectSlotList(context); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat value) { ALCcontext *context; ALeffectslot *slot; context = GetContextRef(); if(!context) return; WriteLock(&context->PropLock); LockEffectSlotsRead(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { case AL_EFFECTSLOT_GAIN: if(!(value >= 0.0f && value <= 1.0f)) SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done); slot->Gain = value; break; default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } UpdateEffectSlotProps(slot); done: UnlockEffectSlotsRead(context); WriteUnlock(&context->PropLock); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *value) { ALCcontext *context; ALeffectslot *slot; context = GetContextRef(); if(!context) return; LockEffectSlotsRead(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { case AL_EFFECTSLOT_GAIN: *value = slot->Gain; break; default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } done: UnlockEffectSlotsRead(context); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *values) { ALCcontext *context; switch(param) { case AL_EFFECTSLOT_GAIN: alGetAuxiliaryEffectSlotf(effectslot, param, values); return; } context = GetContextRef(); if(!context) return; LockEffectSlotList(context); if(LookupEffectSlot(context, effectslot) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslot); switch(param) { default: alSetError(context, AL_INVALID_ENUM, "Invalid effect slot float-vector property 0x%04x", param); } done: UnlockEffectSlotList(context); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *value) { ALCcontext *context; ALeffectslot *slot; context = GetContextRef(); if(!context) return; LockEffectSlotList(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslot); switch(param) { case AL_EFFECTSLOT_GAIN: *value = slot->Gain; break; default: alSetError(context, AL_INVALID_ENUM, "Invalid effect slot float property 0x%04x", param); } done: UnlockEffectSlotList(context); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat value) { ALCcontext *context; ALeffectslot *slot; context = GetContextRef(); if(!context) return; almtx_lock(&context->PropLock); LockEffectSlotList(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslot); switch(param) { case AL_EFFECTSLOT_GAIN: if(!(value >= 0.0f && value <= 1.0f)) SETERR_GOTO(context, AL_INVALID_VALUE, done, "Effect slot gain out of range"); slot->Gain = value; break; default: SETERR_GOTO(context, AL_INVALID_ENUM, done, "Invalid effect slot float property 0x%04x", param); } DO_UPDATEPROPS(); done: UnlockEffectSlotList(context); almtx_unlock(&context->PropLock); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues) { ALCcontext *Context; Context = GetContextSuspended(); if(!Context) return; if(LookupEffectSlot(Context->EffectSlotMap, effectslot) != NULL) { switch(param) { case AL_EFFECTSLOT_EFFECT: case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: alAuxiliaryEffectSloti(effectslot, param, piValues[0]); break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ProcessContext(Context); }
AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots) { ALCcontext *context; ALeffectslot *slot; ALsizei i; context = GetContextRef(); if(!context) return; LockEffectSlotList(context); if(n < 0) SETERR_GOTO(context, AL_INVALID_VALUE, done, "Deleting %d effect slots", n); if(n == 0) goto done; for(i = 0;i < n;i++) { if((slot=LookupEffectSlot(context, effectslots[i])) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslots[i]); if(ReadRef(&slot->ref) != 0) SETERR_GOTO(context, AL_INVALID_NAME, done, "Deleting in-use effect slot %u", effectslots[i]); } // All effectslots are valid RemoveActiveEffectSlots(effectslots, n, context); for(i = 0;i < n;i++) { if((slot=LookupEffectSlot(context, effectslots[i])) == NULL) continue; VECTOR_ELEM(context->EffectSlotList, effectslots[i]-1) = NULL; DeinitEffectSlot(slot); memset(slot, 0, sizeof(*slot)); al_free(slot); } done: UnlockEffectSlotList(context); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint value) { ALCdevice *device; ALCcontext *context; ALeffectslot *slot; ALeffect *effect = NULL; ALenum err; context = GetContextRef(); if(!context) return; WriteLock(&context->PropLock); LockEffectSlotsRead(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done); switch(param) { case AL_EFFECTSLOT_EFFECT: device = context->Device; LockEffectsRead(device); effect = (value ? LookupEffect(device, value) : NULL); if(!(value == 0 || effect != NULL)) { UnlockEffectsRead(device); SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done); } err = InitializeEffect(device, slot, effect); UnlockEffectsRead(device); if(err != AL_NO_ERROR) SET_ERROR_AND_GOTO(context, err, done); break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: if(!(value == AL_TRUE || value == AL_FALSE)) SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, done); slot->AuxSendAuto = value; UpdateEffectSlotProps(slot); if(!ATOMIC_LOAD(&context->DeferUpdates, almemory_order_acquire)) UpdateAllSourceProps(context); break; default: SET_ERROR_AND_GOTO(context, AL_INVALID_ENUM, done); } done: UnlockEffectSlotsRead(context); WriteUnlock(&context->PropLock); ALCcontext_DecRef(context); }
static void AddActiveEffectSlots(const ALuint *slotids, ALsizei count, ALCcontext *context) { struct ALeffectslotArray *curarray = ATOMIC_LOAD(&context->ActiveAuxSlots, almemory_order_acquire); struct ALeffectslotArray *newarray = NULL; ALsizei newcount = curarray->count + count; ALCdevice *device = context->Device; ALsizei i, j; /* Insert the new effect slots into the head of the array, followed by the * existing ones. */ newarray = al_calloc(DEF_ALIGN, FAM_SIZE(struct ALeffectslotArray, slot, newcount)); newarray->count = newcount; for(i = 0;i < count;i++) newarray->slot[i] = LookupEffectSlot(context, slotids[i]); for(j = 0;i < newcount;) newarray->slot[i++] = curarray->slot[j++]; /* Remove any duplicates (first instance of each will be kept). */ for(i = 1;i < newcount;i++) { for(j = i;j != 0;) { if(UNLIKELY(newarray->slot[i] == newarray->slot[--j])) { newcount--; for(j = i;j < newcount;j++) newarray->slot[j] = newarray->slot[j+1]; i--; break; } } } /* Reallocate newarray if the new size ended up smaller from duplicate * removal. */ if(UNLIKELY(newcount < newarray->count)) { struct ALeffectslotArray *tmpnewarray = al_calloc(DEF_ALIGN, FAM_SIZE(struct ALeffectslotArray, slot, newcount)); memcpy(tmpnewarray, newarray, FAM_SIZE(struct ALeffectslotArray, slot, newcount)); al_free(newarray); newarray = tmpnewarray; newarray->count = newcount; } curarray = ATOMIC_EXCHANGE_PTR(&context->ActiveAuxSlots, newarray, almemory_order_acq_rel); while((ATOMIC_LOAD(&device->MixCount, almemory_order_acquire)&1)) althrd_yield(); al_free(curarray); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint value) { ALCdevice *device; ALCcontext *context; ALeffectslot *slot; ALeffect *effect = NULL; ALenum err; context = GetContextRef(); if(!context) return; almtx_lock(&context->PropLock); LockEffectSlotList(context); if((slot=LookupEffectSlot(context, effectslot)) == NULL) SETERR_GOTO(context, AL_INVALID_NAME, done, "Invalid effect slot ID %u", effectslot); switch(param) { case AL_EFFECTSLOT_EFFECT: device = context->Device; LockEffectList(device); effect = (value ? LookupEffect(device, value) : NULL); if(!(value == 0 || effect != NULL)) { UnlockEffectList(device); SETERR_GOTO(context, AL_INVALID_VALUE, done, "Invalid effect ID %u", value); } err = InitializeEffect(context, slot, effect); UnlockEffectList(device); if(err != AL_NO_ERROR) SETERR_GOTO(context, err, done, "Effect initialization failed"); break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: if(!(value == AL_TRUE || value == AL_FALSE)) SETERR_GOTO(context, AL_INVALID_VALUE, done, "Effect slot auxiliary send auto out of range"); slot->AuxSendAuto = value; break; default: SETERR_GOTO(context, AL_INVALID_ENUM, done, "Invalid effect slot integer property 0x%04x", param); } DO_UPDATEPROPS(); done: UnlockEffectSlotList(context); almtx_unlock(&context->PropLock); ALCcontext_DecRef(context); }
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue) { ALCdevice *Device; ALCcontext *Context; ALeffectslot *EffectSlot; Context = GetContextRef(); if(!Context) return; Device = Context->Device; if((EffectSlot=LookupEffectSlot(Context, effectslot)) != NULL) { switch(param) { case AL_EFFECTSLOT_EFFECT: { ALeffect *effect = NULL; if(iValue == 0 || (effect=LookupEffect(Device, iValue)) != NULL) { ALenum err; err = InitializeEffect(Device, EffectSlot, effect); if(err != AL_NO_ERROR) alSetError(Context, err); else Context->UpdateSources = AL_TRUE; } else alSetError(Context, AL_INVALID_VALUE); } break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: if(iValue == AL_TRUE || iValue == AL_FALSE) { EffectSlot->AuxSendAuto = iValue; Context->UpdateSources = AL_TRUE; } else alSetError(Context, AL_INVALID_VALUE); break; default: alSetError(Context, AL_INVALID_ENUM); break; } } else alSetError(Context, AL_INVALID_NAME); ALCcontext_DecRef(Context); }
AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot) { ALCcontext *context; ALboolean ret; context = GetContextRef(); if(!context) return AL_FALSE; ret = (LookupEffectSlot(context, effectslot) ? AL_TRUE : AL_FALSE); ALCcontext_DecRef(context); return ret; }
AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot) { ALCcontext *Context; ALboolean result; Context = GetContextSuspended(); if(!Context) return AL_FALSE; result = (LookupEffectSlot(Context->EffectSlotMap, effectslot) ? AL_TRUE : AL_FALSE); ProcessContext(Context); return result; }