#directx
#directx
Вопрос:
Я хочу отобразить два поля, которые меняют цвет в одно и то же время. Я использую DirectX и измеряю, когда они меняют цвет, с помощью фоторезистора, подключенного к экрану (измеряет изменение яркости).
Два поля меняются с черного на белый каждые 200 мс. Они должны меняться одновременно, но я измеряю задержки в 0-20 мс. Есть ли какая-либо возможность принудительно отображать DirectX в одно и то же время?
OnTimer_Elapsed(Object source, System.Timers.ElapsedEventArgs e)
{
if (i/2==1)
clr=clrWhite
else
clr=clrBlack
i ;
d2dRenderTarget.BeginDraw();
d2dRenderTarget.Clear(clrTrans);
d2dRenderTarget.DrawRectangle(rect1, clr);
d2dRenderTarget.FillRectangle(rect1, clr);
d2dRenderTarget.DrawRectangle(rect2, clr);
d2dRenderTarget.FillRectangle(rect2, clr);
d2dRenderTarget.EndDraw();
sc1.Present(1, PresentFlags.None);
}
Это цепочка обмена
sc1= new SwapChainDescription()
{
BufferCount = 1,
Flags = SwapChainFlags.None,
IsWindowed = true,
ModeDescription = new ModeDescription(
this.ClientSize.Width,
this.ClientSize.Height,
new Rational(60, 1),
Format.R8G8B8A8_UNorm),
OutputHandle = frm.Handle,
SampleDescription = new SampleDescription(1, 0),
SwapEffect = SwapEffect.Discard,
Usage = Usage.RenderTargetOutput
};
Комментарии:
1. Включена ли у вас vsync? Расположены ли блоки рядом или один над другим? (Я подозреваю, что вы измеряете обновление строки сканирования вашего монитора, а не что-либо, связанное с directx)
2. Одно поле находится в середине экрана, другое в правом нижнем углу. Как мне включить vsync?
3. Я использую Present(1, PresentFlags.None). Это vsync, верно?
4. Я считаю, что это vsync, да. Если поля расположены рядом, исчезает / уменьшается задержка?
5. Каковы значения задержки монитора и задержки фоторезистора? 20 мс кажется нормальной задержкой для типичной панели IPS.