Отрисовка каркаса некоторых объектов в DirectX11

Мне нужно нарисовать каркас некоторых объектов и твердое тело. Я предполагаю, что вызывать RSSetState для каждого объекта — плохая практика.

Вероятно, я могу разделить объекты на две группы и нарисовать каркасную группу, а затем сплошную группу. Но я не уверен, что это возможно, потому что у меня могут быть другие вещи для рассмотрения.

Может быть, я могу как-то создать индексный буфер для линий и нарисовать каркас с линиями, но мне все еще нужно отбраковывать эти линии, возможно ли это?

rasterDesc.FillMode = D3D11_FILL_SOLID;
...
rasterDesc.FillMode = D3D11_FILL_WIREFRAME;

person Yola    schedule 31.07.2014    source источник
comment
But i'm not sure it is possible because i may have other things to consider. Встречались ли вы с такими другими вещами прямо сейчас? если нет, не переусердствуйте с дизайном, просто попробуйте!   -  person zdd    schedule 01.08.2014
comment
Я предполагаю, что вызов RSSetState для каждого объекта является плохой практикой Может быть, ваше предположение неверно?   -  person Roger Rowland    schedule 01.08.2014


Ответы (1)


Да, это возможно, но это будет пустой тратой времени, потому что, если вы также хотите отбраковку, вы можете включить с ней каркас, так что ваша дополнительная работа и время будут потрачены впустую.

Как указано в MSDN:

В Direct3D 10 состояние устройства сгруппировано в объекты состояния, что значительно снижает стоимость изменений состояния.

Хоть это и для D3D10, но точно так же и в D3D11 (D3D11 был частично оптимизирован). Лучше всего было бы разделить ваши объекты на две группы, как вы сказали, или попытаться сделать как можно больше групп, как вы сказали, что это может быть невозможно.

Дополнительное примечание: вы, вероятно, также устанавливаете свой буфер вершин, индексный буфер и список примитивной топологии (по крайней мере, это то, что я делаю) для каждого кадра, поэтому установка RSSetState в основном одно и то же!

person Rakete1111    schedule 28.08.2014