|
2 / 2 / 0
Регистрация: 14.08.2016
Сообщений: 40
|
||||||
"Разрыв кадра" лечится(?) двойным вызовом BitBlt O_o31.05.2020, 00:27. Показов 1146. Ответов 10
Несколько дней пытаюсь понять почему при задержке основного цикла > 10мс на глаз видно т.н. "разрыв кадра"? И вот игрался и заметил одну особенность, если 2 раза подряд и более вызвать функцию BitBlt, то проблема если и не исчезает то становится едва заметной. Как это вообще объяснить?
Если что вот код программы:
На моем ноуте с 60Гц монитором "разрыв" виден на delay_ms = 20;
0
|
||||||
| 31.05.2020, 00:27 | |
|
Ответы с готовыми решениями:
10
Низкая скорость копирования изображения вызовом функции bitblt Разрыв кадра в играх Разрыв кадра в играх |
|
|
|
| 31.05.2020, 02:49 | |
|
Что-то непонятное... Что собою представляет сей некий
device?Что за странные ClearPixels() и UpdatePixels()?Как обрабатываются WM_PAINT и WM_ERASEBKGND?
0
|
|
|
2 / 2 / 0
Регистрация: 14.08.2016
Сообщений: 40
|
||||||||
| 31.05.2020, 13:43 [ТС] | ||||||||
0
|
||||||||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|||||
| 31.05.2020, 14:31 | |||||
Правильно так: в WM_PAINT контекст создаётся вызовом BeginPaint и освобождается EndPaint обработчик WM_ERASEBKGND делается неактивным, если не требуется встроенная очистка фона окна (для избежания мерцания)
0
|
|||||
|
2 / 2 / 0
Регистрация: 14.08.2016
Сообщений: 40
|
|||||||||
| 31.05.2020, 16:29 [ТС] | |||||||||
BeginPaint и EndPaint как везде пишут целесообразно пользоваться во время обработки WM_PAINT, иначе нужно пользоваться GetDC - ReleaseDC.
0
|
|||||||||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||
| 31.05.2020, 16:52 | ||
|
isrepeat, глобальная переменная - это будет не стек. Можешь убедиться: объяви эти массивы внутри функции InitInstance - программа упадёт из-за нехватки стека (вот это будет именно стек!)
Даже если это был стек - про быстродействие - это тоже ещё надо доказать. И заметишь ли ты это быстродействие вообще Если хочется космические FPS - используй какой-нибудь OpenGL или DirectX
1
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2020, 17:03 | ||
|
Это надо делать в отдельном потоке, и чтоб в нём не было ничего лишнего, кроме отрисовки.
0
|
||
|
2 / 2 / 0
Регистрация: 14.08.2016
Сообщений: 40
|
||||||||||||||
| 31.05.2020, 19:05 [ТС] | ||||||||||||||
Добавлено через 15 минут
Но с другой стороны в моей программе проверил время записи в "стековый массив" и в динамический. Во время Debug что там что там уходит около 4[мс], но в релизе на первый уходит около 0 [мс], а на второй все те же 4 [мс].
А вот если Вы про обработку сообщений в потоке, то да, понимаю что надо но пока и так сойдет.
0
|
||||||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2020, 19:08 | ||
|
Делать долгую отрисовку в цикле сообщений, это не то, чтобы слишком "жирно", скорее - слишком тупо.
1
|
||
|
2 / 2 / 0
Регистрация: 14.08.2016
Сообщений: 40
|
||
| 31.05.2020, 19:20 [ТС] | ||
|
0
|
||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 31.05.2020, 19:51 | |
|
isrepeat, не надо заниматься преждевременной тонкой оптимизацией - всё равно не получится. Используй вектор - это экономия времени разработки и нервов, защита от некоторых ошибок управления памятью.
пусть твой проект сначала заработает хотя бы на 1 фпс, но правильно. Вот потом начнёшь профилировать и производить оптимизацию но с большой вероятностью вектор так и останется вектором, время жрётся обычно не его наличием, а совсем другими местами алгоритма
0
|
|
| 31.05.2020, 19:51 | |
|
Помогаю со студенческими работами здесь
11
Разрыв кадра при не ограниченом фпс
Object Inspector O_o direct.h not found o_O Активация windows O_o Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
/ / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров)
. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|