Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° 3D-ΠΈΠ³ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ WebAssembly Ρ WebGL Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠ°, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² C++ Π² WebGL API Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π² WebGLRenderingContext.bufferData(), Π½ΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ JavaScript ArrayBuffer ΠΈΠ»ΠΈ ArrayBufferView. ΠΡΠ»ΠΈ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² C++ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ArrayBufferView Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π°.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Host Bindings, Reference ΠΈ/ΠΈΠ»ΠΈ GC ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ WebAssembly ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ArrayBufferViews Π½Π°ΠΏΡΡΠΌΡΡ (ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π² WebGL).
ΠΡΠΎ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ WebGL ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ArrayBufferView, ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ WebAssembly. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ArrayBuffer ΠΏΠ°ΠΌΡΡΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»Π°Π΅ΡΠ΅ .subarray
( Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ , ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ emscripten GL Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ).
ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ»ΠΎΡΠΊΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° C ΠΈΠ»ΠΈ C++ std::vector
ΡΡΠΎ ΡΠ°ΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² C++ Π² WebGL Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π±Π°Π½ΠΊΠΎΠΌΠ°Ρ JS, ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅ ΡΠ°Π½Π΅Π΅. ΠΠΎ ΡΠ°ΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ! (ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ JS, ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΈ Π΄Π°, Π½ΠΎΠ²ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» @Macil .)
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π½Π° Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ ΠΎΡΠ²Π΅ΡΠΈΠ»ΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π·Π°ΠΊΡΡΠ²Π°ΡΡΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ½ΠΎΠ²Π° ΠΎΡΠΊΡΠΎΠΉΡΠ΅, Π΅ΡΠ»ΠΈ Π½Π΅Ρ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ WebGL ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ArrayBufferView, ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ WebAssembly. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ArrayBuffer ΠΏΠ°ΠΌΡΡΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»Π°Π΅ΡΠ΅
.subarray
( Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ , ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ emscripten GL Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ).ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ»ΠΎΡΠΊΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° C ΠΈΠ»ΠΈ C++
std::vector
ΡΡΠΎ ΡΠ°ΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² C++ Π² WebGL Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π±Π°Π½ΠΊΠΎΠΌΠ°Ρ JS, ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅ ΡΠ°Π½Π΅Π΅. ΠΠΎ ΡΠ°ΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ! (ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ JS, ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΈ Π΄Π°, Π½ΠΎΠ²ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» @Macil .)