Ich benutze Effect Framework in meiner Demo.Kann den ID3DX11Effect-Zeiger nicht freigeben?
hier sind meine defination in Header-Datei
ID3D11Buffer* m_pVertexBuffer;
ID3D11Buffer* m_pIndexBuffer;
ID3D11InputLayout* m_pInputLayout;
ID3DX11Effect* m_pFx;
ID3DX11EffectTechnique* m_pTechnique;
ID3DX11EffectMatrixVariable* m_pFxWorldViewProj;
ich sie freisetzen, wie
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();
}
dann folgen betreibe ich die Demo, wenn ich die Demo-Fenster zu schließen, gibt es ein Fehler, was bedeutet, dass HillsDemo nicht mehr funktioniert.Warum? Dann lösche ich die Zeile if (m_pFx) m_pFx->Release();
, es gibt keinen Fehler. Also ist die Freigabe der m_pFx
den Fehler machen?
ich die Dokumente von Effect11 sehen https://github.com/Microsoft/FX11/wiki/Effects-11, gibt es auf dem Dokument:
Folgende Typen werden nun von IUnknown abgeleitet: ID3DX11EffectType, ID3DX11EffectVariable, I3DX11EffectPass, ID3DX11EffectTechnique, ID3DX11EffectGroup. Beachten Sie, dass diese Objekte den standardmäßigen COM-Referenzzählregeln nicht folgen und dass sie freigegeben werden, wenn der übergeordnete ID3DX11Effect freigegeben wird. Dies dient hauptsächlich dazu, die Verwendung von Effects 11 aus verwalteten Sprachen zu vereinfachen.
Bedeutet es, dass ich nur die m_pFx
freigeben sollte anstatt beide m_pFx
und m_pTechnique
freizugeben? Irgendwelche Ideen?
danke, ist kein Fehler, wenn ich ComPtr verwenden. Aber wenn ich einen rohen Zeiger verwende, ist das Problem immer noch nicht gelöst, solange ich den m_pFx freigebe. Es ist so verwirrend. – zhangbaochong
Sie müssen zeigen, wie Sie die '' m_pFx'' erstellt –
Ich verwende einfach die 'D3DX11CompileEffectFromFile' -Funktion, genau so: hr = D3DX11CompileEffectFromFile (L" color.fx ", nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, ShaderFlags, 0, m_pd3dDevice, & m_pFx , & errorBlob); ,ist es falsch? – zhangbaochong