Die Grenze ist pro Zeichenaufruf. Wenn Sie einen Zeichenaufruf ausführen und ein bestimmtes Shader-Programm aufrufen, sind Sie durch das Limit eingeschränkt, aber Ihr nächster Zeichenaufruf kann völlig unterschiedliche Texturen in demselben Animationsrahmen verwenden.
Auch ist 8 nur die Mindestgarantie. Systeme müssen mindestens acht unterstützen, um als WebGL-konform zu gelten. Aber nettere Grafikkarten unterstützen mehr als acht. Sie können die maximale Anzahl von Bildtexturen für die Plattform abfragen du so bist auf:
var maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
Sie auch für Vertex Texturen aussehen:
gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)
oder eine Kombination der beiden:
gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)
Sie können auch eine Seite wie WebGL Report (Disclaimer, ich bin ein Mitwirkender) verwenden, um diese Statistik für die Plattform zu suchen, auf der Sie sich befinden (unter Fragment Shader -> Max Texture Units).
Sie können auch überprüfen, WebGL Stats Graphen der Unterstützung für maximale Bildtexturen zu sehen. Die Grafik MAX_TEXTURE_IMAGE_UNITS
zeigt, dass die Unterstützung von bis zu 16 Bildtexturen ziemlich verbreitet ist, da sie in modernen Browsern eine Support-Rate von etwa 95% bietet.
Bedeutet das, ich muss Texturen zwischen jedem Zeichenaufruf wechseln, anstatt Texturen voraus zu laden. Was bringt eine andere Frage, muss ich Uniformen für jeden Ziehanruf hochladen (etwas anderes als Texturen)? Bleiben die in das Programm hochgeladenen Uniformen bestehen? –
Wenn ein Zeichenaufruf andere Texturen als der vorherige Zeichenaufruf verwendet, dann müssen Sie die Texturen zwischen Zeichenaufrufen erneut binden. Die Frage nach Nicht-Textur-Uniformen klingt wie eine separate Frage, vielleicht posten sie eine neue Frage. – emackey