рендеринг, в чём он заключаеется вообще?
По моему так выходит, что легче сделать однопоточно всё и не терять на синхронизации и дать больше возможностей, то есть
игровая логика
физика
и прочее идёт последовательно, но внутри этих шагов может быть что то исполнено параллельно
Но кажется хочется отвязать рендеринг от этого всего, то есть как минимум рисовать "параллельно" всей остальной игре, но тут сразу возникает синхронизация жесткая, как это принято решать?
афаик заключается в том что комманд буфферы заполняешь с нескольких ядер и пото отправляешь на очередь
а точно на синхронизации не потеряешь больше, складывая кучу обектов в один буфер? Ну хотя это можно хитро распараллелить чтобы убрать синхронизацию
Буферы можно иметь отдельные на каждый поток
ну так ты не складываешь с нескольких ядер на один буффер офк
Там только очередь буферов общая, но в неё ты сабмитишь один раз за кадр или что-то такое
ну короче это надо напрямую вулкан юзать
или так или юзать полностью готовый движок
то что ты описал это fork-join, как по мне отличный вариант, обмазать таск системой на корутинах/экзекуторах запилить
да, рендер сам по себе не на всех gapi можно распараллелить?
я не видел нигде, где бы это называлось fork-join, кроме джавы и юникса :)))
есть очень тупая идея копировать всю сцену и использовать временную копию
какой смысл, если ты знаешь что будешь менять
Обычно твои данные это не супер мега блоб, который ты меняешь целиком, обычно это какая-то древовидная структура, и к отдельным ветвям можно было бы применить cow, только родительских ссылок следует избегать
ну нет, у объектов каждый кадр меняются физические координаты уж точно
Обсуждают сегодня