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 x 64.

m_pPrimarySurf->Blt(...) вернул E_INVALIDARG . Так почему? Спасибо !


person Allen Hong    schedule 26.12.2013    source источник
comment
MSDN ничего не говорит о разрешении последнего параметра как NULL. Вы уверены, что это нормально?   -  person Roger Rowland    schedule 26.12.2013
comment
Итак, можете ли вы дать мне образец значения последнего параметра?   -  person Allen Hong    schedule 26.12.2013
comment
Ну, я не говорю, что быть NULL неправильно, иначе я бы ответил - я просто сравнил ваш вызов с документацией, чтобы понять, почему он может жаловаться на недопустимый аргумент.   -  person Roger Rowland    schedule 26.12.2013
comment
%›_‹% , я не могу не стандартизировать какой параметр неправильный. Я установил значение для последнего значения , но оно тоже не работает.   -  person Allen Hong    schedule 26.12.2013


Ответы (1)


Случилось и со мной. Я исправил это, изменив тип драйвера. Когда я создавал объект 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).

person Marek Knápek    schedule 04.10.2020