там при загрузке ты должен указывать errorBuffer, посмотри какую ошибку возвращает.
инфа что ниже работает 100%. Я в своем проекте загружал эффект с релизацией вершинного и пиксельного шейдера и все работало
HRESULT hr = D3DXCreateEffectFromFileA(
globals::device, // связанное устройство
fileName, // имя исходного файла
0, // нет объявлений препроцессора
0, // нет интерфейса ID3DXInclude
D3DXSHADER_DEBUG, // флаги компиляции
0, // параметры не используются совместно
&_effect, // возвращает результат
&_errorBuffer); // возвращает строку с ошибками
// Выводим любые сообщения об ошибках
if( _errorBuffer )
{//если валится тут то ошибка при компиляции
::MessageBoxA(0, (char*)_errorBuffer->GetBufferPointer(), 0, 0);
return false;
}
if(FAILED(hr))
{//если валится тут то файл не нашел
::MessageBox(0, L"D3DXCreateEffectFromFile() - FAILED", 0, 0);
return false;
}
return true;
ИМХО но Delphi для DirectX это как для грузчика программирование. Не совместимые вещи. В DX все на указателях, так что юзай C++