Size: a a a

pro.graphon (and gamedev)

2020 October 22

k

khok in pro.graphon (and gamedev)
А знает ли кто, как обычно используют связку WASM + WebGL?
Вот например, есть сишный код который генерит меш, скомпилирован в бинарник wasm.
Используется следующая схема:
1) JS: создает контекст WebGL
2) JS: создает буфер памяти
3) JS: запускает соответствующий бинарник .wasm, передав ему буфер;
4) WASM:  заполняет полученный буфер данными;
5) JS: отправляет буфер на видеокарту (glBufferData).
6) драйвер GPU: рисует
это как-то так делается, или есть нюансы?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
khok
А знает ли кто, как обычно используют связку WASM + WebGL?
Вот например, есть сишный код который генерит меш, скомпилирован в бинарник wasm.
Используется следующая схема:
1) JS: создает контекст WebGL
2) JS: создает буфер памяти
3) JS: запускает соответствующий бинарник .wasm, передав ему буфер;
4) WASM:  заполняет полученный буфер данными;
5) JS: отправляет буфер на видеокарту (glBufferData).
6) драйвер GPU: рисует
это как-то так делается, или есть нюансы?
у меня js только контекст создаёт и с кешем возится (загрузка ресурсов в сервера и сохранение их в кеше браузера игрока, сохранки игры туда же), остальной код написан на С++ и скомпилирован в wasm
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
+ для древних браузеров js выбирает запускать wasm или asm.js
источник

K

Kirill in pro.graphon (and gamedev)
khok
А знает ли кто, как обычно используют связку WASM + WebGL?
Вот например, есть сишный код который генерит меш, скомпилирован в бинарник wasm.
Используется следующая схема:
1) JS: создает контекст WebGL
2) JS: создает буфер памяти
3) JS: запускает соответствующий бинарник .wasm, передав ему буфер;
4) WASM:  заполняет полученный буфер данными;
5) JS: отправляет буфер на видеокарту (glBufferData).
6) драйвер GPU: рисует
это как-то так делается, или есть нюансы?
Можешь делать как угодно, wasm это всё равно тот же js
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
khok
А знает ли кто, как обычно используют связку WASM + WebGL?
Вот например, есть сишный код который генерит меш, скомпилирован в бинарник wasm.
Используется следующая схема:
1) JS: создает контекст WebGL
2) JS: создает буфер памяти
3) JS: запускает соответствующий бинарник .wasm, передав ему буфер;
4) WASM:  заполняет полученный буфер данными;
5) JS: отправляет буфер на видеокарту (glBufferData).
6) драйвер GPU: рисует
это как-то так делается, или есть нюансы?
wasm только цифирьки умеет считать в песочнице. Ему даешь числа, он возвращает ответ. А вызов WebGL и бинд буфферов все равно в JS и мусор собирать он все равно будет.
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
Так что он хорош для цифродробилок только пока что, ну или вам привычнее в С.
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
Можно посчитать матрицы поворота и веса, но вызвать ничего по сути - нет.
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
khok
А знает ли кто, как обычно используют связку WASM + WebGL?
Вот например, есть сишный код который генерит меш, скомпилирован в бинарник wasm.
Используется следующая схема:
1) JS: создает контекст WebGL
2) JS: создает буфер памяти
3) JS: запускает соответствующий бинарник .wasm, передав ему буфер;
4) WASM:  заполняет полученный буфер данными;
5) JS: отправляет буфер на видеокарту (glBufferData).
6) драйвер GPU: рисует
это как-то так делается, или есть нюансы?
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
Ага эта штука выплевывает лапшакод в жс за вас.
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
ну вопрос был про васм и вебгл, вот емскриптен и используют зачастую
источник

k

khok in pro.graphon (and gamedev)
Pavel 🍣
Можно посчитать матрицы поворота и веса, но вызвать ничего по сути - нет.
emiscripten, судя по всему, напрямую вызывает webgl, без возврата управления в JS. Вот например.
https://github.com/XProger/OpenLara/blob/master/src/platform/web/main.cpp#L147
источник

k

khok in pro.graphon (and gamedev)
Значит где-то под капотом прокидывает браузерные функции webgl-api, дабы wasm их видел.
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
khok
emiscripten, судя по всему, напрямую вызывает webgl, без возврата управления в JS. Вот например.
https://github.com/XProger/OpenLara/blob/master/src/platform/web/main.cpp#L147
Вы показываете cpp исходники, а не актуальный код на сайте.
источник

P🍣

Pavel 🍣 in pro.graphon (and gamedev)
В будущем возможно васм научится больше делать, но пока вот так.
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
пример васма и вебгл (через го)
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
есть ещё raylib.com, так другой есть пример васма
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
Pavel 🍣
В будущем возможно васм научится больше делать, но пока вот так.
а что ещё нужно?)
источник

kP

kroppli Petushkov in pro.graphon (and gamedev)
тот же анриал и юнити используют емскриптен вполне успешно
источник