Здравствуйте! Как асм программа может точно и без задержек (насколько возможно) определить момент начала и момент окончания экранного рисования, т.е. момент первого и момент последнего изменений экранного содержимого в течение фрейма? Если перерисовывается весь экран, или если перерисовывается несколько пикселов. Речь идет не о моменте записи в видео память, а именно о физических изменениях на экране (например, LCD). Спасибо!
DirectDraw: WaitForVerticalBlank с флагами ждать до: DDWAITVB_BLOCKBEGIN - конца перерисовки экрана DDWAITVB_BLOCKEND - начала перерисовки экрана GetScanLine - возвращает текущую перерисовываемую строку Принцип перерисовки изображения на ЭЛТ и LCD одинаков - сверху вниз построчно, с паузой на "обратный ход луча по кадру" и заданной частотой смены кадров. На некоторых моделях LCD даже хорошо видна черезстрочность обновления изображения, похоже для совместимости электронной начинки видеокарт и самих мониторов с ЭЛТ. Впрочем когда черезстрочность не видно, это не значит что её нет, тут я пока до конца не разобрался
Спасибо, Y_Mur! Можете ли вы ответить: 1.возможно для видеокарты программно устанавливать режим развертки (построчная/черезстрочная)? 2.пауза ("обратный ход") сколько составяет например для 50Гц и для LCD (около миллисекунды...?)? Еще раз спасибо!
Dmitry S 1. Пока сам не разобрался почему черезстрочность иногда видна, иногда нет (мне это тоже любопытно) 2. а это легко измерить (есно приближённо) если засечь по счётчику rdtsc время ожидания WaitForVerticalBlank от конца до начала кадра при разных режимах видеокарты. Дойдут руки - слеплю тестик
Спасибо, Y_Mur! Странно, что черезстрочная развертка вообще используется для LCD: мощности небольшие, ограничений по пропускной способности (как в TV) особых вроде и нет... Для быстро перемещающихся изображений эта развертка даст "гребенку" по контурам... Если появится тестик - интересно будет посмотреть. Я сам, думаю это видно, в этом вопросе не силен... Еще раз спасибо!