向下铸造ID3D11Texture2D

时间:2014-08-25 20:33:11

标签: 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);

2 个答案:

答案 0 :(得分:1)

由于ID3D11Texture2D是一个COM接口,您应该使用QueryInterface来获取对象可能支持的其他接口。像这样:

HRESULT hr = resource->QueryInterface(IID_ID3D11Texture2D, (void **) &tex2d);
if (FAILED(hr)) {
    // handle failure here.
}

注意,如果resource指向的对象没有实现ID3D11Texture2D接口,那么它仍然可能失败,也就是说,它不是2D纹理资源。

严格来说,你也应该使用QueryInterface来&#34;向上投射&#34; ID3D11Texture2D接口与ID3D11Resource接口。 COM并不要求如果对象实现派生接口,它也实现基接口。然而,向上转换应该适用于任何Direct3D COM接口。

答案 1 :(得分:0)

如果你知道它是什么类型的资源,那么使用Queryinterface是不必要的。

ID3D11Texture2D* ptx = NULL;
resource->GetResource(reinterpret_cast<ID3D11Resource**>(&ptx));

虽然rviews包含了我需要的各种类型的查询。