Не удается создать устройство DirectX на удаленном рабочем столе - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть приложение, которое использует DirectX для захвата экрана. Приложение отлично работает локально, однако, когда я запускаю его через сеанс удаленного рабочего стола, функция IDirect3D9 :: CreateDevice завершается ошибкой:

    d3dpp.Windowed=WINDOW_MODE;
    d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    d3dpp.BackBufferFormat=ddm.Format;
    d3dpp.BackBufferHeight=nDisplayHeight=gScreenRect.bottom =ddm.Height;
    d3dpp.BackBufferWidth=nDisplayWidth=gScreenRect.right =ddm.Width;
    d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
    d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow=hWnd;
    d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
    d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;

    if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_REF,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING ,&d3dpp,&g_pd3dDevice)))
    {
        ErrorMessage("Unable to Create Device");
        return E_FAIL;
    }

Я использую Windows 7 для доступа к Windows Server 2008 R2 с RDP.

Что именно здесь не так? Я читал, что можно использовать Direct3D через RDP.

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

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

Так что ваша родная видеокарта / драйвер вообще не задействована.RDPDD - это очень минималистичный драйвер «кадрового буфера», он вообще не поддерживает Direct3D / DirectDraw.

OTOH вы вызываете CreateDevice с параметром D3DDEVTYPE_REF, который должен работать, даже если у вас нет D3D- совместимая видеокарта, D3D должна эмулироваться программно.Следовательно - я не знаю, почему это происходит.Я могу предположить, что проблема может быть в пределах параметров D3DPRESENT_PARAMETERS.Возможно, некоторые из них могут не эмулироваться.

Попробуйте проверить код ошибки, поиграйте с D3DPRESENT_PARAMETERS.

0 голосов
/ 16 ноября 2011

Хаха, проблема была в том, что у меня не были установлены драйверы DirectX. После того, как это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...