Design: Pasar C++ Array a WebGL sin copiar

Creado en 18 dic. 2019  ·  3Comentarios  ·  Fuente: WebAssembly/design

Desarrollar un juego 3D usando WebAssembly con WebGL es posible, si podemos pasar la matriz de C++ a la API de WebGL sin copiar la matriz.

Necesitamos pasar los datos de la matriz a WebGLRenderingContext.bufferData() , pero solo acepta JavaScript ArrayBuffer o ArrayBufferView . Si acepta una matriz C++, o si podemos crear ArrayBufferView sin copiar los datos de la matriz, entonces está resuelto.

Comentario más útil

Esto ya funciona hoy. Las funciones WebGL aceptan ArrayBufferView y es posible crear dicha vista en una memoria WebAssembly. Básicamente, crea una vista de matriz escrita en el ArrayBuffer de la memoria y luego hace un .subarray (los enlaces emscripten GL hacen esto, por ejemplo ).

Eso funciona si los datos están planos en la memoria. Para una matriz C o C++ std::vector ese es el caso. Así que enviar arreglos de C++ a WebGL ya es como funcionan las cosas hoy en día, en la mayoría de los casos.

Esto depende de pasar por JS atm, como en ese enlace de antes. ¡Pero no se crea ninguna copia allí! (Omitir el JS también sería bueno, como un asunto separado, y sí, las nuevas especificaciones lo permitirán, como los tipos de interfaz, como mencionó @Macil ).

Todos 3 comentarios

Creo que los enlaces de host, la referencia y/o las propuestas de GC permitirán que las instancias de WebAssembly creen ArrayBufferViews directamente (que luego podrían pasarse a WebGL).

Esto ya funciona hoy. Las funciones WebGL aceptan ArrayBufferView y es posible crear dicha vista en una memoria WebAssembly. Básicamente, crea una vista de matriz escrita en el ArrayBuffer de la memoria y luego hace un .subarray (los enlaces emscripten GL hacen esto, por ejemplo ).

Eso funciona si los datos están planos en la memoria. Para una matriz C o C++ std::vector ese es el caso. Así que enviar arreglos de C++ a WebGL ya es como funcionan las cosas hoy en día, en la mayoría de los casos.

Esto depende de pasar por JS atm, como en ese enlace de antes. ¡Pero no se crea ninguna copia allí! (Omitir el JS también sería bueno, como un asunto separado, y sí, las nuevas especificaciones lo permitirán, como los tipos de interfaz, como mencionó @Macil ).

Parece que esa preocupación fue respondida, así que cerrando. Vuelva a abrir si no es así.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

dpw picture dpw  ·  3Comentarios

JimmyVV picture JimmyVV  ·  4Comentarios

frehberg picture frehberg  ·  6Comentarios

nikhedonia picture nikhedonia  ·  7Comentarios

konsoletyper picture konsoletyper  ·  6Comentarios