Das Entwickeln eines 3D-Spiels mit WebAssembly mit WebGL ist möglich, wenn wir das C++-Array an die WebGL-API übergeben können, ohne das Array zu kopieren.
Wir müssen Array-Daten an WebGLRenderingContext.bufferData() übergeben, aber es akzeptiert nur JavaScript ArrayBuffer oder ArrayBufferView . Wenn es ein C++-Array akzeptiert oder wenn wir ArrayBufferView erstellen können, ohne Array-Daten zu kopieren, ist es gelöst.
Ich denke, die Host-Bindungen, Referenzen und/oder GC-Vorschläge ermöglichen es WebAssembly-Instanzen, ArrayBufferViews direkt zu erstellen (die dann an WebGL übergeben werden könnten).
Das funktioniert schon heute. WebGL-Funktionen akzeptieren eine ArrayBufferView, und es ist möglich, eine solche Ansicht in einem WebAssembly-Speicher zu erstellen. Grundsätzlich erstellen Sie eine typisierte Array-Ansicht auf dem ArrayBuffer des Speichers und führen dann ein .subarray
aus (die emscripten GL-Bindungen tun dies beispielsweise ).
Das funktioniert, wenn die Daten flach im Speicher sind. Bei einem C-Array oder einem C++ std::vector
ist das der Fall. Das Senden von C++-Arrays an WebGL funktioniert in den meisten Fällen bereits heute.
Dies hängt davon ab, wie in diesem Link von früher durch JS atm zu gehen. Dort entsteht aber keine Kopie! (Das Überspringen des JS wäre auch nett, als separate Angelegenheit, und ja, neue Spezifikationen werden dies zulassen, wie z. B. Schnittstellentypen, wie @Macil erwähnte.)
Scheint, dass Bedenken beantwortet wurden, also schließen. Bitte öffnen Sie andernfalls erneut.
Hilfreichster Kommentar
Das funktioniert schon heute. WebGL-Funktionen akzeptieren eine ArrayBufferView, und es ist möglich, eine solche Ansicht in einem WebAssembly-Speicher zu erstellen. Grundsätzlich erstellen Sie eine typisierte Array-Ansicht auf dem ArrayBuffer des Speichers und führen dann ein
.subarray
aus (die emscripten GL-Bindungen tun dies beispielsweise ).Das funktioniert, wenn die Daten flach im Speicher sind. Bei einem C-Array oder einem C++
std::vector
ist das der Fall. Das Senden von C++-Arrays an WebGL funktioniert in den meisten Fällen bereits heute.Dies hängt davon ab, wie in diesem Link von früher durch JS atm zu gehen. Dort entsteht aber keine Kopie! (Das Überspringen des JS wäre auch nett, als separate Angelegenheit, und ja, neue Spezifikationen werden dies zulassen, wie z. B. Schnittstellentypen, wie @Macil erwähnte.)