Pergunta

Eu carregar um shader com o seguinte:

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

O que está a tentar carregar um shader e se obtém um erro / aviso ele tenta novamente mais 3 vezes antes de desistir.

Agora eu encontrei quando eu fechar a D3DX aplicação dá-me a seguinte mensagem:

D3DX: VAZAMENTOS memória detectada: 2 afectações não-liberto (486 bytes)

E isso só acontece quando há erros (ou seja, ele vai para o loop). Estou realmente não sei por que isso está acontecendo, alguma idéia?

OK I fixa-lo, foi apenas uma questão de lógica, 'erro' não tem 'libertação' chamado sobre ele na terceira tentativa, portanto, a questão.

Foi útil?

Solução 2

OK I fixa-lo, foi apenas uma questão de lógica, 'erro' não tem 'libertação' chamado sobre ele na terceira tentativa, portanto, a questão.

Outras dicas

Nota:. ID3DXBuffer deve ser libertado mesmo quando a função DX (. Ex D3DXCreateEffectFromFile) não falhou

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top