Я занимаюсь разработкой 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);
}
}
Я ожидаю, что изображение отображается в окне, окно полностью черное //чистый цвет