Войти
ПрограммированиеФорумОбщее

Обновление ссылок на компоненты в object pool при их перемещении в массиве (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
(Правка: 19:01) 18:49, 22 авг. 2019

ну ёмоё ...


#31
19:27, 22 авг. 2019

Suslik
А чем мой вариант плох? Пробегается легко, индекс тоже взять легко. Правда приходится тратить дополнительную память

#32
21:13, 22 авг. 2019

Suslik
> 1) объекты хранятся в одном массиве std::vector<T> objects; и при освобождении
> какого-то элемента он просто помечается как свободный и его индекс добавляется
> в пул свободных элементов. в таком подходе id объекта — это его номер в
> массиве, он постоянный при добавлении и удалении других элементов, недостаток
> подхода — неудобно пробегаться только по существующим элементам.
в смысле неудобно? как может быть неудобно

for (int i=0; i<objects.size(); i++) {
   if (objects[i].state == ALIVE) {
    ...
   }
}
#33
21:19, 22 авг. 2019

u960
если есть пул на 1000 объектов а живых только десяток гонять всю тысячу некомильфо

#34
21:25, 22 авг. 2019

Oxyd
> если есть пул на 1000 объектов а живых только десяток гонять всю тысячу
> некомильфо
ты на калькуляторе гоняешь?

#35
(Правка: 21:42) 21:41, 22 авг. 2019

u960
> ты на калькуляторе гоняешь?
то есть если у тебя какой-нибудь эффект на 9000000000 частиц на 0.1 секунды взорвался, частицы пропали, то твоему некалькулятору будет здорово продолжать 9000000000 мёртвых частиц каждый кадр считать? к тому же такой код плохо векторизуется и плохо соотносится с локальностью данных.

#36
(Правка: 10:16) 10:15, 23 авг. 2019

Suslik
> то есть если у тебя какой-нибудь эффект на 9000000000 частиц на 0.1 секунды
> взорвался
такой цикл это уже ощутимо для проца, но сомневаюсь, что в обычных проектах будут подобные эффекты,уже больше похоже на специализированную задачу.

>такой код плохо векторизуется и плохо соотносится с локальностью данных.
для совсем темных, можно это обьяснить, эти термины

#37
(Правка: 13:19) 13:08, 23 авг. 2019

u960
> ты на калькуляторе гоняешь?
отличная логика, раз у нас не калькулятор, давайте всякий ненужный мусор перебирать, и да, каждый раз ещё выяснять, мусор ли это

это работает ровно до того момента пока не попадётся действительно калькулятор на котором тоже нужно уметь идти

или вдруг после добавления ещё одного такого перебора для новой фичи твой некалькулятор почему-то перестаёт влезать в кадр

#38
13:33, 23 авг. 2019

как бы любой код, который выполняется в цикле, теоретически может стать узким местом программы, если количество итераций достигнет достаточной величины. а если сложность ещё и нелинейная (вроде обнаружений коллиженов или поиск пути), то и время выполнения будет расти нелинейно с количеством объектов. на каком бы мощном суперкомпьютере ни выполнялся такой код, всегда можно будет найти количество объектов, на котором производительность загнётся. и производительность любого крупного проекта практически всегда находится на грани, так как если кадр рендерится слишком быстро, это значит, что аппаратные возможности используются не полностью и можно было бы улучшить качество графики при той же частоте кадров. поэтому любой код в цикле является потенциально критическим. а сам код цикла можно считать вообще едва ли не самым важным с точки зрения производительности кодом в любом проекте, так как он типично определяет memory layout и производительность всех остальных алгоритмов, так как они на него полагаются.

#39
14:52, 23 авг. 2019

u960
> как может быть неудобно
Это очень медленно. Хоть и удобно

Так то и виртуальные функции это очень удобно. Но в нашей сфере их лучше не использовать

#40
14:54, 23 авг. 2019

u960
> для совсем темных, можно это обьяснить, эти термины
https://gameprogrammingpatterns.com/data-locality.html

#41
14:56, 23 авг. 2019

#!
> раз у нас не калькулятор, давайте всякий ненужный мусор перебирать
ох уж эта молодежь :)

#42
15:16, 23 авг. 2019

Robotex
> ох уж эта молодежь :)

сколько пройдёт времени когда  тебе надоест вся эта байда?

#43
15:33, 26 авг. 2019

innuendo
Когда он напишет хотяб один работающий проект или посмотрит, как это сделано в каком-нибудь
https://github.com/garsipal/valhalla-project
https://github.com/etodd/lasercrabs

+ Показать
#44
18:28, 28 авг. 2019

lookid
> Если партикл уже использован, то его можно свапнуть с последним активным и
> сделать actual_length - 1

Тадам. Именно так, как реализовано в моем движке.

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумОбщее