Наш пользовательский DirectShow Video Renderer использует Direct3D9. Когда он отображается в оконном режиме (охватывающий весь экранный интерфейс) на основном дисплее/мониторе, он хорошо работает с низким потреблением процессора, но когда он отображается на вторичном мониторе, использование процессора (ядра) идет очень высоко из-за DirectX с использованием процессора выполнить передачу между устройствами. Это происходит только в Windows XP. Я создаю Direct3DDevice9 с помощью соответствующего адаптера, по крайней мере, я думаю, что я есть. Сначала я получаю дескриптор монитора для указанного дескриптора окна, а затем ищем адаптер D3D, соответствующий этому монитору, с помощью GetAdapterMonitor(). При перемещении окна и повторной инициализации устройства я вижу, что адаптер изменяется от 0 до 1, как и ожидалось. Есть ли что-то еще, что я должен делать? вот соответствующий код (Delphi).Высокое использование ЦП на вторичном дисплее (оконный режим)
Adapter := D3DADAPTER_DEFAULT;
if (FWnd <> 0) and (FWnd <> INVALID_HANDLE_VALUE) then
begin
monitor := MonitorFromWindow(FWnd, MONITOR_DEFAULTTONEAREST);
for idxAdapter := 0 to D3D.GetAdapterCount - 1 do
if D3D.GetAdapterMonitor(idxAdapter) = monitor then
begin
Adapter := idxAdapter;
Break;
end;
end;
Result := D3D.GetDeviceCaps(Adapter, D3DDEVTYPE_HAL, Caps);
PP.BackBufferCount := 1;
PP.BackBufferFormat := FFormat; // xrgb
PP.BackBufferWidth := FWidth;
PP.BackBufferHeight := FHeight;
PP.Flags := D3DPRESENTFLAG_VIDEO;
PP.PresentationInterval := D3DPRESENT_INTERVAL_ONE;
PP.SwapEffect := D3DSWAPEFFECT_DISCARD;
PP.hDeviceWindow := FWnd;
PP.Windowed := not FFullScreen;
D3D.CreateDevice(Adapter, D3DDEVTYPE_HAL, FWnd, D3DCREATE_MULTITHREADED or D3DCREATE_MIXED_VERTEXPROCESSING, @PP, Device);
Другие игроки и рендеры не имеют этой проблемы. MPC-HC и madVR имели эту проблему, но исправили ее. Глядя на код MPC-HC, я не вижу существенных различий в том, как я это делаю.
Спасибо!
Это не Delphi конкретный, только пример кода, вот почему я не добавил этот тег –
Я почти уверен, что есть «Direct3D на второй вопрос монитора». Но я не мог найти его прямо сейчас. – EMBarbosa
Вы прочитали эту [документацию] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb206364 (v = vs.85) .aspx)? –