问题描述
此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
。在几乎所有情况下,它什么都不做,返回S_OK
,或者什么也不做,返回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。