Моя проблема, по сути, в том, что я не знаю, как OpenGL ES 2.0 ожидает от меня написания и использования нескольких шейдеров; или если это даже желательно / ожидается, что человек это сделает.
Фундаментальный вопрос здесь: если у меня есть яблоко, светящийся камень и нечеткая сетка, все в одном и том же трехмерном мире, все лучше всего нарисовано с помощью разных шейдерных программ, но с использованием одной и той же mvpMatrix, тогда как я могу использовать все из них в одном рендере OpenGL, так что все они используют свои наиболее подходящие шейдеры, которые я написал?
Итак, я написал базовую программу OpenGL ES 2.0 для моей игры для Android, которая отлично работает в этой он может рисовать контуры объектов на экране. Но больше ничего не делает; в значительной степени потому, что шейдеры выглядят так:
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
void main() {
gl_Position = uMVPMatrix * aPosition;
}
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Теперь они довольно простые. Причина, по которой я не пошел дальше, заключается в том, что я не могу понять, должен ли я писать один шейдер для применения ко всем моим различным объектам, или я должен использовать несколько шейдеров. И если я должен использовать несколько шейдеров для рисования нескольких разных объектов, то как мне сделать это эффективным образом?
У меня такое чувство, что это должно быть базовыми знаниями для всех, кто работает с OpenGL ES 2.0 день за днем, поэтому я надеюсь, что кто-нибудь сможет ответить на мой вопрос или указать мне правильное направление.
У меня есть:
Итак, я надеюсь, что я близок к пониманию рабочего процесса OpenGL, но, похоже, я еще не добрался до него.
Правка: Впоследствии я нашел это хорошо:
Если ваше приложение написано для OpenGL ES 2.0, не создавайте ни одного шейдера с множеством переключателей и условий, который выполняет все задачи, необходимые вашему приложению для рендеринга сцены. Вместо этого скомпилируйте несколько программ шейдеров, каждая из которых выполняет конкретную конкретную задачу.
Это из рекомендаций iOS OpenGL ES 2.0.