gpt4 book ai didi

c++ - 从ID3D11DeviceChild::GetDevice()方法获取设备

转载 作者:行者123 更新时间:2023-12-02 10:00:28 25 4
gpt4 key购买 nike

我正在尝试使用以下方法在我的应用程序中返回ID3D11Device对象:
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicechild-getdevice
更具体地说,我正在使用返回的顶点缓冲区来尝试获取如下所示的设备:

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);
我想创建一个缓冲资源,但是发生的是,当我尝试使用返回的设备指针时,它说 “表达式必须具有指向类类型的指针”。 现在,我对此进行了一些研究,从我收集的数据中,您必须取消对对象本身的指针的引用。但是在这种情况下,我不确定该怎么做?我已经在DirectX代码中创建了一个设备,但是出于各种原因,我想尽可能从顶点缓冲区中获取该设备。

最佳答案

ID3D11Device *device = nullptr;
veBuffer->GetDevice(&device);

// Call device method

device->Release();

笔记:
  • 您应该将设备指针传递给可能想要创建资源的代码,或者为设备抽象创建单例,以便您可以从任何地方调用它,而不是像这样使用hack。
  • 使用Microsoft::WRL::ComPtr而不是原始指针来管理引用计数。
  • 关于c++ - 从ID3D11DeviceChild::GetDevice()方法获取设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62756545/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com