Какова цель семантики?
если бы у меня был макет вершины, как это:
struct VS_Input
{
float4 position : COLOR;
float4 color : POSITION;
};
Имеет ли значение, что я изменил семантику двух членов?
Если мне нужно отправить Direct3D структуру для каждой вершины, почему он не может просто скопировать мои данные как есть?
Если я предоставлю Direct3D вершину с макетом, который не соответствует макету шейдера, что произойдет? например, если я передам следующую вершину в вышеупомянутый шейдер?
struct MyVertex
{
Vec4 pos;
Vec2 tex;
Vec4 col;
};
В документации D3D сказано, что будет выдано предупреждение, и что мои данные будут «переосмыслены»
Означает ли это «переосмыслено», как в reinterpret_cast<>? Например, мой шейдер попытается использовать координаты текстуры и половину цвета в качестве цвета в шейдере? или он будет искать в моем макете вершин элемент, соответствующий каждой семантике, и перетасовывать ввод в правильные места, чтобы заставить шейдер работать?
И если вышеупомянутое не верно, то почему D3D требует явного расположения вершин?
Семантика используется для привязки ваших вершинных буферов к входам вашего шейдера. В D3D11 у вас есть буферы, которые являются просто частями памяти для хранения данных, шейдеры, которые имеют входную сигнатуру, описывающую ожидаемые входные данные, и входные макеты, которые представляют привязку между буферами и шейдерами и описывают, как данные в ваших буферах должны интерпретироваться , Роль семантики заключается в том, чтобы просто сопоставлять элементы в описании макета буфера с соответствующими входами шейдера, имена не очень важны, если они совпадают.
Вы должны правильно указать макет данных вершин при создании входного объекта макета. Если ваш входной макет не совпадает с фактическим макетом в памяти ваших данных, тогда это будет фактически как использование reinterpret_cast, и вы будете визуализировать мусор. Если ваша семантика правильно совпадает между вашими входными элементами и входными данными шейдера, однако они будут правильно связаны, и такие вещи, как порядок элементов, не будут иметь значения. Это семантика, которая описывает, как элементы данных из буфера вершин должны передаваться на входы шейдера.
Других решений пока нет …