Question

Je charge un shader avec les éléments suivants:

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;
}

Qui essaie de charger un shader et s'il obtient une erreur / un avertissement, il réessaye encore trois fois avant d'abandonner.

Maintenant, lorsque j'ai fermé l'application, D3DX m'a donné le message suivant:

D3DX: FUITES DE MÉMOIRE DÉTECTÉE: 2 attributions sans licence (486 octets)

et cela se produit UNIQUEMENT lorsqu'il y a des erreurs (c'est-à-dire que cela passe dans la boucle). Je ne sais vraiment pas pourquoi cela se produit, des idées?

OK, je l'ai corrigé, c'était juste un problème de logique. Erreur n'a pas été appelé "release" à la troisième tentative, d'où le problème.

Était-ce utile?

La solution 2

OK, je l'ai corrigé, c'était juste un problème de logique. Erreur n'a pas été appelé "release" à la troisième tentative, d'où le problème.

Autres conseils

Remarque: ID3DXBuffer doit être publié même lorsque la fonction DX (par exemple, D3DXCreateEffectFromFile) n’échoue pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top