Ich beginne, indem ich an meinem Programm beide Shader anschließe und dann glGetUniformBlockIndex
anrufe, um die einheitlichen Puffer zu binden. Ich würde erwarten, dass eine glBindShader
Funktion mich angeben lässt, welchen Shader ich analysieren möchte, um die Uniform zu finden, aber es gibt keine solche Sache. Wie kann ich OpenGL sagen, in welchen Shader es schauen soll?Wie weiß glGetUriformBlockIndex, ob im Vertex-Shader oder im Fragment-Shader gesucht werden soll?
Antwort
Vorausgesetzt, das Programm wurde vollständig verknüpft, spielt es keine Rolle. Hier sind die Möglichkeiten für glGetUniformBlockIndex
und ihre Folgen:
- Der einheitliche Block Name ist nicht in einem der Shader. Dann kommst du zurück
GL_INVALID_INDEX
. - Der angegebene einheitliche Blockname wird in einem der Shader verwendet. Dann bekommst du den Blockindex dafür zurück, der mit
glUniformBlockBinding
verwendet werden soll. - Der angegebene einheitliche Blockname wird in mehreren Shadern verwendet. Dann erhalten Sie den Blockindex, der bedeutet, alle, mit
glUniformBlockBinding
verwendet werden.
Der letzte Teil ist der Schlüssel. Wenn Sie einen einheitlichen Block in zwei Shadern mit demselben Namen angeben, erfordert GLSL, dass die Definitionen dieser einheitlichen Blöcke identisch sind. Wenn nicht, erhalten Sie einen Fehler in glLinkProgram
. Da sie gleich sind (sonst wären Sie nicht hierher gekommen), betrachtet GLSL sie als gleichen einheitlichen Block.
Auch wenn sie in zwei Shaderstufen sind, sind sie immer noch der gleiche einheitliche Block. Sie können also gleichmäßige Blöcke zwischen den Stufen teilen, alle mit einer Blockbindung. Solange es wirklich der gleiche einheitliche Block ist.
- 1. Sollte sich eine Objektsuchmethode im übergeordneten Objekt befinden oder dieselbe wie im Objekt gesucht werden?
- 2. Manuell eingeben, wonach gesucht werden soll
- 3. Shiny: Wählen Sie aus, ob die App im Fenster, im Viewer-Bereich oder extern ausgeführt werden soll.
- 4. Wie kann festgestellt werden, ob ein Dateideskriptor gesucht werden kann?
- 5. iOS: Erlaubt dem Benutzer zu wählen, ob Audio im Hintergrund abgespielt werden soll oder nicht
- 6. Auf welchen Websites soll nach Open Source-Projekten gesucht werden?
- 7. Wie weiß die JVM, wann eine NullPointerException ausgelöst werden soll
- 8. Woher weiß ich, wann ein zustandsbasiertes Testen im Vergleich zu einem Scheintest verwendet werden soll?
- 9. Woher weiß ich, ob es sich im unbeaufsichtigten Modus befindet?
- 10. Wie AccountManager weiß, welches Google-Konto verwendet werden soll?
- 11. glsl fragmentshader render objectID
- 12. Wie wird im iPhone SDK nach einem Namen gesucht?
- 13. Woher weiß man, ob ein Telefon angerufen wird oder nicht?
- 14. Werden Java-Threads im Benutzerbereich oder im Kernelbereich erstellt?
- 15. Flash-Bildschirm weiß im Moment der Kameraaufnahme?
- 16. Soll nur ein bestimmtes Fragment im Ambient-Modus verwendet werden?
- 17. Wie erkennt man, ob rspec-Tests im lokalen oder im Continuous Integration Server ausgeführt wurden?
- 18. Wie können andere Apps wissen, nach welchen Inhalten CONTENT_URI gesucht werden soll?
- 19. Wie überprüfe ich, ob Benutzereingaben im Array gefunden werden?
- 20. Wie kann ich angeben, ob JSON oder XML in der ASP.NET-Web-API verwendet werden soll?
- 21. Wie überprüft man, ob der Ton geduckt werden soll?
- 22. sqlite3-Datenbank nicht gefunden, wenn im Datei-Explorer gesucht wurde
- 23. Woher weiß ich, ob die beiden Zellen zusammengeführt werden?
- 24. Woher weiß CMake, welche Version von Qt verwendet werden soll?
- 25. Woher weiß Angular 2, woher es importiert werden soll?
- 26. Woher weiß Swift zur Laufzeit, welche Implementierung verwendet werden soll?
- 27. Welches CMS oder Plugin soll verwendet werden?
- 28. Autotools: Soll config.guess, depcomp oder ltmain.sh im SVN Repo gespeichert werden?
- 29. Wie überprüft man, ob sich eine geöffnete Datei im Lesemodus oder im Schreibmodus befindet?
- 30. Wie erkennt man, ob die Host-App im iPhone 6 Plus im Zoom- oder Normalmodus ist?
"Ich fange an, indem ich meinem Programm beide Shader anschließe und dann glGetUniformBlockIndex aufruft, um die einheitlichen Puffer zu binden" Sie müssen einen erfolgreichen Aufruf von ['glLinkProgram'] haben (http://www.opengl.org/wiki/GLAPI/glLinkProgram) zwischen diesen Schritten. –
Ich habe gerade bestätigt, dass das 'glLinkProgram' zwischen der Kompilation der Shader und dem Aufrufen von' glGetUniformBlockIndex' ausgeführt wird. Und es gelingt. – qdii