Skip to content

simple multithreading particle system without block on update/render

Notifications You must be signed in to change notification settings

rrpvm/multithreading-particle-system-glut

Repository files navigation

Описание:

рендерит множество частиц (прямоугольников). 2 потока : главный и worker thread в главном происходит рендер -> рендер берет данные из системы частиц, которая предоставляет уже обработанный массив частиц. На месте клика создается эффект,который содержит 64 частицы. Каждая частица может 'породить' еще 1 такой же эффект при своей 'смерти' Всего максимум 2048 эффектов, на каждый из которых приходится по 64 частицы. Всего 131 072 частицы Если частица хочет взорваться, но все эффекты еще живы - порождение новой не происходит.

пара слов о реализации:

исходя из <Максимально количество эффектов - 2048 (по 64 частицы каждый).> можно сделать вывод - существует сущность эффект, а так же частица. Для удобства - каждый эффект содержить 64 частицы. Если в эффекте нет действительных(корректных) частиц - его удобно пропустить, не итерируясь через все частицы. добавил 2 атомик логических переменных - для стадии 'планирования(notify/wait)'. Блокировок в случае с логикой/рендером не происходит - если логика не успевает за рендером-> мы просто рендерим старые данные, не дожидаясь завершения логики Так же логика: она не ждет рендер. Есть 2 буффера(основной и 'задний')(аналогия с буферами в рендере front/back buffers), где в основном всегда происходят изменения, в задний, по возможности, копируется основной - после чего есть вещание - мы обновили задний буффер. Если в этот момент мы в рендере копировали уже в локальный буффер(чтоб исключить мерцания при недостатке обновления кадров в логике) - изменение заднего буфера невозможно. Таким образом получилась неблокирующая система частиц( единственный блок - при клике , т.к идет добавление в основной поток эффекта). Кое где выровнены классы (их размеры) для удобства работы с SIMD(интринсики)(хотя компилятор сам все сделает за нас). На моем железе при максимальнок кол-ве эффектов - логика имеет 110 фпс( режим релиз, i5 3470 + gtx 960 2gb)

About

simple multithreading particle system without block on update/render

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published