Apa itu Swap Chain? (Direct3D 9)

Rantai pertukaran adalah kumpulan buffer yang digunakan untuk menampilkan bingkai kepada pengguna. Setiap kali aplikasi menyajikan bingkai baru untuk tampilan, buffer pertama dalam rantai pertukaran menggantikan buffer yang ditampilkan. Proses ini disebut pertukaran atau membalik.

Adaptor grafis memegang penunjuk ke permukaan yang mewakili gambar yang ditampilkan pada monitor, yang disebut buffer depan. Saat monitor di-refresh, kartu grafis mengirimkan konten buffer depan ke monitor yang akan ditampilkan. Namun, ini menyebabkan masalah saat merender grafik real-time. Inti dari masalah ini adalah bahwa kecepatan refresh monitor sangat lambat dibandingkan dengan komputer lainnya. Kecepatan refresh umum berkisar dari 60 Hz (60 kali per detik) hingga 100 Hz. Jika aplikasi Anda memperbarui buffer depan saat monitor berada di tengah refresh, gambar yang ditampilkan akan dipotong menjadi dua dengan bagian atas layar yang berisi gambar lama dan bagian bawah yang berisi gambar baru. Masalah ini disebut sebagai merobek.

Direct3D mengimplementasikan dua opsi untuk menghindari merobek:

  • Opsi untuk hanya mengizinkan pembaruan monitor pada operasi pelacakan ulang vertikal (atau sinkronisasi vertikal). Monitor biasanya menyegarkan gambarnya dengan memindahkan pin cahaya secara horizontal, zigzagging dari kiri atas monitor dan berakhir di kanan bawah. Saat pin cahaya mencapai bagian bawah, monitor akan mengkalibrasi ulang pin cahaya dengan memindahkannya kembali ke kiri atas sehingga proses dapat dimulai lagi. Kalibrasi ulang ini disebut sinkronisasi vertikal. Selama sinkronisasi vertikal, monitor tidak menggambar apa pun, sehingga pembaruan apa pun ke buffer depan tidak akan terlihat sampai monitor mulai menggambar lagi. Sinkronisasi vertikal relatif lambat; namun, tidak cukup lambat untuk merender adegan yang kompleks saat menunggu. Apa yang diperlukan untuk menghindari merobek dan dapat merender adegan kompleks adalah proses yang disebut buffering kembali.
  • Opsi untuk menggunakan teknik yang disebut buffering kembali. Buffering kembali adalah proses menggambar adegan ke permukaan di luar layar, yang disebut buffer belakang. Perhatikan bahwa permukaan apa pun selain buffer depan disebut permukaan di luar layar karena tidak pernah secara langsung dilihat oleh monitor. Dengan menggunakan buffer belakang, aplikasi memiliki kebebasan untuk merender adegan setiap kali sistem menganggur (yaitu, tidak ada pesan jendela yang menunggu) tanpa harus mempertimbangkan kecepatan refresh monitor. Buffering kembali membawa komplikasi tambahan tentang bagaimana dan kapan harus memindahkan buffer belakang ke buffer depan.

Proses memindahkan buffer belakang ke buffer depan disebut permukaan membalik. Karena kartu grafis hanya menggunakan pointer ke permukaan untuk mewakili buffer depan, perubahan pointer sederhana adalah semua yang diperlukan untuk mengatur buffer belakang ke buffer depan. Ketika aplikasi meminta Direct3D untuk menyajikan buffer belakang ke buffer depan, Direct3D hanya "membalik" dua pointer permukaan. Hasilnya adalah bahwa buffer belakang sekarang menjadi buffer depan baru, dan buffer depan lama adalah buffer belakang baru. Permukaan dipanggil setiap kali aplikasi meminta perangkat Direct3D untuk menyajikan buffer belakang; namun, Direct3D dapat diatur untuk mengantre permintaan hingga sinkronisasi vertikal terjadi. Opsi ini disebut sebagai interval presentasi perangkat Direct3D. Perhatikan bahwa data di buffer back baru mungkin tidak dapat digunakan kembali, tergantung pada bagaimana aplikasi menentukan bagaimana Direct3D harus menangani pembalikkan permukaan. Surface flipping adalah kunci dalam perangkat lunak multimedia, animasi, dan game; ini setara dengan cara Anda dapat melakukan animasi dengan bantalan kertas. Pada setiap halaman, artis sedikit mengubah gambar, sehingga ketika Anda membalik dengan cepat di antara lembar, gambar tampak animasi.

Permukaan Direct3D

Membalik Permukaan (Direct3D 9)