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).

Другие вопросы по тегам