Design: ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  C++ ๋ฐฐ์—ด์„ WebGL์— ์ „๋‹ฌ

์— ๋งŒ๋“  2019๋…„ 12์›” 18์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: WebAssembly/design

๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  C++ ๋ฐฐ์—ด์„ WebGL API์— ์ „๋‹ฌํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด WebGL๊ณผ ํ•จ๊ป˜ WebAssembly๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 3D ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ WebGLRenderingContext.bufferData() ์— ์ „๋‹ฌํ•ด์•ผ ํ•˜์ง€๋งŒ JavaScript ArrayBuffer ๋˜๋Š” ArrayBufferView ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. C++ ๋ฐฐ์—ด์„ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ArrayBufferView๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์ด๋ฏธ ์˜ค๋Š˜๋‚  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. WebGL ํ•จ์ˆ˜๋Š” ArrayBufferView๋ฅผ ํ—ˆ์šฉํ•˜๋ฉฐ WebAssembly ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋Ÿฌํ•œ ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ArrayBuffer์— ์œ ํ˜•์ด ์ง€์ •๋œ ๋ฐฐ์—ด ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ .subarray ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค( ์˜ˆ: emscripten GL ๋ฐ”์ธ๋”ฉ์ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ).

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ”Œ๋žซํ•œ ๊ฒฝ์šฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. C ๋ฐฐ์—ด ๋˜๋Š” C++ std::vector ์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ C++ ๋ฐฐ์—ด์„ WebGL๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ „์˜ ํ•ด๋‹น ๋งํฌ์—์„œ์™€ ๊ฐ™์ด JS atm์„ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ๊ธฐ์—๋Š” ์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! (JS๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ์ข‹์„ ๊ฒƒ์ด๋ฉฐ, @Macil์ด ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์‚ฌ์–‘์—์„œ๋Š” ์ด๋ฅผ ํ—ˆ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๋ชจ๋“  3 ๋Œ“๊ธ€

ํ˜ธ์ŠคํŠธ ๋ฐ”์ธ๋”ฉ, ์ฐธ์กฐ ๋ฐ/๋˜๋Š” GC ์ œ์•ˆ์„ ํ†ตํ•ด WebAssembly ์ธ์Šคํ„ด์Šค๊ฐ€ ArrayBufferViews๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” WebGL๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Œ).

์ด๊ฒƒ์€ ์ด๋ฏธ ์˜ค๋Š˜๋‚  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. WebGL ํ•จ์ˆ˜๋Š” ArrayBufferView๋ฅผ ํ—ˆ์šฉํ•˜๋ฉฐ WebAssembly ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋Ÿฌํ•œ ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ArrayBuffer์— ์œ ํ˜•์ด ์ง€์ •๋œ ๋ฐฐ์—ด ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ .subarray ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค( ์˜ˆ: emscripten GL ๋ฐ”์ธ๋”ฉ์ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ).

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ”Œ๋žซํ•œ ๊ฒฝ์šฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. C ๋ฐฐ์—ด ๋˜๋Š” C++ std::vector ์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ C++ ๋ฐฐ์—ด์„ WebGL๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ „์˜ ํ•ด๋‹น ๋งํฌ์—์„œ์™€ ๊ฐ™์ด JS atm์„ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ๊ธฐ์—๋Š” ์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! (JS๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ์ข‹์„ ๊ฒƒ์ด๋ฉฐ, @Macil์ด ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์‚ฌ์–‘์—์„œ๋Š” ์ด๋ฅผ ํ—ˆ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์šฐ๋ ค๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ๋‹ซ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์‹œ ์—ด์–ด์ฃผ์„ธ์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

artem-v-shamsutdinov picture artem-v-shamsutdinov  ยท  6์ฝ”๋ฉ˜ํŠธ

jfbastien picture jfbastien  ยท  6์ฝ”๋ฉ˜ํŠธ

badumt55 picture badumt55  ยท  8์ฝ”๋ฉ˜ํŠธ

mfateev picture mfateev  ยท  5์ฝ”๋ฉ˜ํŠธ

dpw picture dpw  ยท  3์ฝ”๋ฉ˜ํŠธ