ID3D11DeviceChild::SetPrivateDataInterface 有什么用?

what does ID3D11DeviceChild::SetPrivateDataInterface usage?

这个https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nn-d3d11-id3d11devicechild

中的函数

这是无用的代码,不要看,我只是想让这个网站开心

pContext->IAGetVertexBuffers(0, 1, &veBuffer, &Stride, &veBufferOffset);
if (veBuffer)
veBuffer->GetDesc(&vedesc);

D3D11_BUFFER_DESC bufferDesc;
bufferDesc.Usage = D3D11_USAGE_STAGING;
bufferDesc.ByteWidth = vedesc.ByteWidth;
bufferDesc.BindFlags = 0;
bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
bufferDesc.MiscFlags = 0;

ID3D11Device **pDeviceExtra = nullptr;
veBuffer->GetDevice(pDeviceExtra); //Can I use this to get to the device object?

//Create the buffer.
HRESULT hr = pDeviceExtra->CreateBuffer(&bufferDesc, NULL, &readVB);
assert(hr == S_OK);

pContext->CopyResource(readVB, veBuffer);

我知道这个函数会给设备设置一个未知的接口,但是之后,我该如何使用这个接口呢?这个函数是什么意思?

我尝试在网上搜索,但我找不到任何答案

这个API不适合一般消费。它的存在是出于内部原因,在正常的 Direct3D 编程中,您永远不会使用 ID3D11DeviceChild::SetPrivateDataInterface。在几乎所有情况下,它什么都不做 return S_OK 或什么也不做 return E_NOTIMPL.

可以使用ID3D11DeviceChild::SetPrivateData方法为调试层提供调试名称信息:

static const char c_szName[] = "My name";
hr = pContext->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

否则,您真的不需要使用 ID3D11DeviceChild 界面本身来做任何事情。从它派生接口主要表明它的生命周期与其拥有的 ID3D11Device 实例的生命周期相关联,而不管该对象的引用计数:参见 Microsoft Docs.