2015-10-05 1 views
0

Это работает на машине под управлением Windows 8, но не на машине с Windows 7 Embedded.IDirect3D9Ex :: CreateDeviceEx не работает с D3DERR_INVALIDCALL только на одной ОС

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

D3DPRESENT_PARAMETERS

Параметры для метода заключаются в следующем.

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

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

UPDATE: Проблема исчезает, когда я использую 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(); 
} 

ответ

0

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

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