Ычан: [d | b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 27741)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5120 кБ.
  • Ныне 3654 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
No. 27741  
Прив, разрабатываю игру типа Cataclysm, хочу ускорить отрисовку игры в консоли Windows. я использую флаг ENABLE_VIRTUAL_TERMINAL_PROCESSING, чтобы поддерживать escape-последовательности как в эмуляторах терминалов linux. Дело в том, что обычная отрисовка довольно медленная. Даже если я устанавливаю цвет текста через WinAPI, то скорость отрисовки не сильно отличается от скорости вывода символов вместе с escape-последовательностями. у меня появилась идея просто перед отрисовкой склеить все символы вместе и в нужных местах поставить esc-последовательности, чтобы вывести всю строку разом, но это вообще никак не улучшило положение.
Заранее говорю, что я знаю, что можно не отрисовывать всё заново, а просто рисовать в местах, где что-то меняется. проблема в том, что при движении, сдвигается вся карта, так что проще уж сразу все отрисовать, чем тратить время на отличающихся мест.
Надеюсь на ваши советы, хоть и понимаю, что это пиздец какая немного специфичная проблема
No. 27747  
Самый вменяемый способ работать с консолью в виндузе - использовать собтсвенную отрисовку (а там хоть через вулкан).
CMD.EXE это не то чем оно тебе кажется, не трогай его. Даже все индусы МС не смогли сделать из этого костыльного монстра нечто нормальное, лучше не пытайся и пиши сразу свой вывод, будет лучше быстрее надежнее и понятнее чем cmd.exe
No. 27748  
Рекомендую попробовать ConEmu для означенной цѣли.

https://conemu.github.io/
No. 27751  
>>27748
okay mate :cool:
No. 27752  
>>27747
а на линуксе можно и терминал юзать, там он настолько шустрый, что даже есть стирать и перерисовывать всё 60 раз в секунду, то даже мерцаний не будет видно
No. 27807  
80e783b98258868b37f185ff4b97caaa.jpg - (314.12KB, 1075×1518)
27807
>>27741
ENABLE_VIRTUAL_TERMINAL_PROCESSING действительно медленная, но не до невозможности, я делал то же самое и у меня в итоге вышел почти приемлемый для полноэкранной анимации FPS. В моём случае узким местом было формирование строки, то есть, буквально, формирование и копирование RGB-циферок стандартными функциями. Проверь, не так ли это в твоём случае, то есть сколько раз в секунду ты можешь хотя бы сформировать строку без её вывода. Если проблема действительно в этом, то предвыдели буфер по максимуму, то есть столько, сколько понадобится в худшем случае — для смены обоих цветов в каждой ячейке экрана, и заполняй его руками без аллокаций, то есть заноси буквы через buf[pos++] = '[' и цифры компонентов RGB-цветов через buf[pos++] = c / 10 % 10.

И да, содержимое всего экрана ты должен вывести в один вызов. Это не только быстрее, но и выполняется без мерцания, разрывов, и подобных артефактов, в отличие от вывода построчно или попиксельно.

И да, вывод всего прямоугольника через WriteConsoleOutput намного быстрее, если тебя устраивают 16 цветов. А то судя по скриншоту, устраивают, а я растеоретизировался. :D
Удалить сообщение []
Пароль  
[Mod]