根据文档http://msdn.microsoft.com/en-us/library/windows/desktop/ff476635(v=vs.85).aspx
ID3D11Texture2D 继承自 ID3D11Resource。
我尝试了以下但它给出了 std:non-rtti 异常。
ID3D11Texture2D *tex2d = dynamic_cast<ID3D11Texture2D*>(resource);
最佳答案
由于 ID3D11Texture2D
是一个 COM 接口(interface),您应该使用 QueryInterface
来获取该对象可能支持的其他接口(interface)。像这样:
HRESULT hr = resource->QueryInterface(IID_ID3D11Texture2D, (void **) &tex2d);
if (FAILED(hr)) {
// handle failure here.
}
请注意,如果 resource
指向的对象未实现 ID3D11Texture2D
接口(interface),即它不是 2D 纹理资源,这仍然会失败。
严格来说,您还应该使用 QueryInterface
将 ID3D11Texture2D
接口(interface)“向上转换”为 ID3D11Resource
接口(interface)。 COM 不要求如果一个对象实现派生接口(interface)它也实现基接口(interface)。然而向上转换应该适用于任何 Direct3D COM 接口(interface)。
关于c++ - 向下类型转换 ID3D11Texture2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493929/