Design: Passer le tableau C++ à WebGL sans copier

Créé le 18 déc. 2019  ·  3Commentaires  ·  Source: WebAssembly/design

Développer un jeu 3D en utilisant WebAssembly avec WebGL est réalisable, si nous pouvons passer le tableau C++ à l'API WebGL sans copier le tableau.

Nous devons transmettre les données du tableau à WebGLRenderingContext.bufferData() , mais il n'accepte que JavaScript ArrayBuffer ou ArrayBufferView . S'il accepte le tableau C++, ou si nous pouvons créer ArrayBufferView sans copier les données du tableau, alors il est résolu.

Commentaire le plus utile

Cela fonctionne déjà aujourd'hui. Les fonctions WebGL acceptent un ArrayBufferView, et il est possible de créer une telle vue sur une mémoire WebAssembly. Fondamentalement, vous créez une vue de tableau typée sur le ArrayBuffer de la mémoire, puis faites un .subarray (les liaisons emscripten GL le font, par exemple ).

Cela fonctionne si les données sont vides en mémoire. Pour un tableau C ou un C++ std::vector c'est le cas. Donc, envoyer des tableaux C++ à WebGL est déjà la façon dont les choses fonctionnent aujourd'hui, dans la plupart des cas.

Cela dépend du passage par JS atm, comme dans ce lien de plus tôt. Mais aucune copie n'y est créée ! (Ignorer le JS serait bien aussi, séparément, et oui, de nouvelles spécifications le permettront, comme les types d'interface, comme @Macil l'a mentionné.)

Tous les 3 commentaires

Je pense que les propositions de liaisons d'hôte, de référence et/ou de GC permettront aux instances de WebAssembly de créer directement des ArrayBufferViews (qui pourraient ensuite être transmises à WebGL).

Cela fonctionne déjà aujourd'hui. Les fonctions WebGL acceptent un ArrayBufferView, et il est possible de créer une telle vue sur une mémoire WebAssembly. Fondamentalement, vous créez une vue de tableau typée sur le ArrayBuffer de la mémoire, puis faites un .subarray (les liaisons emscripten GL le font, par exemple ).

Cela fonctionne si les données sont vides en mémoire. Pour un tableau C ou un C++ std::vector c'est le cas. Donc, envoyer des tableaux C++ à WebGL est déjà la façon dont les choses fonctionnent aujourd'hui, dans la plupart des cas.

Cela dépend du passage par JS atm, comme dans ce lien de plus tôt. Mais aucune copie n'y est créée ! (Ignorer le JS serait bien aussi, séparément, et oui, de nouvelles spécifications le permettront, comme les types d'interface, comme @Macil l'a mentionné.)

Il semble que cette préoccupation ait été répondue, donc fermeture. Merci de rouvrir sinon.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

frehberg picture frehberg  ·  6Commentaires

jfbastien picture jfbastien  ·  6Commentaires

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Commentaires

nikhedonia picture nikhedonia  ·  7Commentaires

thysultan picture thysultan  ·  4Commentaires