繁体   English   中英

下铸ID3D11Texture2D

[英]Down Casting ID3D11Texture2D

根据文档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接口,因此应使用QueryInterface获取该对象可能支持的其他接口。 像这样:

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

请注意,如果resource指向的对象未实现ID3D11Texture2D接口,即它不是2D纹理资源,则仍然会失败。

严格来说,您还应该使用QueryInterface将“ ID3D11Texture2D接口“升级”到ID3D11Resource接口。 COM不需要,如果一个对象实现一个派生的接口,它也将实现基本的接口。 但是,向上转换应可与任何Direct3D COM接口一起使用。

如果您知道资源是什么类型,则不需要使用Queryinterface。

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

虽然如果rviews包含各种类型的查询,则我需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM