Dari tampilannya sekarang setiap glSet harus menyertakan glBind (sesuatu) di dalamnya
Tidak persis. Sebaliknya, seperti dijelaskan beberapa paragraf di bawah ini.
Bahkan jika itu benar, ingatlah bahwa perintah GL dari aplikasi klien ke server GL (alias driver) memiliki banyak overhead pengiriman dibandingkan dengan panggilan fungsi biasa. Bahkan jika kita mengasumsikan bahwa fungsi DSA hanya pembungkus di sekitar fungsi yang ada, mereka adalah pembungkus yang hidup di dalam server GL dan karenanya dapat memiliki (sedikit) overhead yang lebih sedikit.
jika OpenGL masih menjadi mesin negara tidak dapat mengambil keuntungan dari perubahan streaming yang diterapkan pada sesuatu.
GPU bukan mesin negara. Antarmuka mesin keadaan GL adalah emulasi yang membungkus internal driver seperti DSA, bukan sebaliknya.
Menghapus satu lapisan pembungkus - lapisan yang membutuhkan jumlah panggilan yang berlebihan ke server GL - jelas merupakan kemenangan, meskipun kecil.
Pendekatan mesin negara juga tidak masuk akal ketika berhadapan dengan banyak utas; GL masih mengerikan dalam kasus penggunaan ini tetapi driver sering menggunakan utas di belakang layar, dan mesin negara membutuhkan banyak sinkronisasi utas atau algoritma / konstruksi paralel yang sangat bagus untuk membuat segala sesuatunya bekerja dengan andal.
Perpanjangan DSA melanjutkan frasa operasinya dalam hal perubahan status karena, bagaimanapun juga, ekstensi ke dokumen berbasis negara yang ada dan bukan API yang sama sekali baru, sehingga harus siap untuk menyambungkan ke spesifikasi GL yang ada bahasa dan terminologi dokumen. Bahkan jika bahasa yang ada sangat cocok untuk pekerjaannya sebagai API perangkat keras grafis modern.
Tolong jelaskan alasan di balik dan keuntungan dari DSA baru.
Alasan terbesarnya adalah bahwa cara lama itu menyakitkan. Itu membuatnya sangat sulit untuk menyusun pustaka bersama yang mungkin masing-masing memodifikasi atau mengandalkan keadaan GL. Itu membuatnya sulit untuk secara efisien membungkus API GL dalam gaya berorientasi objek atau fungsional karena akar manajemen keadaan prosedural yang dalam, yang membuat membungkus API dalam berbagai bahasa non-C sulit dan juga membuatnya sulit untuk menyediakan pembungkus perangkat grafis yang efisien OpenGL abstrak itu dari Direct3D.
Kedua adalah overhead API mesin-prosedural, seperti dijelaskan sebelumnya.
Ketiga, fungsi DSA mengubah semantik jika perlu dari API lama yang memungkinkan peningkatan efisiensi. Hal-hal yang sebelumnya bisa berubah dibuat tidak berubah, misalnya, yang menghilangkan banyak kode pembukuan dari server GL. Panggilan oleh aplikasi dapat dikirim ke perangkat keras atau divalidasi lebih cepat (atau dalam mode yang lebih paralel) ketika server GL tidak harus berurusan dengan objek yang bisa berubah.
-
Penjelasan dan penjelasan tambahan diberikan dalam spesifikasi ekstensi EXT_direct_state_access .
-
Perubahan perangkat keras yang relevan dengan desain API agak banyak.
Ingat bahwa OpenGL tanggal kembali ke 1991. Perangkat keras target bukan kartu grafis kelas konsumen (yang tidak ada) tetapi workstation CAD besar dan sejenisnya. Perangkat keras zaman itu memiliki amplop kinerja yang sangat berbeda dari hari ini; multi-threading lebih jarang, bus memori dan CPU memiliki lebih sedikit celah kecepatan, dan GPU melakukan sedikit lebih banyak daripada rendering fungsi segitiga.
Semakin banyak fitur fungsi tetap ditambahkan. Berbagai model pencahayaan, mode tekstur, dll. Semuanya ditambahkan, masing-masing membutuhkan bagian negara mereka masing-masing. Pendekatan sederhana berbasis negara bekerja ketika Anda memiliki beberapa negara. Karena semakin banyak negara ditambahkan, API mulai meledak di jahitannya. API menjadi lebih canggung tetapi tidak menyimpang terlalu jauh dari mode perangkat keras, karena memang didasarkan pada banyak saklar negara.
Kemudian, datanglah perangkat keras yang dapat diprogram. Perangkat keras telah menjadi lebih dan lebih dapat diprogram, ke titik di mana sekarang, perangkat keras mendukung sedikit keadaan, beberapa program yang disediakan pengguna, dan banyak buffer. Semua keadaan dari era sebelumnya harus ditiru, sama seperti semua fitur fungsi tetap dari era yang ditiru oleh driver.
Perangkat keras juga berubah menjadi lebih dan lebih paralel. Ini mengharuskan perancangan ulang perangkat keras lain yang membuat perubahan kondisi grafis sangat mahal. Perangkat keras bekerja di blok besar negara yang tidak dapat diubah. Karena perubahan ini, pengandar tidak bisa hanya menerapkan setiap sedikit keadaan yang ditetapkan pengguna segera, tetapi harus mengelompokkan perubahan secara otomatis dan menerapkannya bila diperlukan secara implisit.
Perangkat keras modern beroperasi lebih jauh dari model OpenGL klasik. DSA adalah satu perubahan kecil yang diperlukan sekitar 10+ tahun yang lalu (awalnya dijanjikan sebagai bagian dari OpenGL 3.0), mirip dengan apa yang D3D10 lakukan. Banyak perubahan perangkat keras di atas membutuhkan jauh lebih dari sekadar DSA untuk menjaga agar OpenGL tetap relevan, itulah sebabnya mengapa ekstensi yang lebih besar yang secara drastis mengubah model OpenGL tersedia . Lalu ada API GLnext baru lengkap ditambah D3D12, Mantel, Logam, dll. Tidak satu pun yang membuat abstraksi mesin keadaan ketinggalan zaman.