Як зазначено в документації, вентилятори трикутника не підтримуються в Direct3D 10 або новіших версіях .
Чому? Чи є притаманні недоліки роботи з вентиляторами трикутника?
Як зазначено в документації, вентилятори трикутника не підтримуються в Direct3D 10 або новіших версіях .
Чому? Чи є притаманні недоліки роботи з вентиляторами трикутника?
Відповіді:
Протягом більш ніж десятиліття постачальники обладнання висувають трикутники, індексовані списки трикутників та індексовані трикутники як найшвидші примітивні типи для використання. Чому? Смуги мають кращу локальність кешу (повторне використання останніх двох версій, поданих замість того, щоб постійно переходити назад до першого), а індексація дозволяє кеш вершин вершин фактично працювати, а також є більш ефективною для усунення дублікатів вертів.
Якщо всі постачальники обладнання говорять "зроби це так, і ти будеш швидше", то є досить хороший шанс, що якщо ти зробиш це таким чином, то насправді станеш швидшим.
Тож D3D10 + просто формалізує це; якщо це швидкий шлях, то це шлях, який ви будете використовувати, а інші шляхи не існуватимуть. Це відповідає одній з філософій дизайну D3D10 +, яка полягає у тому, щоб перевести вас на швидкий шлях і утримати вас там.
Я не знаю, наскільки це насправді впливає на розвиток, але як і при будь-яких подібних змінах, їм сказали, що вони дозволять розробникам драйверів писати кращі драйвери. Складність драйверів GPU вражає, але я не впевнений, чи допоможе ця точна зміна.
У будь-якому випадку можлива заміна вентиляторів трикутника для більшості ваших потреб (наприклад, опуклий багатокутник) на смужки, часто з кращими результатами.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
EDIT: забув згадати - якщо вам потрібно змінити порядок намотування - просто переверніть тест у такому "if" (== to! =).
(Це конкретне запитання вимагає думки відповіді :)
Суб'єктивно, я б сказав, її архітектурний космонавтизм. OpenGLES також викинув багато речей, щоб зробити його «менш складним», а насправді просто підштовхує складність до кожного розробника із застарілим кодом.
Звичайно, навіть коли апаратне забезпечення не підтримує його споконвічно, було б тривіально забезпечити сумісність з людьми, що послідовно розгортають вентилятори трикутника, перетворюючи їх на смужки чи трикутники.
Часи запуску WebGL і такі повинні постійно відслідковувати перевірені буфери та такі, і водії можуть легко керувати людьми, що надсилають їм фанати, незважаючи на те, що вони не підтримують це.
Таким чином, все викидання з FFP і таке - просто велике роздратування IMO.