Я только начать работать с DirectX, поэтому я получаю эту проблему:Присвоить структуру C++ с переменным HLSL
Я пытаюсь нажать/отправить/назначить на структуру C++ в/в/с переменной HLSL которые имеют одинаковый тип данных со структурой из C++.
В C++:
struct Light
{
Light() {
ZeroMemory(this, sizeof(Light));
}
D3DXVECTOR3 LightPos;
float ID;
};
Light L1;
/.../
ID3D10EffectVariable* L1Var = NULL;
/.../
L1Var = Effect->GetVariableByName("L1")->AsVector();
/.../
L1Var->SetRawValue(&L1, 0, sizeof(Light));
код HLSL:
struct Light {
float3 LightPos;
float ID;
};
Light L1;
Я пытаюсь отправленной структуру из C++ в 'L1' в HLSL, но я не уверен, что с правильностью L1 введите HLSL. Этот код работает, но я также получаю 0 для всех параметров в L1 ... Я не знаю, как это исправить, я google его в течение 5 часов без результата ... PLS помощи.
Благодарим за помощь.
большое спасибо за ответ. Хотелось бы тоже помочь с еще одной вещью? : может помочь мне передать 2D-массив float3 с C++ на hlsl? –
Вы не можете передавать блоки данных произвольной длины в шейдер. Вы должны выбрать максимальный размер и всегда отправлять столько. См. Шейдер для [SkinnedEffect] (https://github.com/Microsoft/DirectXTK/blob/master/Src/Shaders/SkinnedEffect.fx) для примера (см. Массив '' Bones''). Убедитесь, что ваш общий размер буфера поддерживается вашим целевым [уровнем аппаратных средств Direct3D] (https://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx). –