OpenAL 源可以为 0 吗?

Can an OpenAL source ever be 0?

alGenSources() 生成的 OpenAL 源可以是 0 吗?

因为我想在源停止播放时将 NULL 存储为源。

它存储为 ALuint

我在程序员指南中找不到它。

不幸的是,您不能指望 0 被保留为无效,因为规范允许 id(由实施决定)。

根据OpenAL 1.1 specs

2.12. Requesting Object Names

OpenAL provides calls to obtain object names. The application requests a number of objects of a given category using alGen{Object}s. The actual values of the names returned are implementation dependent. No guarantees on range or value are made.
...
void alGenBuffers (ALsizei n, ALuint *bufferNames);
void alGenSources (ALsizei n, ALuint *sourceNames);

从另一方面来说,如果您不关心其他 OpenAL 实现,OpenAL soft(对于 1.17)内部 returns 值从 1 开始,尽管这应该是被视为实施细节:

AL_API ALvoid AL_APIENTRY alGenSources(ALsizei n, ALuint *sources)
{
        ...
        err = NewThunkEntry(&source->id);
        ...
        sources[cur] = source->id;
}

ALenum NewThunkEntry(ALuint *index)
{
    ...
    *index = i+1;
    return AL_NO_ERROR;
}