Size: a a a

pro.graphon (and gamedev)

2020 February 19

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
InvalidateRect - просто выставляет флаг окну, что его нужно перерисовать
мне ещё хотелосьбы заставить отработать вот эту фигню https://github.com/disba1ancer/dse/blob/8c6bc37ce8c410d55163ad79b5e6d5aaa0247691/src/threadutils/ExecutionThread.cpp#L14
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
флаг заведи
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
флаг заведи
где и зачем?
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
case WM_TIMER :
 InvalidateRect(...);
 if (flag) отрабатывать эту фигню;
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
case WM_TIMER :
 InvalidateRect(...);
 if (flag) отрабатывать эту фигню;
ну так и будет, только отдельным колбеком без участия окна
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
ладно, касательно твоего вопроса, я не знаю насколько плохо пересоздавать таймер каждый кадр, но я бы такого не делал
источник

d

disba1ancer in pro.graphon (and gamedev)
не будет только invalidaterect он вызовется из ExecutionThread
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
если пока рендер работает - не хочется таймера - то я бы завел флаг для этого внутри обработчика таймера
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
ладно, касательно твоего вопроса, я не знаю насколько плохо пересоздавать таймер каждый кадр, но я бы такого не делал
влюбом случае если DispathMessage не задерживает исполнение таймер нужно как минимум сбросить
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
InvalidateRect дешевый, и смысла для него заводить флага нет
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
disba1ancer
влюбом случае если DispathMessage не задерживает исполнение таймер нужно как минимум сбросить
зачем сбрасывать то?
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
зачем сбрасывать то?
затем что нам не нужно уступать другой таске в ExecutionThread
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
case WM_TIMER :
 InvalidateRect(...);
 if (flag) отрабатывать эту фигню;
 flag = true;

сброс таймера в полевых условиях
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
чтобы пропустить следующий евент от таймера - не нужно пересоздавать таймер
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
хотя я может не понимаю что ты хочешь получить
источник

K

Kirill in pro.graphon (and gamedev)
Как быстро реюзать мёртвые партиклы?
Сейчас я засовываю их в сортирующую мапу(rb-дерево), на каждой итерации получаю все частицы которые уже умерли(они лежат в самом начале мапы) и перезаписываю их через glBufferSubData
13к частиц рендерятся в 60-70фпс, когда без частиц получается все 150
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
хотя я может не понимаю что ты хочешь получить
вот тут весь код инициализации https://github.com/disba1ancer/dse/blob/master/src/dse.cpp
ExecutionThread просто в цикле исполняет таски, одна из тасок - один проход цикла сообщений, но цикл сообщений может может устроить подлянку ExecutionThread'у рекурсивно войдя в ещё один цикл сообщений, собственно таймеру нужно вернуть управление обратно в ExecutionThread, собственно суть сброса таймера в том чтобы повторно не входить в ExecutionThread лишний раз, а только тогда когда одна из winapi функций захотела устроить анархию (в виде ещё одного вложенного цикла сообщений)
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
Ты перемудрил как мне кажется
источник

КЮ

Кирилл Юркин in pro.graphon (and gamedev)
glGetString(GL_EXTENSIONS) на версии 3.3 не работает или это я криворукий?
источник

d

disba1ancer in pro.graphon (and gamedev)
Кирилл Юркин
glGetString(GL_EXTENSIONS) на версии 3.3 не работает или это я криворукий?
вроде как не работает
источник