Доброго времени суток.
Есть приложение, в котором реализован 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'е ?
Объясните, мне бестолковому
Заранее благодарен всем за возможную помощь.
Все оказалось просто — попросту не справлялась видяшка — разрешение 1920x1080 все таки, а видяшка оказалась 64 битной