Выполнение избыточных вызовов OpenGL
Мне было интересно, если это рекомендуется, чтобы устранить все избыточные вызовы OpenGL.
Например, я должен делать что-то вроде (обернутый в функцию):
if(foobuffer != boundbuffer) {
glBindBuffer(GL_BAR_BUFFER, foobuffer);
boundbuffer = foobuffer;
}
Или драйвер автоматически делает такие вещи, а на самом деле это избыточная избыточная проверка?
2 ответа
Вам, вероятно, следует избегать этого. Здесь (в частности, 22.040, вам придется прокручивать страницу вниз, так как для нее нет привязки), отмечается, что избыточные вызовы, как правило, являются плохой практикой, даже если некоторые реализации пытаются минимизировать влияние.
Такие инструменты, как gDEBugger, могут быть использованы для отслеживания того, где вы могли бы делать избыточные вызовы, если вы находитесь в положении, когда вы не уверены, сколько вы можете заработать в своей кодовой базе.
Я только что удалил много таких вызовов из приложения Android, так что я могу из первых рук сказать вам, что это имеет значение для этой платформы (для этой конкретной версии ОС и аппаратного обеспечения). Это увеличило частоту кадров на несколько кадров в секунду, я бы сказал, около 5-10% прибыли.