Mon problème, fondamentalement, est que je ne sais pas comment OpenGL ES 2.0 s'attend à ce que j'écrive et utilise plusieurs shaders; ou s'il est même conseillé/attendu qu'une personne le fasse.
La question fondamentale ici est: si j'ai une pomme, une roche brillante et un maillage flou, tous dans le même monde 3D, tous mieux dessinés avec différents programmes de shader mais en utilisant le même mvpMatrix, alors comment pourrais-je les utiliser tous dans le même rendu OpenGL de sorte qu'ils utilisent tous les shaders les plus appropriés que j'ai écrits?
J'ai donc écrit un programme de base OpenGL ES 2.0 pour mon Android jeu qui fonctionne parfaitement car il peut dessiner le contour des objets à l'écran. Mais il ne fait rien d'autre; à peu près parce que le les shaders ressemblent à ceci:
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);
}
Maintenant, ils sont assez basiques. La raison pour laquelle je ne suis pas allé plus loin est parce que je ne peux pas savoir si je suis censé écrire un shader à appliquer à tous mes différents objets ou si je suis censé utiliser plusieurs shaders. Et si je suis censé utiliser plusieurs shaders pour dessiner plusieurs objets différents, comment dois-je procéder de manière efficace?
J'ai l'impression que cela doit être une connaissance de base pour quiconque fait OpenGL ES 2.0 jour après jour, donc j'espère que quelqu'un pourra répondre à ma question ou me diriger dans la bonne direction.
J'ai:
J'espère donc que je suis près de comprendre le flux de travail OpenGL mais je ne semble pas être encore là.
Edit: j'ai trouvé ça bien après:
Si votre application est écrite pour OpenGL ES 2.0, ne créez pas un shader unique avec de nombreux commutateurs et conditions qui exécute toutes les tâches dont votre application a besoin pour rendre la scène. Au lieu de cela, compilez plusieurs programmes de shaders qui effectuent chacun une tâche spécifique et ciblée.
Cela vient des iOS OpenGL ES 2.0 guidelines.
Vous pouvez utiliser plusieurs shaders, mais pour basculer entre eux, cela peut être assez coûteux, donc la pratique recommandée est de dessiner tous les objets d'un shader, puis de passer au shader suivant et de dessiner tous les objets en utilisant celui-ci et ainsi de suite.
Pour basculer entre les shaders, vous appelez glUseProgram()
.