Сап двач. Смотивируй разобраться с ебучими трансформами в движке с мультитредингом.
Короче, блядь, есть геймобджекты, есть компоненты. Это мейн тред.В сабсистем тредах вертятся, очевидно, подсистемы. У них есть тред-локал реализации компонентов, на каждый компонент в мейне создаётся его тред-локал внутренности в одной или нескольких подсистемах.
https://www.youtube.com/watch?v=EyFSL30vikM
Подсистемы общаются между собой через сообщения. У каждой из них есть почтовый ящик с мьютексом, раз в итерацию своего цикла она проверяет почтовый ящик.Ах да, каждой подсистеме можно указать, сколько раз в секунду дёргать анус свой цикл обработки.
У каждого Компонента и Внутренностей есть какие-то данные, которыми было бы неплохо обмениваться.И вот тут начинается пиздец.Короче, есть Трансформ с xyzw позицией вращением и скейлом.Его могут читать и записывать все потоки.Можно сделать копию всех трансформов у подсистем, чтобы каждое изменение отсылалось в тред физики для апдейта основного состояния. А потом физика будет сама рассылать изменения по потокам.Проблема: рассинхрон, одна подсистема может утащить объект в ебеня, а потом посчитается физон — и хуяк, объект снова на месте. Нереалтаймово.
Вариант второй:Сделать компоненты не-тред-локал и поместить в глобальный сторейдж. Тогда нахуй идёт половина плюсов почтового ящика, ибо можно синкать традиционно мьютексом.Проблема: потоки работают с данными по очереди. Отрисовка может тормознуться, пока физон считается.Решение: локать, копипастить ВЕСЬ стейт движка в свой поток, анлокать и работать со стейтом. Проблема: рассинхрон, если давать компоненты на запись больше, чем одной подсистеме.Решение: запись идёт в почтовый ящик, чтение идёт напрямую.
Проблема: насколько жирным будет стейт?Решение: Сделать стейты у каждой из подсистем, она будет владеть им и заодно рулить записью. Понадобился стейт трансформов — вытащил его из подсистемы и работаешь. Конкретно трансформы — 60 Кб копирования за кадр. Пфф, изи.В целом норм вариант. Заодно, синхронизацию записей можно инкапсулировать в SubsystemState.Такс, надо ещё подумоть.
В пизду думоть, так и сделаю.
Попощу аниме за успешность говнокода. Слава Омниссии!
Опчинский, за шейдеры пояснишь?