Мне нужна помощь при загрузке поверхности из файла - PullRequest
0 голосов
/ 24 октября 2019

Я занимаюсь разработкой 2D-игры, и мне нужно загрузить поверхность с помощью функции D3DXLoadSurfaceFromFile (), но она выдает ошибку. Ошибка D3DXERR_INVALIDDATA

Я попытался решить проблему, переименовав изображениеНапример, вместо «grass.bmp» я изменил его на «C: \ grass.bmp»

    LPDIRECT3DDEVICE9 lpDevice = nullptr;

D3DPRESENT_PARAMETERS sPresentParameters = {};

sPresentParameters.Windowed = TRUE;
sPresentParameters.SwapEffect = D3DSWAPEFFECT::D3DSWAPEFFECT_DISCARD;
sPresentParameters.BackBufferFormat = D3DFORMAT::D3DFMT_UNKNOWN;
sPresentParameters.BackBufferCount = 1;
sPresentParameters.BackBufferHeight = nClientAreaHeight; // 600
sPresentParameters.BackBufferWidth = nClientAreaWidth; //800
sPresentParameters.hDeviceWindow = hWindow;

lpDirect3D9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE::D3DDEVTYPE_HAL, hWindow, D3DCREATE_HARDWARE_VERTEXPROCESSING , &sPresentParameters, &lpDevice);

IDirect3DSurface9* lpSurface = nullptr;
IDirect3DSurface9* lpBackBufferSurface = nullptr;

lpDevice->CreateOffscreenPlainSurface(256,256, D3DFORMAT::D3DFMT_UNKNOWN, D3DPOOL::D3DPOOL_DEFAULT,
    &lpSurface, nullptr);

 HRESULT HR = D3DXLoadSurfaceFromFileW(lpSurface, nullptr,nullptr, L"checker_small.bmp",nullptr , D3DX_DEFAULT, 0, nullptr);

 //HRESULT HR = D3DXLoadSurfaceFromResourceW(lpSurface, nullptr, nullptr,(HMODULE)hInstance , MAKEINTRESOURCEW(IDI_SMALL), nullptr, 0, 0, 0);

 if (HR == D3D_OK) {
     MessageBox(hWindow, L"OK", L"OK", MB_OK);
 }
 else if (HR == D3DERR_INVALIDCALL) {
     MessageBoxW(hWindow, L"INVALID CALL", L"INVALID CALL", MB_OK);
 }
 else if (HR == D3DXERR_INVALIDDATA) {
     MessageBoxW(hWindow, L"INVALID DATA", L"INVALID DATA", MB_OK);
 }

while (sMessage.message != WM_QUIT) {
    if (PeekMessageW(&sMessage, nullptr, 0, 0, PM_REMOVE)) {
        TranslateMessage(&sMessage);
        DispatchMessageW(&sMessage);
    }
    else {
        lpDevice->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
        lpDevice->BeginScene();
        lpDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE::D3DBACKBUFFER_TYPE_MONO, &lpBackBufferSurface);
        lpDevice->StretchRect(lpSurface, nullptr, lpBackBufferSurface, nullptr, D3DTEXTUREFILTERTYPE::D3DTEXF_NONE);

        lpDevice->EndScene();
        lpDevice->Present(nullptr, nullptr, nullptr, nullptr);
    }
}

Я ожидаю, что изображение отображается в окне, окно полностью черное //чистый цвет

...