Я загружаю шейдер со следующим:
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 байт)
, и это ТОЛЬКО происходит, когда есть ошибки (то есть это входит в цикл). Я действительно не уверен, почему это происходит, какие-нибудь идеи?
ОК. Я исправил это, это была просто логическая проблема, у «ошибки» не было вызова «релиз» с третьей попытки, следовательно, проблема.