c++ - 向下类型转换 ID3D11Texture2D

标签 c++ directx directx-11

根据文档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 纹理资源,这仍然会失败。

严格来说,您还应该使用 QueryInterfaceID3D11Texture2D 接口(interface)“向上转换”为 ID3D11Resource 接口(interface)。 COM 不要求如果一个对象实现派生接口(interface)它也实现基接口(interface)。然而向上转换应该适用于任何 Direct3D COM 接口(interface)。

关于c++ - 向下类型转换 ID3D11Texture2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493929/

相关文章:

c++ - Arduino Uno - serial.read 到位结构

visual-studio-2012 - VisualStudio 是否提供查看纹理的方法?

directx - DX11 三角形列表根本不渲染

c++ - 根据不同大小和类型的另一个 vector 对点 vector 进行排序

c++ - 指向 map 的指针

graphics - 将缓冲区绑定(bind)到虚幻引擎 4 自定义计算着色器

c++ - 为什么 "Warning X4000: use of potentially uninitialized variable"显示了多个常用方法的用法?

c++ - 如何在 DirectX 11 应用程序中提供选择图形适配器的选项?

c++ - c/c++可以在单个线程中进行抢占式多任务处理吗?

c++ - 我可以在记录错误时让 DirectX(任何版本)回调吗?