OpenGL - glBindTexture - преждевременная оптимизация? - PullRequest
4 голосов
/ 25 ноября 2010

Я видел пример кода (особенно в проектах iOS GL), где кешируется текущее имя текстуры GL, и сравнение выполняется до вызова glBindTexture.Цель состоит в том, чтобы избежать ненужных вызовов glBindTexture.

например,

if (textureName != cachedTextureName) {
    glBindTexture(GL_TEXTURE_2D, textureName);
    cachedTextureName = textureName;
}

Этот подход требует, чтобы ВСЕ вызовы glBindTexture обрабатывались аналогично, предпочтительно через оболочку.Но включение стороннего кода делает эту проблему проблематичной, а также еще одной вещью, которую нужно запомнить .

Q. Является ли это полезной оптимизацией?Или реализация OpenGL достаточно умна, чтобы игнорировать вызовы glBlindTexture, где имя текстуры не изменилось?

Спасибо.

1 Ответ

3 голосов
/ 25 ноября 2010

Это не вызвано в спецификации, насколько я видел.На практике многие реализации фактически выполняют некоторую обработку, если вы перепривязываете ту же текстуру, что и относительное снижение производительности, если вы не тестируете текущую текстуру.Я бы порекомендовал использовать тест, если это возможно, просто чтобы убедиться, что детали реализации не окажут негативного влияния на вашу программу.

Вообще говоря, весьма полезно абстрагироваться от конечного автомата OpenGL с помощью собственной обработки состоянийтак что вы можете запрашивать состояние, такое как связанная текстура или активные матрицы, без вызова glGet, что почти всегда будет медленнее, чем ваша пользовательская обработка.Это также позволяет вам запретить некорректное поведение и, как правило, упрощает анализ вашей программы.

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