Seperti yang tercakup dalam dokumentasi, penggemar segitiga tidak didukung di Direct3D 10 atau lebih baru .
Mengapa? Apakah ada kelemahan bawaan untuk bekerja dengan penggemar segitiga?
Seperti yang tercakup dalam dokumentasi, penggemar segitiga tidak didukung di Direct3D 10 atau lebih baru .
Mengapa? Apakah ada kelemahan bawaan untuk bekerja dengan penggemar segitiga?
Jawaban:
Selama lebih dari satu dekade vendor perangkat keras telah mendorong strip segitiga, daftar segitiga diindeks dan strip segitiga diindeks sebagai jenis primitif tercepat untuk digunakan. Mengapa? Strip memiliki lokalitas cache yang lebih baik (menggunakan kembali 2 vert terakhir yang diserahkan daripada harus terus-menerus melompat kembali ke yang pertama) dan pengindeksan memungkinkan cache vertex perangkat keras untuk benar-benar berfungsi, serta lebih efektif untuk menghilangkan duplikat verts.
Jika semua vendor perangkat keras mengatakan "lakukan dengan cara ini dan Anda akan menjadi lebih cepat" maka ada peluang yang cukup bagus bahwa jika Anda melakukannya dengan cara ini Anda sebenarnya akan lebih cepat.
Jadi D3D10 + hanya memformalkan ini; jika itu jalur cepat maka jalur itulah yang akan Anda gunakan dan jalur lain tidak akan ada. Ini sesuai dengan salah satu filosofi desain D3D10 +, yaitu untuk menempatkan Anda di jalur cepat dan membuat Anda tetap di sana.
Saya tidak tahu seberapa besar ini benar-benar mempengaruhi pengembangan, tetapi karena dengan perubahan seperti itu, dikatakan bahwa mereka akan membiarkan pengembang driver menulis driver yang lebih baik. Kompleksitas driver GPU luar biasa tetapi saya tidak yakin apakah perubahan yang tepat ini akan banyak membantu.
Dalam kedua kasus tersebut, Anda dapat mengganti kipas segitiga untuk sebagian besar kebutuhan Anda (seperti rendering poligon cembung) dengan strip, seringkali dengan hasil yang lebih baik.
// 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: lupa menyebutkan - jika Anda perlu mengubah urutan berliku - hanya membalikkan tes di "jika" (== ke! =).
(Pertanyaan khusus ini menjamin jawaban pendapat :)
Secara subyektif, saya akan mengatakan astronotisme arsitekturnya. OpenGLES juga membuang banyak hal untuk membuatnya 'kurang kompleks' sementara sebenarnya hanya mendorong kompleksitas ke masing-masing dan setiap pengembang dengan kode warisan sebagai gantinya.
Tentu saja, bahkan ketika perangkat keras tidak mendukungnya secara alami, itu akan sepele untuk memberikan kompatibilitas dengan orang-orang yang mengurutkan penggemar segitiga dengan mengonversinya menjadi strip atau segitiga.
Run-time WebGL dan semacamnya harus melacak buffer yang divalidasi dan semacamnya sepanjang waktu, dan driver dapat dengan mudah mengatur orang-orang mengirim mereka penggemar meskipun mereka tidak mendukungnya.
Jadi seluruh membuang FFP dan semacamnya hanyalah gangguan besar IMO.