質問

次のシェーダーをロードします:

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

シェーダーをロードしようとしており、エラー/警告が発生した場合は、あきらめる前にさらに3回再試行します。

今、アプリケーションを閉じると、D3DXから次のメッセージが表示されます。

D3DX:メモリリークの検出:2つの割り当てが解放されていない(486バイト)

そしてこれはエラーがある場合にのみ発生します(つまり、ループに入ります)。私はこれがなぜ起こっているのか本当に分かりません、何かアイデアはありますか?

OK私はそれを修正しましたが、単に論理的な問題でした。3回目の試行で「エラー」に「リリース」が呼び出されなかったため、問題が発生しました。

役に立ちましたか?

解決 2

OK私はそれを修正しましたが、単に論理的な問題でした。3回目の試行で「エラー」に「リリース」が呼び出されなかったため、問題が発生しました。

他のヒント

注:DX関数(例:D3DXCreateEffectFromFile)が失敗しなかった場合でも、ID3DXBufferは解放される必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top