С OpenAL, дорогие настройки AL_PITCH и AL_GAIN? - PullRequest
5 голосов
/ 07 марта 2012

Каждый раз, когда я играю звуковой эффект, я использую:

alSourcei(sources[index], AL_BUFFER, 0);
alSourcei(sources[index], AL_BUFFER, bufferID);
alSourcef(sources[index], AL_PITCH, 1.0);
alSourcef(sources[index], AL_GAIN, 1.0);

Будет ли существенной оптимизацией удаление установки AL_PITCH и AL_GAIN при каждом воспроизведении звукового эффекта? Очевидно, так как они равны 1.0, я могу просто установить его один раз, когда инициализирую звук. Какие значения по умолчанию имеют AL_PITCH и AL_GAIN, если они не установлены?

1 Ответ

8 голосов
/ 07 марта 2012

В отношении бита оптимизации возможен только "общий" тип ответа, поскольку реализации не требуется для работы каким-либо конкретным образом, если он работает в условиях, установленныхспецификация OpenAL.Тем не менее, вполне вероятно, что все реализации более или менее работают одинаково.

В общем случае alSourcei / alSourcef включает, по крайней мере, вызов функции, такой как GetContextSuspended, что включает доступ к локальному хранилищу потока ивход / выход из критической секции, а также оператор switch (это также означает переход по указателю на функцию, эквивалентный, возможно, не кешированному адресу на странице, возможно, вне ядра, и, вероятно, тратит впустую одну запись в кэше TLB).

alSourcei далее необходимо выполнить потокобезопасное увеличение счетчика ссылок и выделить / добавить новый узел списка в список буферов источника, что означает что-то на порядок величины вызова malloc хотя бы один раз.

Установка AL_GAIN и AL_PITCH как таковая является практически бесплатной операцией.Он устанавливает значение и помечает источник как обновленный, поэтому поток микшера контекста знает, что что-то изменилось при смешивании следующего временного среза.В худшем случае, если параметры являются недопустимыми, alSourcef необходимо установить последний код ошибки.

Поскольку удаление вызовов на alSourcef, конечно, позволит избежать некоторых ненужных вызовов, и поскольку вы говорите, чтонет никаких шансов, что значения могут быть чем-то иным, кроме 1.0, на самом деле нет никаких оснований для когда-либо касаться их вообще, поскольку это значение по умолчанию согласно спецификации.
Но ... есливы ожидаете заметного ускорения от удаления этих вызовов, вы, вероятно, будете разочарованы (если их не будет несколько сотен тысяч в секунду).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...