IDirect3D9Ex::CreateDeviceEx завершается с ошибкой D3DERR_INVALIDCALL только на одной ОС

Это работает на компьютере с Windows 8, но не на компьютере с Windows 7 Embedded.

Вот значения, которые я даю параметрам презентации.

D3DPRESENT_PARAMETERS

Параметры метода следующие.

CreateDeviceEx(0, 
   D3DDEVTYPE_HAL, 
   displayWindow, 
   presentationParams, 
   D3DCREATE_MULTITHREADED | D3DCREATE_FPU_PRESERVE | D3DCREATE_HARDWARE_VERTEXPROCESSING, 
   NULL, 
   &device);

Кто-нибудь знает, почему я получаю D3DERR_INVALIDCALL?

ОБНОВЛЕНИЕ: проблема исчезает, когда я использую D3DMULTISAMPLE_NONE вместо D3DMULTISAMPLE_NONMASKABLE, но это приложение. Я не знаком с Direct3D, чтобы знать, почему это так. Вот код, который отображает пиксели из буфера.

HRESULT D3D9RenderImpl::CaptureDisplayFrame(BYTE* pBuffer, INT* width, INT* height, INT* stride)
{
    CComPtr<IDirect3DSurface9> pTargetSurface;  
    CComPtr<IDirect3DSurface9> pTempSurface;
    HR(m_pDevice->GetRenderTarget(0, &pTargetSurface)); 
    D3DSURFACE_DESC desc;       
    HR(pTargetSurface->GetDesc(&desc)); 
    if(!pBuffer)
    {
        *width = desc.Width;
        *height = desc.Height;
        *stride = desc.Width * 4; // Always ARGB32
        return S_OK;
    }
    HR(m_pDevice->CreateOffscreenPlainSurface(desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &pTempSurface, NULL));               
    HR(m_pDevice->GetRenderTargetData(pTargetSurface, pTempSurface));                    
    D3DLOCKED_RECT d3drect;
    HR(pTempSurface->LockRect(&d3drect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_NOSYSLOCK | D3DLOCK_READONLY));     
    BYTE* pFrame = (BYTE*)d3drect.pBits;
    memcpy(pBuffer, pFrame, desc.Height * d3drect.Pitch);
    return pTempSurface->UnlockRect();
}

person Paul Knopf    schedule 05.10.2015    source источник


Ответы (1)


Я исправил это, включив некоторые параметры 3D в графических свойствах Intel (i7).

person Paul Knopf    schedule 05.10.2015