2015-09-25 3 views
0

Я хочу идеально синхронизировать два выхода экрана. Я работаю с DirectX11, два экрана выводятся на одном адаптере видеокарты. В настоящее время мой основной алгоритм:DirectX: Как идеально синхронизировать два выхода

mainloop: 
{ 
    for (int i=0;i<2;i++) 
     render the scene for output i 

    for (int i=0;i<2;i++) 
     swapchain(i)->Present() 
} 

Все работает. Но некоторые пользователи сообщают, что они «чувствуют» оба изображения на двух экранах не совсем синхронизированы. (Я использую точно такие же экраны, и все работает на одном видеоадаптере).

Выполнение двух swapchain->present Я не уверен, что оба синхронизированы. Мой вопрос:

Есть ли способ убедиться, что оба выхода находятся в синхронизации? Например, возможно ли иметь одну только swapchain для двух выходов?

заранее спасибо

Arnaud

ответ

0

Есть несколько вариантов, вы можете попробовать

Вариант 1: Сделайте презентацию немедленно, не дожидаясь синхронизации монитора.

d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 

(это не лучший вариант, но для некоторых приложений это не имеет значения)

Вариант 2: Если счетчик адаптер 2, то вы можете создать 2 полный экран (не в режиме окна) эксклюзивные устройства для рендеринга и презентации. Здесь вы можете синхронизировать мониторы с каждой презентацией кадра.

d3dpp.Windowed = FALSE; 
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; 

Устройство 1:

g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd_0, 
         D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice_0); 

Устройство 2:

g_pD3D->CreateDevice(1, D3DDEVTYPE_HAL, g_hWnd_0, 
          D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice_1); 

Вариант 3: Вы можете попробовать тройной буфер вместо двойной буферизации.

Смежные вопросы