Каково значение семантики и макетов вершин в D3D11?

Какова цель семантики?

если бы у меня был макет вершины, как это:

struct VS_Input
{
float4 position : COLOR;
float4 color : POSITION;
};

Имеет ли значение, что я изменил семантику двух членов?

Если мне нужно отправить Direct3D структуру для каждой вершины, почему он не может просто скопировать мои данные как есть?

Если я предоставлю Direct3D вершину с макетом, который не соответствует макету шейдера, что произойдет? например, если я передам следующую вершину в вышеупомянутый шейдер?

struct MyVertex
{
Vec4 pos;
Vec2 tex;
Vec4 col;
};

В документации D3D сказано, что будет выдано предупреждение, и что мои данные будут «переосмыслены»

Означает ли это «переосмыслено», как в reinterpret_cast<>? Например, мой шейдер попытается использовать координаты текстуры и половину цвета в качестве цвета в шейдере? или он будет искать в моем макете вершин элемент, соответствующий каждой семантике, и перетасовывать ввод в правильные места, чтобы заставить шейдер работать?

И если вышеупомянутое не верно, то почему D3D требует явного расположения вершин?

4

Решение

Семантика используется для привязки ваших вершинных буферов к входам вашего шейдера. В D3D11 у вас есть буферы, которые являются просто частями памяти для хранения данных, шейдеры, которые имеют входную сигнатуру, описывающую ожидаемые входные данные, и входные макеты, которые представляют привязку между буферами и шейдерами и описывают, как данные в ваших буферах должны интерпретироваться , Роль семантики заключается в том, чтобы просто сопоставлять элементы в описании макета буфера с соответствующими входами шейдера, имена не очень важны, если они совпадают.

Вы должны правильно указать макет данных вершин при создании входного объекта макета. Если ваш входной макет не совпадает с фактическим макетом в памяти ваших данных, тогда это будет фактически как использование reinterpret_cast, и вы будете визуализировать мусор. Если ваша семантика правильно совпадает между вашими входными элементами и входными данными шейдера, однако они будут правильно связаны, и такие вещи, как порядок элементов, не будут иметь значения. Это семантика, которая описывает, как элементы данных из буфера вершин должны передаваться на входы шейдера.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector