Я работаю в DirectX 11 через C ++, и я получаю сообщение об ошибке при создании состояния raserizer. Во-первых, вот код:
// set up rasterizer
D3D11_RASTERIZER_DESC1 rasterizerStateDescription;
::ZeroMemory(&rasterizerStateDescription, sizeof(D3D11_RASTERIZER_DESC1));
rasterizerStateDescription.FillMode = D3D11_FILL_WIREFRAME;
ID3D11RasterizerState1* rasterizerState;
DX::ThrowIfFailed(m_d3dDevice->CreateRasterizerState1(&rasterizerStateDescription, &rasterizerState));
m_d3dContext->RSSetState(rasterizerState);
Установка FillMode там на самом деле не имеет значения — это просто включено, чтобы проиллюстрировать мое использование. Я пытался настроить всех участников, и ни одного из них. В отладчике я вижу, что все остальные члены имеют свои значения по умолчанию.
Ошибка генерируется в CreateRaserizerState1 и является:
First-chance exception at 0x75EC4B32 in my.exe:
Microsoft C++ exception:
Platform::InvalidArgumentException ^ at memory location 0x028DE2CC.
HRESULT:0x80070057
Насколько я могу судить, raserizerStateDescription и rasterizerState являются допустимыми, поэтому мне не ясно, почему я получаю недопустимое исключение argumet здесь.
Закомментирование вызовов CreateRasterizerState1 и RSSetState позволяет приложению нормально работать.
Любые предложения относительно того, как это может быть решено?
Решено. Проблема была в том, что я не указывал DepthClipEnable == true. Поскольку я нацеливаюсь на уровень функций 9.1, DepthClipEnable должно быть истинным, и поскольку я обнулял память, я фактически устанавливал ее в ложь.
Других решений пока нет …