๋ฐฐ์ด์ ๋ณต์ฌํ์ง ์๊ณ C++ ๋ฐฐ์ด์ WebGL API์ ์ ๋ฌํ ์๋ง ์๋ค๋ฉด WebGL๊ณผ ํจ๊ป WebAssembly๋ฅผ ์ฌ์ฉํ์ฌ 3D ๊ฒ์์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ WebGLRenderingContext.bufferData() ์ ์ ๋ฌํด์ผ ํ์ง๋ง JavaScript ArrayBuffer ๋๋ ArrayBufferView ๋ง ํ์ฉํฉ๋๋ค. C++ ๋ฐฐ์ด์ ํ์ฉํ๊ฑฐ๋ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ArrayBufferView๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค.
ํธ์คํธ ๋ฐ์ธ๋ฉ, ์ฐธ์กฐ ๋ฐ/๋๋ GC ์ ์์ ํตํด WebAssembly ์ธ์คํด์ค๊ฐ ArrayBufferViews๋ฅผ ์ง์ ์์ฑํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์ด๋ WebGL๋ก ์ ๋ฌ๋ ์ ์์).
์ด๊ฒ์ ์ด๋ฏธ ์ค๋๋ ์๋ํฉ๋๋ค. WebGL ํจ์๋ ArrayBufferView๋ฅผ ํ์ฉํ๋ฉฐ WebAssembly ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ฌํ ๋ณด๊ธฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ArrayBuffer์ ์ ํ์ด ์ง์ ๋ ๋ฐฐ์ด ๋ณด๊ธฐ๋ฅผ ๋ง๋ ๋ค์ .subarray
๋ฅผ ์ํํฉ๋๋ค( ์: emscripten GL ๋ฐ์ธ๋ฉ์ด ์ด ์์
์ ์ํํจ).
๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ซํ ๊ฒฝ์ฐ ์๋ํฉ๋๋ค. C ๋ฐฐ์ด ๋๋ C++ std::vector
์ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ ์ต๋๋ค. ๋ฐ๋ผ์ C++ ๋ฐฐ์ด์ WebGL๋ก ๋ณด๋ด๋ ๊ฒ์ ์ค๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ฏธ ์๋ํ๋ ๋ฐฉ์์
๋๋ค.
์ด๊ฒ์ ์ด์ ์ ํด๋น ๋งํฌ์์์ ๊ฐ์ด JS atm์ ํต๊ณผํ๋ ๊ฒ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์๋ ์ฌ๋ณธ์ด ์์ฑ๋์ง ์์ต๋๋ค! (JS๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ๋ ๋ณ๋์ ๋ฌธ์ ๋ก ์ข์ ๊ฒ์ด๋ฉฐ, @Macil์ด ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ธํฐํ์ด์ค ์ ํ๊ณผ ๊ฐ์ ์๋ก์ด ์ฌ์์์๋ ์ด๋ฅผ ํ์ฉํ ๊ฒ์ ๋๋ค.)
์ฐ๋ ค๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ผ๋ ๋ซ์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์ด์ด์ฃผ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ์ด๋ฏธ ์ค๋๋ ์๋ํฉ๋๋ค. WebGL ํจ์๋ ArrayBufferView๋ฅผ ํ์ฉํ๋ฉฐ WebAssembly ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ฌํ ๋ณด๊ธฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ArrayBuffer์ ์ ํ์ด ์ง์ ๋ ๋ฐฐ์ด ๋ณด๊ธฐ๋ฅผ ๋ง๋ ๋ค์
.subarray
๋ฅผ ์ํํฉ๋๋ค( ์: emscripten GL ๋ฐ์ธ๋ฉ์ด ์ด ์์ ์ ์ํํจ).๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ซํ ๊ฒฝ์ฐ ์๋ํฉ๋๋ค. C ๋ฐฐ์ด ๋๋ C++
std::vector
์ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ ์ต๋๋ค. ๋ฐ๋ผ์ C++ ๋ฐฐ์ด์ WebGL๋ก ๋ณด๋ด๋ ๊ฒ์ ์ค๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ฏธ ์๋ํ๋ ๋ฐฉ์์ ๋๋ค.์ด๊ฒ์ ์ด์ ์ ํด๋น ๋งํฌ์์์ ๊ฐ์ด JS atm์ ํต๊ณผํ๋ ๊ฒ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์๋ ์ฌ๋ณธ์ด ์์ฑ๋์ง ์์ต๋๋ค! (JS๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ๋ ๋ณ๋์ ๋ฌธ์ ๋ก ์ข์ ๊ฒ์ด๋ฉฐ, @Macil์ด ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ธํฐํ์ด์ค ์ ํ๊ณผ ๊ฐ์ ์๋ก์ด ์ฌ์์์๋ ์ด๋ฅผ ํ์ฉํ ๊ฒ์ ๋๋ค.)