Я пытаюсь создать новый ID3D11Texture2D
для сопоставления его с DXGI_MAPPED_RECT
в дальнейшем. Я получаю ID3D11Texture2D
, что у меня нет питания (не может изменить способ создания).
Вот часть кода:
CComPtr<IDXGIResource> cpDXGIResource;
RET_HR_NULL(_pTexIn->QueryInterface(__uuidof(IDXGIResource), (void**)&cpDXGIResource), cpDXGIResource);
HANDLE sharedHandle;
cpDXGIResource->GetSharedHandle(&sharedHandle);
CComPtr<ID3D11Texture2D> cpTexIn;
cpD3D11Device->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&cpTexIn));
D3D11_TEXTURE2D_DESC td;
cpTexIn->GetDesc(&td);
td.Usage = D3D11_USAGE_STAGING;
td.BindFlags = D3D11_BIND_SHADER_RESOURCE;
td.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
CComPtr<ID3D11Texture2D> cpNewTexture;
RET_HR_NULL(cpD3D11Device->CreateTexture2D(&td, NULL, &cpNewTexture), cpNewTexture);
cpD3D11DeviceContext->CopyResource(cpNewTexture, cpTexIn);
CComPtr<IDXGISurface> cpDXGISurface;
RET_HR_NULL(cpNewTexture->QueryInterface(&cpDXGISurface), cpDXGISurface);
D3D11_TEXTURE2D_DESC ntd;
cpNewTexture->GetDesc(&ntd);
DXGI_SURFACE_DESC sd;
cpDXGISurface->GetDesc(&sd);
DXGI_MAPPED_RECT bitmap2Dmap;
RET_HR(cpDXGISurface->Map(&bitmap2Dmap, DXGI_MAP_READ));
_pTexIn
является вход ID3D11Texture2D. Я получаю сообщение об ошибке ниже, пока Map()
:
RET_HR(cpDXGISurface->Map(&bitmap2Dmap, DXGI_MAP_READ));
DXGI ERROR: IDXGISurface :: Map: Этот объект не был создан с флагами CPUAccess, которые разрешают доступ к ЦП. [РАЗНАЯ ОШИБКА # 42:] Исключение, выданное в 0x76734192 в testhost.x86.exe: исключение Microsoft C ++: _com_error в расположении памяти 0x0716E134. Нить 0x26bc вышла с кодом 0 (0x0).
НО! , на самом деле у меня D3D11_CPU_ACCESS_READ
установлено на cpNewTexture
. Смотрите вывод ntd и sd ниже:
Вот содержимое ntd
и sd
:
ntd {Width=0x00000354 Height=0x000001e0 MipLevels=0x00000001 ...} D3D11_TEXTURE2D_DESC
Width 0x00000354 unsigned int
Height 0x000001e0 unsigned int
MipLevels 0x00000001 unsigned int
ArraySize 0x00000001 unsigned int
Format DXGI_FORMAT_B8G8R8A8_UNORM (0x00000057) DXGI_FORMAT
SampleDesc {Count=0x00000001 Quality=0x00000000 } DXGI_SAMPLE_DESC
Usage D3D11_USAGE_DEFAULT (0x00000000) D3D11_USAGE
BindFlags 0x00000008 unsigned int
CPUAccessFlags 0x00020000 unsigned int
MiscFlags 0x00000002 unsigned int
sd {Width=0x00000354 Height=0x000001e0 Format=DXGI_FORMAT_B8G8R8A8_UNORM (0x00000057) ...} DXGI_SURFACE_DESC
Width 0x00000354 unsigned int
Height 0x000001e0 unsigned int
Format DXGI_FORMAT_B8G8R8A8_UNORM (0x00000057) DXGI_FORMAT
SampleDesc {Count=0x00000001 Quality=0x00000000 } DXGI_SAMPLE_DESC