Bagikan melalui


Presentasi

DirectX 8.0 memformalkan konsep "presentasi" (atau membuat hasil penyajian terlihat oleh pengguna) di API. Sebelumnya, ini dicapai baik dengan membalik halaman dalam mode layar penuh atau dengan blitting dalam mode berjendela. Aplikasi menggunakan Present API baru untuk melakukan membalik layar penuh atau blitting mode berjendela. Namun, mekanisme ini belum terekspos di tingkat DDI. Runtime hanya memetakan Present API ke titik entri DdFlip atau DdBlt DDI tergantung pada mode aplikasi.

DirectX 8.0 telah menambahkan dua bendera blt DirectDraw baru yang diteruskan ke driver sebagai pemberitahuan ketika operasi blt sebenarnya adalah bagian dari Present dan oleh karena itu menandai batas bingkai. Bendera baru ini DDBLT_PRESENTATION dan DDBLT_LAST_PRESENTATION. Dua bendera diperlukan karena kliping dapat mengakibatkan satu panggilan Sajikan memanggil beberapa operasi blt di driver. Dalam hal ini, semua blt yang dipanggil sebagai akibat dari operasi Sekarang memiliki bendera DDBLT_PRESENTATION yang ditetapkan. Namun, hanya blt akhir dari urutan yang digunakan untuk melakukan Sajikan yang memiliki set bit DDBLT_LAST_PRESENTATION. Oleh karena itu, jika blt digunakan untuk mengimplementasikan Panggilan saat ini, driver melihat nol atau lebih blt dengan set bit DDBLT_PRESENTATION diikuti dengan tepat satu blt dengan set bit DDLT_PRESENTATION dan DDBLT_LAST_PRESENTATION. Bendera ini tidak pernah diatur oleh aplikasi. Hanya runtime yang diizinkan untuk meneruskan bendera ini ke blt. Selain itu, bendera ini hanya diteruskan ke driver yang mendukung DDI DirectX 8.0.

Driver hanya diizinkan untuk mengantre maksimal tiga bingkai. Jika driver melihat panggilan blt dengan set DDBLT_PRESENTATION dan sudah memiliki tiga DDBLT_LAST_PRESENTATION blt yang diantrekan, itu harus gagal panggilan dengan DDERR_WASSTILLDRAWING. Runtime mencoba kembali sampai antrean telah dikosongkan dengan cukup.

Jika driver tidak dapat secara efektif menentukan kapan blt DDBLT_LAST_PRESENTATION dalam antrean telah dihentikan, maka driver tidak boleh mengantre bingkai sama sekali. DDBLT_LAST_PRESENTATION harus menyebabkan driver tersebut mengembalikan DDERR_WASSTILLDRAWING sampai akselerator benar-benar selesai, persis seolah-olah aplikasi telah memanggil Kunci pada permukaan sumber sebelum memanggil Blt.

Akhirnya, dalam kasus beberapa aplikasi berjendela yang berjalan secara bersamaan, driver harus menghitung blt presentasi berdasarkan sumber setiap blt, bukan primer, yaitu, driver diizinkan untuk mengantre tiga bingkai per target window/render. Ini menghasilkan performa yang lebih baik.