2016-02-12 12 views
2

Когда я пытаюсь загрузить результат шейдера из памяти, компилятор говорит: один или несколько аргументов недействительны. Shader компиляции успешно, но кажется, что после D3DCompileFromFile() команда в памяти что-то не так, и по какой-то причине интерфейс по умолчанию не получает правильных значений.DirectX11 E_INVALIDARG Один или несколько аргументов недействительны

ID3DBlob* pBlobFX = NULL; 
ID3DBlob* pErrorBlob = NULL; 
hr = D3DCompileFromFile(str, NULL, NULL, NULL, "fx_5_0", NULL, NULL, &pBlobFX, &pErrorBlob); // OK 
if (FAILED(hr)) 
{ 
    if (pErrorBlob != NULL) 
     OutputDebugStringA((char *)pErrorBlob->GetBufferPointer()); 
    SAFE_RELEASE(pErrorBlob); 
    return hr; 
} 

// Create the effect 
hr = D3DX11CreateEffectFromMemory(pBlobFX->GetBufferPointer(), pBlobFX->GetBufferSize(), 0, pd3dDevice, ppEffect); // Error: E_INVALIDARG One or more arguments are invalid 
+0

Какую версию эффектов вы используете? Если вы используете версию [GitHub] (https://github.com/Microsoft/FX11), она выполняет «D3DX11CompileEffectFromFile'», которая выполняет эти два действия. –

+0

Я исправил его. –

+0

Пожалуйста, поделитесь информацией о том, что необходимо для исправления кода. –

ответ

0

версия legacy DirectX SDK эффектов для Direct3D 11 включена только D3DX11CreateEffectFromMemory для создания эффектов, которые требуются при помощи скомпилирован шейдер блобо, загруженном приложением.

последняя GitHub версия включает в себя другие ожидаемые функции:

  • D3DX11CreateEffectFromFile который загружает скомпилированный двоичный блоб с диска, а затем создает эффект от него.

  • D3DX11CompileEffectFromMemory, который использует API D3DCompile для компиляции файла fx в память, а затем создает эффект от него.

  • D3DX11CompileEffectFromFile, который использует API D3DCompile для компиляции предоставленного файла fx, а затем создает эффект от него.

Использование D3DX11CompileEffectFromFile вместо того, чтобы пытаться сделать это вручную, так как оригинальный плакат попытался это самое простое решение здесь.

Оригинальная библиотека хотела бы настоятельно рекомендовать использовать компиляцию эффектов времени сборки, а не времени исполнения. Учитывая, что основным использованием Effects 11 сегодня является образование разработчиков, это было излишне сложно для новых разработчиков, поэтому версия GitHub теперь включает в себя все четыре возможных варианта создания эффектов.

Примечание: fx_5_0 профиль в HLSL компилятора является устаревшим, и требуется использовать эффекты 11.

+0

Чак я понял правильно?! Я не должен указывать флаг шейдера в функции «fx_5_0» или что? :) –

+0

Я говорю, что вы можете использовать Effects 11, а последний компилятор HLSL по-прежнему поддерживает требуемый профиль '' fx_5_0'', однако * считается устаревшей функцией. См. [Эту тему] (https://fx11.codeplex.com/discussions/450240) для получения дополнительной информации. –

 Смежные вопросы

  • Нет связанных вопросов^_^