Допустим, я создаю два буфера вершин для двух разных сеток.
(I'm assuming creating separate buffers for separate meshes is how it's usually done)
Теперь, скажем, я хочу нарисовать одну из сеток, используя индексный буфер.
Глядя на книгу Практичный рендеринг и вычисления с Direct3D 11 не похоже, что создание индексного буфера каким-либо образом ссылается на буфер вершин, так как же буфер индекса знает (во время сборки ввода), на какой буфер вершин действовать?
Я провел поиск в Google без ответов, что заставляет меня предположить, что в этом есть что-то очевидное, что я упускаю.
Вы правы, индексные буферы не ссылаются на конкретные вершинные буферы. В течение DrawIndexed
активный индексный буфер используется для подачи индексов в активные вершинные буферы (те, которые вы устанавливаете с помощью SetIndexBuffer / SetVertexBuffers).
Действительно, индексные буферы и вершинные буферы полностью независимы.
Индексный буфер будет знать о VertexBuffer во время отрисовки (например, когда оба связаны с конвейером)
Вы можете думать о индексном буфере как о «Таблице подстановки», где вы сохраняете списки или индексы элементов для рисования.
Это также означает, что вы можете прикрепить два полностью «логически не связанных» буфера к конвейеру и нарисовать их, ничто не помешает вам сделать это, но у вас, конечно, будут некоторые странные визуальные результаты.
Разделение обоих имеет много преимуществ, вот несколько примеров: