Size: a a a

pro.graphon (and gamedev)

2020 February 19

ДВ

Дмитрий Воеводин in pro.graphon (and gamedev)
кароч хз что с этим делать
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
Anton Vertver
а все благодаря D3D11
У меня и на OGL всё нормально ресайзается. Причем тут вообще GAPI? Пиши нормально, будет нормально
источник

PS

Pavel Semushin in pro.graphon (and gamedev)
ого сколько участников в чате
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
У меня и на OGL всё нормально ресайзается. Причем тут вообще GAPI? Пиши нормально, будет нормально
скажи нормально каждую итерацию цикла обработки сообщений пересоздавать таймер?
источник

AB

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

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
а зачем его пересоздавать то?
чтобы не создавать в обработчике wm_size или где-то в недрах окна
источник

AB

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

d

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

AB

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

AB

Alexander Busarov in pro.graphon (and gamedev)
WM_TIMER - сообщение с самым низким приоритетом
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
т.е. оно даже ниже WM_PAINT-а
источник

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
а пересоздавать тогда зачем?
bool dse::os::nonLockLoop() {
 MSG msg;
 UINT_PTR timID = SetTimer(NULL, 0, 10, yieldTimer);
 if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
   if (msg.message == WM_QUIT) {
     ExecutionThread::getCurrentThread().exit(msg.wParam);
     return false;
   }
   TranslateMessage(&msg);
   DispatchMessage(&msg);
 }
 KillTimer(NULL, timID);
 return true;
}
у меня вот такая штука? nonLockLoop вызывается в цикле пока она возвращает true
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
кроме того, WM_TIMER не накапливается в очереди, посути это просто флаг в недрах ОС
источник

AB

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

d

disba1ancer in pro.graphon (and gamedev)
Alexander Busarov
кроме того, WM_TIMER не накапливается в очереди, посути это просто флаг в недрах ОС
но мне не нужно чтобы он отработал, если если в этом нету смысла
источник

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)
disba1ancer
всякие ресайзы обходить
я бы вставил в WM_TIMER один единственный вызов InvalidateRect, и пусть он отрабатывает всегда
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
InvalidateRect - просто выставляет флаг окну, что его нужно перерисовать
источник

AB

Alexander Busarov in pro.graphon (and gamedev)
и дальше Get / PeekMessage вытащит WM_PAINT
источник