Pregunta

Carga un shader con lo siguiente:

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

Lo que está intentando cargar un sombreado y si recibe un error / advertencia, lo intenta de nuevo 3 veces más antes de rendirse.

Ahora, cuando cerré la aplicación, D3DX me da el siguiente mensaje:

D3DX: FUGAS DE MEMORIA DETECTADAS: 2 asignaciones no liberadas (486 bytes)

y esto SOLAMENTE sucede cuando hay errores (es decir, entra en el bucle). Realmente no estoy seguro de por qué sucede esto, ¿alguna idea?

OK, lo arreglé, era solo un problema de lógica, 'error' no tenía 'release' en el tercer intento, por lo tanto, el problema.

¿Fue útil?

Solución 2

OK, lo arreglé, era solo un problema de lógica, 'error' no tenía 'release' en el tercer intento, por lo tanto, el problema.

Otros consejos

Nota: ID3DXBuffer debe liberarse incluso cuando la función DX (por ejemplo, D3DXCreateEffectFromFile) no ha fallado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top