IDirectDrawSurface7::Blt вернул E_INVALIDARG
Шаг 1:
Image* image = NULL;
image = Bitmap::FromFile(m_lpwFPSImagePath[i], TRUE);
DDSURFACEDESC2 ddsd;
DDCOLORKEY ddck;
ZeroMemory( &ddsd, sizeof( ddsd ) );
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
ddsd.dwWidth = image->GetWidth();;
ddsd.dwHeight = image->GetHeight();
hr = m_pDevice->CreateSurface(&ddsd, &m_pFPSTexture, NULL );
if( hr != DD_OK )
{
if(hr == DDERR_OUTOFVIDEOMEMORY)
{
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |
DDSCAPS_SYSTEMMEMORY;
hr = m_pDevice->CreateSurface(&ddsd, &m_pFPSTexture, NULL );
}
}
Шаг 2:
RECT SrcRect = {0,0, fTexWidth, fTexHeight}; RECT DstRect = {0,0,60,20};
hr = m_pPrimarySurf->Blt(&DstRect,
m_pFPSTexture,&SrcRect,DDBLT_WAIT,NULL);
Примечание: размер изображения: 3170 х 64
m_pPrimarySurf-> Blt (...) вернул E_INVALIDARG . Так почему же? Спасибо!
0 ответов
Со мной тоже было. Я исправил это, изменив тип драйвера. При создании объекта DirectDraw я указал, что следует использовать только программный рендеринг.
LPDIRECTDRAW dd; HRESULT const dd_created = DirectDrawCreate(reinterpret_cast<GUID*>(DDCREATE_EMULATIONONLY), &dd, nullptr);
как указано в документации функции DirectDrawCreate на MSDN. Я запускаю приложение x86 в Windows 10 x64 версии 10.0.18363.1082, внутри VirtualBox 5.2.42_Ubuntu r137960 внутри Ubuntu x64 18.04.5 LTS на ноутбуке Lenovo с графикой Intel® UHD Graphics 620 (WHL GT2).