Windows Aero ป้องกันการฉีกขาดของหน้าจออย่างไร


14

เมื่อ Windows Aero เปิดอยู่ไม่มีการฉีกขาดหน้าจอใด ๆ เมื่อเทียบกับเมื่อใช้ชุดรูปแบบพื้นฐานที่ไม่มี Aero

ทำไมแม้ว่าเกมที่มีการซิงก์แนวตั้งดูเหมือนจะมีอินพุตล่าช้ามากกว่าเมื่อทำอะไรบางอย่างบนเดสก์ท็อป ดูเหมือนว่าจะซิงค์เกมที่มีหน้าต่างด้วยการปิด V-sync ซึ่งจะดีกว่าหากพวกเขาใช้วิธีการใดก็ตามที่สร้างไว้ในเกม

ทำไมและวิธีนี้เกิดขึ้นหรือดูเหมือนจะเกิดขึ้น?

คำตอบ:


8

จริงๆแล้วเหตุผลที่ Aero สามารถป้องกันการฉีกขาดโดยไม่ต้องบังคับให้ VSYNC เปิดใช้งานในแอปพลิเคชันก็เพราะมันเป็นตัวจัดการหน้าต่างแบบผสม มันดึงเดสก์ท็อปและหน้าต่างทั้งหมดแบบอะซิงโครนัสสำหรับแอปพลิเคชันที่ทำงานอยู่

กล่าวคือเมื่อคุณเปิดใช้งานการคอมโพสิตใน Windows Vista / 7 (มันเปิดใช้งานเสมอใน Windows 8) มันจะวาดหน้าต่างทั้งหมดโดยใช้สำเนาของอิมเมจสุดท้ายที่เปลี่ยนจากหลังไปข้างหน้า ผู้ประพันธ์ (Microsoft เรียกมันว่า DWM, Desktop Window Manager ) คอมโพสิตทุกอย่างที่เปิดใช้งาน VSYNC และเนื่องจากมันวาดโดยใช้สำเนาของภาพบัฟเฟอร์ด้านหน้าแบบเต็มสลับครั้งสุดท้ายสำหรับแต่ละหน้าต่างจะไม่แสดงเฟรมที่วาดบางส่วน อย่างไรก็ตามมันมีผลข้างเคียงที่โชคร้ายของการป้องกันซอฟต์แวร์เก่าที่ออกแบบมาเพื่อดึงลงในบัฟเฟอร์ด้านหน้าจากการทำงานอย่างถูกต้อง แต่ซอฟต์แวร์ที่ทันสมัยไม่ได้ทำเช่นนี้

สรุป DWM เพิ่มชั้นของการป้องกันเพิ่มเติมจากการฉีกขาด หนึ่งที่จะช่วยให้แอปพลิเคชันใด ๆ ที่ทำงานบนระบบวาดในอัตราโดยไม่คำนึงถึงอัตราการรีเฟรชของจอแสดงผลและยังป้องกันการฉีกขาด ในระบบดังกล่าวในโหมดหน้าต่างสิ่งเดียวที่เปิดใช้งาน VSYNC ใน OpenGL หรือ Direct3D นั้นดีสำหรับการใช้งาน CPU / GPU

นี่คือสาเหตุที่การปรับ VSYNC ถูกปรับความคิดที่จะไม่ลงโทษแอปพลิเคชันที่ไม่สามารถรักษาอัตราการรีเฟรชของจอภาพได้โดยบังคับให้อัตราการรีเฟรชต่ำลง (เช่น 60 Hz -> 30, 20, 15, 10, 12 , 6, 5, 4, 3, 2, 1) แต่เพื่อ จำกัด แอปพลิเคชั่นที่วาดเร็วกว่าจอภาพสามารถแสดงภาพจากการใช้พลังงาน CPU / GPU ในปริมาณที่มากเกินไป


5

เมื่อเปิดใช้งาน Aero ตัวจัดการหน้าต่างเดสก์ท็อปจะใช้การบัฟเฟอร์สองครั้ง :

คุณลักษณะ Windows Aero ใช้ประโยชน์จากการบัฟเฟอร์สองครั้งเพื่อวาดบนหน้าจอ

แหล่ง

Wikipediaได้กล่าวถึงวิธีการใช้ V-sync เพื่อป้องกันการฉีกขาดของหน้าจอ:

ระหว่างช่วง blanking แนวตั้งคนขับสั่งให้การ์ดวิดีโอคัดลอกพื้นที่กราฟิกนอกจออย่างรวดเร็วไปยังพื้นที่แสดงผลที่ใช้งาน (บัฟเฟอร์สองครั้ง) หรือปฏิบัติต่อพื้นที่หน่วยความจำทั้งสองให้แสดงได้และเพียงสลับไปมาระหว่างกัน พลิก)


6
การบัฟเฟอร์สองครั้งไม่ได้ป้องกันการฉีกขาด แต่จะป้องกันไม่ให้ผู้ใช้เห็นสิ่งต่าง ๆ ในกระบวนการแสดงผล หากคุณถูกบัฟเฟอร์สองครั้งและคุณพลิกหน้าตรงกลางของการรีเฟรชหน้าจอคุณจะยังคงฉีกขาด
Wyzard

แน่นอนว่าคุณยังสามารถฉีกขาดได้หากคุณทำ double buffering ผิด แต่ประเด็นก็คือฐานข้อมูลสามารถใช้เพื่อป้องกันการฉีกขาด
nitro2k01

3

การบัฟเฟอร์คู่ + V-sync กับผลลัพธ์จะไม่มีการฉีกขาด Aero เกิดขึ้นกับการใช้การกำหนดค่านั้น


2

DWM (เทคโนโลยีที่เปิดใช้เอฟเฟ็กต์ Aero) แสดงทุกสิ่งบนหน้าจอเป็นพื้นผิว D3D (ซึ่งทำให้วิดีโอสามารถเล่นบน Flip ได้) เทคนิคการเรนเดอร์นี้ป้องกันการฉีกขาดโดยอัตโนมัติแม้ว่าวิธีการเล่นเกมควรจะดีกว่าวิธีการทั่วไปของ DWM (เป็นเครื่องมือของพวกเขาเองหลังจากทั้งหมด) ดังนั้นจึงเป็นไปได้ว่าวิธีการเล่นเกมอาจไม่ดีในตอนแรกหรือไม่เหมาะสำหรับการกำหนดค่าของคุณ


2
ด้วยตัวเองการใช้ Direct3D ไม่ได้ป้องกันการฉีกขาดหน้าจอ มันเป็นบัฟเฟอร์สองเท่า
bwDraco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.