Il codice perde memoria, sembra provenire da ID3DXBuffer
-
05-07-2019 - |
Domanda
Carico uno shader con il seguente:
ID3DXBuffer* errors = 0;
ID3DXEffect* effect = 0;
HR(D3DXCreateEffectFromFile(
gd3dDevice, L"Shader.fx", 0, 0,
D3DXSHADER_DEBUG|D3DXSHADER_SKIPOPTIMIZATION,
0, &effect, &errors));
for (int i = 0; i < 3; i++) {
if(errors) {
errors->Release();
if (effect)
effect->Release();
errors = 0;
HR(D3DXCreateEffectFromFile(gd3dDevice, L"Shader.fx",
0, 0, D3DXSHADER_DEBUG, 0, effect, &errors));
}
else
break;
}
Che sta tentando di caricare uno shader e se riceve un errore / avviso riprova ancora 3 volte prima di arrendersi.
Ora ho trovato quando chiudo l'applicazione D3DX mi dà il seguente messaggio:
D3DX: PERDITE DI MEMORIA RILEVATE: 2 allocazioni non liberate (486 byte)
e questo si verifica SOLO quando ci sono errori (ovvero va nel loop). Non sono davvero sicuro del perché questo stia accadendo, qualche idea?
OK, l'ho risolto, era solo un problema logico, "errore" non aveva "rilascio" chiamato al terzo tentativo, quindi il problema.
Soluzione 2
OK, l'ho risolto, era solo un problema logico, "errore" non aveva "rilascio" chiamato al terzo tentativo, quindi il problema.
Altri suggerimenti
Nota: ID3DXBuffer dovrebbe essere rilasciato anche quando la funzione DX (es. D3DXCreateEffectFromFile) non ha fallito.