Это работает на машине под управлением Windows 8, но не на машине с Windows 7 Embedded.IDirect3D9Ex :: CreateDeviceEx не работает с D3DERR_INVALIDCALL только на одной ОС
Вот значения, которые я даю параметрам представления.
Параметры для метода заключаются в следующем.
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();
}