[英]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.