Как отправить информацию об эффекте HLSL в DirectX 10? - PullRequest
0 голосов
/ 29 мая 2010

Я хотел бы отправить вектор моего вида в переменную ID3D10Effect для расчета зеркального освещения.Как отправить вектор или даже просто скалярные значения в HLSL из работающей программы DirectX?Я хочу сделать что-то вроде

render() {
   //do transformations
   D3DXMatrix view = camera->getViewMatrix();
   basicEffect.setVariable(viewVector, view);
   //render stuff
}

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Используйте GetVariableByName , чтобы получить интерфейс к именованной переменной в HLSL. Вызовите AsVector (обратите внимание, что документация на данный момент неверна. Он возвращает указатель!) На возвращенном интерфейсе, чтобы получить интерфейс векторной переменной, а затем вызовите SetFloatVector .

1 голос
/ 02 июня 2010

По вашему эффекту у вас должно быть что-то вроде:

cbuffer {
    float4x4 viewMatrix;
}

Затем в вашей функции рендеринга, до связывания эффекта:

D3DXMatrix view = camera->getViewMatrix();
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view);

Как и в большинстве описателей атрибутов эффекта, я бы предложил «кэшировать» указатель на переменную. Хранение матричной переменной в другом указателе за пределами цикла рендеринга, например:

ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix();

И тогда установка переменной превращается в:

vmViewMatrix->SetMatrix((float*) &view);
...