Design: Passe o array C++ para o WebGL sem copiar

Criado em 18 dez. 2019  ·  3Comentários  ·  Fonte: WebAssembly/design

Desenvolver jogos 3D usando WebAssembly com WebGL é possível, se pudermos passar o array C++ para a API WebGL sem copiar o array.

Precisamos passar os dados do array para WebGLRenderingContext.bufferData() , mas ele só aceita JavaScript ArrayBuffer ou ArrayBufferView . Se aceitar array C++, ou se pudermos criar ArrayBufferView sem copiar os dados do array, então está resolvido.

Comentários muito úteis

Isso já funciona hoje. As funções WebGL aceitam um ArrayBufferView, e é possível criar tal visualização em uma memória WebAssembly. Basicamente você cria uma visão de array tipada no ArrayBuffer da Memória, e então faz um .subarray (as ligações emscripten GL fazem isso, por exemplo ).

Isso funciona se os dados estiverem vazios na memória. Para uma matriz C ou um C++ std::vector esse é o caso. Portanto, enviar arrays C++ para WebGL já é como as coisas funcionam hoje, na maioria dos casos.

Isso depende de passar pelo JS atm, como naquele link anterior. Mas nenhuma cópia é criada lá! (Pular o JS também seria bom, como um assunto separado, e sim, novas especificações permitirão isso, como Tipos de Interface, como @Macil mencionou.)

Todos 3 comentários

Acho que as associações de host, referência e/ou propostas de GC permitirão que instâncias do WebAssembly criem ArrayBufferViews diretamente (que poderiam ser passados ​​para o WebGL).

Isso já funciona hoje. As funções WebGL aceitam um ArrayBufferView, e é possível criar tal visualização em uma memória WebAssembly. Basicamente você cria uma visão de array tipada no ArrayBuffer da Memória, e então faz um .subarray (as ligações emscripten GL fazem isso, por exemplo ).

Isso funciona se os dados estiverem vazios na memória. Para uma matriz C ou um C++ std::vector esse é o caso. Portanto, enviar arrays C++ para WebGL já é como as coisas funcionam hoje, na maioria dos casos.

Isso depende de passar pelo JS atm, como naquele link anterior. Mas nenhuma cópia é criada lá! (Pular o JS também seria bom, como um assunto separado, e sim, novas especificações permitirão isso, como Tipos de Interface, como @Macil mencionou.)

Parece que a preocupação foi respondida, então fechando. Por favor, reabra caso contrário.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

nikhedonia picture nikhedonia  ·  7Comentários

chicoxyzzy picture chicoxyzzy  ·  5Comentários

konsoletyper picture konsoletyper  ·  6Comentários

beriberikix picture beriberikix  ·  7Comentários

arunetm picture arunetm  ·  7Comentários