Как отправить информацию об эффекте HLSL в DirectX 10?
Я хотел бы отправить мой вектор представления в переменную ID3D10Effect для вычисления зеркального освещения. Как отправить вектор или даже просто скалярные значения в HLSL из запущенной программы DirectX? Я хочу сделать что-то вроде
render() {
//do transformations
D3DXMatrix view = camera->getViewMatrix();
basicEffect.setVariable(viewVector, view);
//render stuff
}
2 ответа
По вашему мнению, вы должны иметь что-то вроде:
cbuffer {
float4x4 viewMatrix;
}
Затем в вашей функции рендеринга, прежде чем связывать эффект:
D3DXMatrix view = camera->getViewMatrix();
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view);
Как и в большинстве описателей атрибутов эффекта, я бы предложил "кэшировать" указатель на переменную. Хранение матричной переменной в другом указателе вне вашего цикла рендеринга, например:
ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix();
И тогда установка переменной превращается в:
vmViewMatrix->SetMatrix((float*) &view);
Используйте GetVariableByName, чтобы получить интерфейс к именованной переменной в HLSL. Вызовите AsVector (обратите внимание, что документация на данный момент неверна. Он возвращает указатель!) На возвращенном интерфейсе, чтобы получить интерфейс векторной переменной, а затем вызовите SetFloatVector.