首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能释放ID3DX11Effect指针?

不能释放ID3DX11Effect指针?
EN

Stack Overflow用户
提问于 2016-05-29 11:07:49
回答 1查看 202关注 0票数 1

我在演示中使用了效果框架。

以下是我在头文件中的定义

代码语言:javascript
复制
    ID3D11Buffer*                   m_pVertexBuffer;
    ID3D11Buffer*                   m_pIndexBuffer;
    ID3D11InputLayout*              m_pInputLayout;

    ID3DX11Effect*                  m_pFx;
    ID3DX11EffectTechnique*         m_pTechnique;
    ID3DX11EffectMatrixVariable*    m_pFxWorldViewProj;

我按以下方式发布它们

代码语言:javascript
复制
void HillsDemo::UnLoadContent()
{
    if (m_pVertexBuffer) m_pVertexBuffer->Release();
    if (m_pIndexBuffer) m_pIndexBuffer->Release();
    if (m_pInputLayout) m_pInputLayout->Release();
    if (m_pTechnique) m_pTechnique->Release();
    if (m_pFx) m_pFx->Release();
}

然后我运行演示,当我关闭演示窗口时,有一个错误,这意味着HillsDemo已经停止了working.Why?Then,我删除了行if (m_pFx) m_pFx->Release();,没有错误。那么,发布m_pFx会导致错误吗?

我查看Effect11 https://github.com/Microsoft/FX11/wiki/Effects-11的文档,文档上有:

以下类型现在从IUnknown派生出来: ID3DX11EffectType、ID3DX11EffectVariable、I3DX11EffectPass、ID3DX11EffectTechnique、ID3DX11EffectGroup。注意,这些对象不遵循标准的COM引用计数规则,它们是在父ID3DX11Effect发布时释放的。这主要是为了简化来自托管语言的效果11的使用。

这是否意味着我应该只发布m_pFx,而不是同时发布m_pFxm_pTechnique?有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 04:53:32

我假设您使用的是来自GitHub的效果11的最新版本,而不是基于对项目wiki的引用的遗留DirectX SDK副本。

您确实应该考虑使用ComPtr而不是指向COM对象的原始指针。在效果11的情况下,您只需将它们用于ID3DX11Effect实例。您应该坚持ID3DX11EffectTypeID3DX11EffectVariableI3DX11EffectPassID3DX11EffectTechniqueID3DX11EffectGroup的“原始指针”。不要在这些原始指针上调用Release,因为生命周期由ID3DX11Effect控制。

类似于:

代码语言:javascript
复制
Microsoft::WRL::ComPtr<ID3D11Buffer> m_pVertexBuffer;
Microsoft::WRL::ComPtr<ID3D11Buffer> m_pIndexBuffer;
Microsoft::WRL::ComPtr<ID3D11InputLayout> m_pInputLayout;

Microsoft::WRL::ComPtr<ID3DX11Effect> m_pFx;
ID3DX11EffectTechnique* m_pTechnique;
ID3DX11EffectMatrixVariable* m_pFxWorldViewProj;

void HillsDemo::UnLoadContent()
{
    m_pVertexBuffer.Reset();
    m_pIndexBuffer.Reset();
    m_pInputLayout.Reset();
    m_pFx.Reset();
    m_pTechnique = nullptr;
    pFxWorldViewProj = nullptr;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37509124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档