DirectDraw windowed mode. Моргание кадров.
От: Andrew_P  
Дата: 05.05.04 10:02
Оценка:
Доброго времени суток.

Есть приложение, в котором реализован MultiVMR на основе VMR7, так как VMR9 жутко тормозной. Дефаултного IVMRSurfaceAllocator'a нету, все делается ручками.

Собственно там DirectDraw в windowed режиме + Direct3D для альфа-блендинга и других фитч.

Все нормально, вот только видно как вторичный буфер блинтиться на главную поверхность, т.е. когда кадры перерисовываются. Это здорово заметно, когда кадры очень сильно друг от друга отличаются.

Я так понимаю, надо просто вызывать WaitForVerticalBlank, чтобы синхронизироваться с лучом. Но, нагрузка на процессор вырастает зверски, а эффект нулевой, т.е. отрисовку все равно видно. Я пробовал как с ключиком DDWAITVB_BLOCKBEGIN, так и с ключиком DDWAITVB_BLOCKEND — результат одиннаковый:


while (m_pDirectDraw->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL) == DDERR_WASSTILLDRAWING);


Пробовал следующий вариант:


DWORD dwScanLine;
for (;;)
{
  hr = m_pDirectDraw->GetScanLine(&dwScanLine);

  if (DDERR_VERTICALBLANKINPROGRESS == hr)
     break;

  if (FAILED(hr))
     break;

  if ((LONG)dwScanLine >= m_rcDst.top)
     if ((LONG)dwScanLine <= m_rcDst.bottom)                         
        continue;
  break;
}


Результат тот же.

Может я чего-то не допонимаю? Как то же это реализовано в стандартном VMR'е ?
Объясните, мне бестолковому

Заранее благодарен всем за возможную помощь.
Re: DirectDraw windowed mode. Моргание кадров.
От: Andrew_P  
Дата: 08.05.04 10:45
Оценка:
Все оказалось просто — попросту не справлялась видяшка — разрешение 1920x1080 все таки, а видяшка оказалась 64 битной
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.