OpenAL 源可以为 0 吗?
Can an OpenAL source ever be 0?
alGenSources()
生成的 OpenAL 源可以是 0
吗?
因为我想在源停止播放时将 NULL
存储为源。
它存储为 ALuint
。
我在程序员指南中找不到它。
不幸的是,您不能指望 0
被保留为无效,因为规范允许 id(由实施决定)。
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;
}
alGenSources()
生成的 OpenAL 源可以是 0
吗?
因为我想在源停止播放时将 NULL
存储为源。
它存储为 ALuint
。
我在程序员指南中找不到它。
不幸的是,您不能指望 0
被保留为无效,因为规范允许 id(由实施决定)。
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;
}