Насколько быстро glUseProgram()? Есть ли что-нибудь лучше (быстрее) ?:Поведение униформ после glUseProgram() и скорости
Вот мои мысли:
- Используйте 1 универсальная программа шейдер, но с большим количеством настроек входных и атрибутов (параметров для каждого графического класса)
- использовать более 1 шейдер для каждого графического класса
Какое состояние в форме после изменения программы шейдеров? Сохранят ли они значения (например, значения матриц)?
Вот что я считаю преимущества # 1 будет:
- Не используйте glUseProgram()
И преимущества # 2:
- Нет (например, если класс
Menu
и классScene3D
имеют разные матрицы проецирования)
«Какие из двух вариантов лучше во многом зависят от того, что делают эти шейдеры» - задача проста - рендеринг с текстурированием без каких-либо эффектов (только некоторые из них должны иметь эффекты шейдера). –
Если некоторые из них очень просты и некоторые из них имеют эффект, тогда у меня будет простой шейдер с просто текстурированием (при условии, что openg gl 2.x или выше) и по одному на класс эффектов. Но на самом деле трудно судить, не зная большего. Вероятно, это не будет иметь большого значения в общей картине. Если у вас нет проблем с производительностью и знаете, что это из-за изменений состояния, просто делайте то, что более удобно. – haffax
Униформы могут совместно использоваться программами, использующими Uniform Buffer Object (см., Например, [Shared Uniforms] (http://arcsynthesis.org/gltut/Positioning/Tut07%20Shared%20Uniforms.html)) – stativ