Design: C++-Array ohne Kopieren an WebGL übergeben

Erstellt am 18. Dez. 2019  ·  3Kommentare  ·  Quelle: WebAssembly/design

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.

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.)

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

bobOnGitHub picture bobOnGitHub  ·  6Kommentare

badumt55 picture badumt55  ·  8Kommentare

nikhedonia picture nikhedonia  ·  7Kommentare

beriberikix picture beriberikix  ·  7Kommentare

ghost picture ghost  ·  7Kommentare