我尝试创建新的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);
DXGI_MAPPED_RECT bitmap2Dmap;
RET_HR(cpdXGISurface->Map(&bitmap2Dmap,DXGI_MAP_READ));
_pTexIn
是输入ID3D11Texture2D。
在CreateTexture2D()
时出现以下错误:
D3D11错误:ID3D11Device :: CreateTexture2D:A D3D11_USAGE_STAGING 无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或 D3D11_RESOURCE_MISC_SHARED。 [STATE_CREATION错误#103: CREATETEXTURE2D_INVALIDMISCflaGS]
以下是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_STAGING (0x00000003) D3D11_USAGE
Bindflags 0x00000008 unsigned int
CPUaccessflags 0x00020000 unsigned int
Miscflags 0x00000002 unsigned int