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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top