コード例 #1
0
ファイル: alBuffer.c プロジェクト: 100GPing100/Loveprint
ALbuffer *NewBuffer(ALCcontext *context)
{
    ALCdevice *device = context->Device;
    ALbuffer *buffer;
    ALenum err;

    buffer = calloc(1, sizeof(ALbuffer));
    if(!buffer)
        SET_ERROR_AND_RETURN_VALUE(context, AL_OUT_OF_MEMORY, NULL);
    RWLockInit(&buffer->lock);

    err = NewThunkEntry(&buffer->id);
    if(err == AL_NO_ERROR)
        err = InsertUIntMapEntry(&device->BufferMap, buffer->id, buffer);
    if(err != AL_NO_ERROR)
    {
        FreeThunkEntry(buffer->id);
        memset(buffer, 0, sizeof(ALbuffer));
        free(buffer);

        SET_ERROR_AND_RETURN_VALUE(context, err, NULL);
    }

    return buffer;
}
コード例 #2
0
ファイル: alPreset.c プロジェクト: Banderi/OpenTomb
ALsfpreset *NewPreset(ALCcontext *context)
{
    ALCdevice *device = context->Device;
    ALsfpreset *preset;
    ALenum err;

    preset = calloc(1, sizeof(*preset));
    if(!preset)
        SET_ERROR_AND_RETURN_VALUE(context, AL_OUT_OF_MEMORY, NULL);
    ALsfpreset_Construct(preset);

    err = NewThunkEntry(&preset->id);
    if(err == AL_NO_ERROR)
        err = InsertUIntMapEntry(&device->PresetMap, preset->id, preset);
    if(err != AL_NO_ERROR)
    {
        ALsfpreset_Destruct(preset);
        memset(preset, 0, sizeof(*preset));
        free(preset);

        SET_ERROR_AND_RETURN_VALUE(context, err, NULL);
    }

    return preset;
}