根据文件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);
答案 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包含了我需要的各种类型的查询。