Как отправить информацию об эффекте 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.

Другие вопросы по тегам