Bagaimana cara Windows Aero mencegah robekannya layar?

14

Ketika Windows Aero aktif, tidak ada layar yang sobek, yang bertentangan dengan saat menggunakan tema Dasar tanpa Aero.

Namun, mengapa gim dengan sinkronisasi vertikal tampaknya memiliki input lag yang jauh lebih besar daripada ketika melakukan sesuatu di desktop? Bahkan sepertinya menyinkronkan game berjendela dengan V-sync off, lebih baik daripada jika mereka menggunakan metode apa pun yang dibangun ke dalam game.

Mengapa dan bagaimana ini terjadi, atau tampaknya terjadi?

Jason Powers Murray
sumber

Jawaban:

8

Sebenarnya, alasan Aero dapat mencegah robeknya tanpa harus memaksakan VSYNC dalam suatu aplikasi adalah karena itu adalah window manager pengomposit. Ini menggambar desktop dan semua jendela secara tidak sinkron sehubungan dengan aplikasi yang sedang berjalan.

Dengan kata lain, ketika Anda mengaktifkan penggabungan pada Windows Vista / 7 ( selalu diaktifkan pada Windows 8), itu akan menggambar semua jendela menggunakan salinan gambar terakhir yang ditukar dari belakang ke depan. Kompositor (Microsoft menyebutnya DWM, Desktop Window Manager ) mengomposit semuanya dengan VSYNC diaktifkan, dan karena menggambar menggunakan salinan dari gambar buffer depan yang ditukar sepenuhnya terakhir untuk setiap jendela, ia tidak pernah menampilkan bingkai yang digambar sebagian. Namun, hal itu memiliki efek samping yang disayangkan yaitu mencegah perangkat lunak yang benar-benar tua yang dirancang untuk menarik ke dalam buffer depan secara eksklusif dari bekerja dengan benar - tetapi perangkat lunak modern tidak melakukan ini.

Singkatnya, DWM menambahkan lapisan perlindungan tambahan terhadap sobekan. Aplikasi yang memungkinkan aplikasi apa pun yang berjalan pada sistem untuk menggambar pada kecepatan terlepas dari kecepatan refresh layar dan masih mencegah robeknya. Pada sistem seperti itu, dalam mode berjendela satu-satunya hal yang memungkinkan VSYNC dalam OpenGL atau Direct3D yang baik adalah sebenarnya memperlambat kembali penggunaan CPU / GPU.

Inilah sebabnya mengapa VSYNC adaptif dibuat, ide tidak ada untuk menghukum aplikasi yang tidak dapat mempertahankan kecepatan refresh layar dengan memaksa mereka menjadi faktor yang lebih rendah dari kecepatan refresh (misalnya 60 Hz -> 30, 20, 15, 10, 12 , 6, 5, 4, 3, 2, 1) tetapi untuk membatasi aplikasi yang menggambar lebih cepat daripada monitor dapat menampilkan gambar dari penggunaan daya CPU / GPU yang berlebihan.

Andon M. Coleman
sumber
5

Dengan Aero diaktifkan, Desktop Window Manager menggunakan buffering ganda :

Fitur Windows Aero menggunakan ekstensif buffering ganda untuk menggambar di layar.

Sumber

Wikipedia mengatakan ini tentang bagaimana ini digunakan dengan V-sync untuk mencegah robeknya layar:

Selama interval pengosongan vertikal, pengemudi memerintahkan kartu video untuk secara cepat menyalin area gambar di luar layar ke area tampilan aktif (buffering ganda), atau memperlakukan kedua area memori sebagai dapat ditampilkan, dan cukup beralih bolak-balik di antara keduanya (halaman membalik).

bwDraco
sumber
6
Penyangga ganda tidak mencegah robeknya, itu mencegah pengguna melihat hal-hal dalam proses yang diberikan. Jika Anda buffered ganda dan Anda melakukan flip halaman di tengah-tengah refresh layar, Anda masih mendapatkan robek.
Wyzard
Tentu saja Anda masih bisa mendapatkan robek jika Anda melakukan buffering ganda yang salah, tetapi intinya adalah bahwa DB dapat digunakan untuk mencegah robeknya.
nitro2k01
3

Penyangga ganda + V-sync pada hasil tanpa sobek. Aero kebetulan menggunakan konfigurasi itu.

DeepSpace101
sumber
2

DWM (teknologi yang memungkinkan efek Aero) membuat semua yang ada di layar Anda sebagai permukaan D3D (yang memungkinkan video tetap diputar di Flip). Teknik rendering ini secara otomatis mencegah robek , meskipun metode permainan harus lebih baik daripada metode DWM generik (bagaimanapun, ini adalah mesin mereka sendiri). Jadi kemungkinan metode permainannya tidak begitu bagus sejak awal, atau tidak dioptimalkan untuk konfigurasi Anda.

Martheen Cahya Paulo
sumber
2
Dengan sendirinya, penggunaan Direct3D tidak mencegah robeknya layar. Ini buffering ganda.
bwDraco