从 ID3D11DeviceChild::GetDevice() 方法获取设备
Getting Device from ID3D11DeviceChild::GetDevice() method
我正在尝试 return 我的应用程序中的 ID3D11Device 对象使用此方法:
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicechild-getdevice
更具体地说,我正在使用 returned 顶点缓冲区来尝试获取如下设备:
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);
我想创建一个缓冲区资源,但是发生的事情是,当我尝试使用 returned 设备指针时,它说 "Expression must have a pointer to class type." 现在我对此做了一些研究,据我所知,你必须取消引用指向对象本身的指针。但是,在这种情况下,我不确定该怎么做?我已经在我的 DirectX 代码中创建了一个设备,但出于不同的原因,我想尽可能从顶点缓冲区中获取该设备。
ID3D11Device *device = nullptr;
veBuffer->GetDevice(&device);
// Call device method
device->Release();
备注:
您应该将设备指针传递给可能想要创建资源的代码,或者为您的设备抽象创建一个单例,以便您可以从任何地方调用它,而不是像这样使用 hack。
使用Microsoft::WRL::ComPtr
而不是原始指针来管理引用计数。
我正在尝试 return 我的应用程序中的 ID3D11Device 对象使用此方法:
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicechild-getdevice
更具体地说,我正在使用 returned 顶点缓冲区来尝试获取如下设备:
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);
我想创建一个缓冲区资源,但是发生的事情是,当我尝试使用 returned 设备指针时,它说 "Expression must have a pointer to class type." 现在我对此做了一些研究,据我所知,你必须取消引用指向对象本身的指针。但是,在这种情况下,我不确定该怎么做?我已经在我的 DirectX 代码中创建了一个设备,但出于不同的原因,我想尽可能从顶点缓冲区中获取该设备。
ID3D11Device *device = nullptr;
veBuffer->GetDevice(&device);
// Call device method
device->Release();
备注:
您应该将设备指针传递给可能想要创建资源的代码,或者为您的设备抽象创建一个单例,以便您可以从任何地方调用它,而不是像这样使用 hack。
使用
Microsoft::WRL::ComPtr
而不是原始指针来管理引用计数。