私は2つのD3D11デバイスを持っていますが、それぞれに独自のコンテキストがありますが、同じアダプタにあります。Direct3D11:デバイス間でテクスチャを共有する:黒いテクスチャ
私は両方のテクスチャを共有しようとしていますが、反対側で受け取ったテクスチャは常に黒です。
HRESULT hr;
// Make a shared texture on device_A/context_A
D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc, sizeof(desc));
desc.Width = 1024;
desc.Height = 1024;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.CPUAccessFlags = 0;
desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
ID3D11Texture2D* copy_tex;
hr = device_A->CreateTexture2D(&desc, NULL, ©_tex);
// Test the texture by filling it with some color
D3D11_RENDER_TARGET_VIEW_DESC rtvd = {};
rtvd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtvd.Texture2D.MipSlice = 0;
ID3D11RenderTargetView* copy_tex_view = 0;
hr = device_A->CreateRenderTargetView(copy_tex, &rtvd, ©_tex_view);
FLOAT clear_color[4] = {1, 0, 0, 1};
context_A->ClearRenderTargetView(copy_tex_view, clear_color);
// Now try to share it to device_B:
IDXGIResource* copy_tex_resource = 0;
hr = copy_tex->QueryInterface(__uuidof(IDXGIResource), (void**)©_tex_resource);
HANDLE copy_tex_shared_handle = 0;
hr = copy_tex_resource->GetSharedHandle(©_tex_shared_handle);
IDXGIResource* copy_tex_resource_mirror = 0;
hr = device_B->OpenSharedResource(copy_tex_shared_handle, __uuidof(ID3D11Texture2D), (void**)©_tex_resource_mirror);
ID3D11Texture2D* copy_tex_mirror = 0;
hr = copy_tex_resource_mirror->QueryInterface(__uuidof(ID3D11Texture2D), (void**)(©_tex_mirror));
ただし、copy_tex_mirror
のテクスチャは常に黒です。
私はHRESULTエラーコードを取得せず、通常はdevice_B/context_Bでcopy_tex_mirrorを使用することもできますが、device_Aに貼り付けたピクセルデータは取得できません。
何か不足していますか?
ありがとうございます!