จากรูปลักษณ์ของมันตอนนี้แต่ละ glSet ต้องรวม glBind (บางอย่าง) ไว้ข้างใน
ไม่แน่นอน มันเป็นวิธีอื่น ๆ ตามที่อธิบายไว้หลายย่อหน้าด้านล่าง
แม้ว่าจะเป็นจริงโปรดจำไว้ว่าคำสั่ง GL จากแอปไคลเอ็นต์ไปยังเซิร์ฟเวอร์ GL (ไดรเวอร์ aka) มีค่าใช้จ่ายในการจัดส่งจำนวนมากเมื่อเทียบกับการเรียกใช้ฟังก์ชันปกติ แม้ว่าเราจะสมมติว่าฟังก์ชั่น DSA เป็นเพียงแค่ล้อมรอบฟังก์ชั่นที่มีอยู่พวกมันกำลังห่อหุ้มที่อยู่ภายในเซิร์ฟเวอร์ GL และด้วยเหตุนี้จึงสามารถมีค่าใช้จ่ายน้อยลง (เล็กน้อย)
ถ้า OpenGL ยังคงเป็นเครื่องสถานะไม่สามารถใช้ประโยชน์จากการเปลี่ยนแปลงแบบสตรีมที่ใช้กับสิ่งใดสิ่งหนึ่งได้
GPU ไม่ใช่เครื่องจักรของรัฐ อินเทอร์เฟซของเครื่องจักรสถานะ GL เป็นการจำลองที่ล้อมรอบไดรเวอร์ DSA เหมือนไม่ใช่วิธีอื่น
การลบเลเยอร์หนึ่ง - เลเยอร์ที่ต้องการการโทรจำนวนมากเกินไปไปยังเซิร์ฟเวอร์ GL - เป็นชัยชนะที่ชัดเจนแม้ว่าจะเป็นเลเยอร์เล็ก ๆ
วิธีการใช้เครื่องรัฐก็ไม่สมเหตุสมผลเมื่อต้องจัดการกับหลายเธรด GL ยังคงแย่มากในกรณีที่ใช้งานนี้ แต่ไดรเวอร์มักใช้เธรดเบื้องหลังและเครื่องสถานะต้องใช้การซิงโครไนซ์เธรดจำนวนมากหรืออัลกอริธึมขนาน / การสร้างเพื่อให้สิ่งต่าง ๆ ทำงานได้อย่างน่าเชื่อถือ
ส่วนขยาย DSA ยังคงดำเนินการต่อในแง่ของการเปลี่ยนแปลงสถานะเนื่องจากเป็นส่วนต่อขยายไปยังเอกสารตามสถานะที่มีอยู่และไม่ใช่ API ใหม่ทั้งหมดดังนั้นจึงต้องพร้อมที่จะเชื่อมต่อกับข้อกำหนด GL ที่มีอยู่ ภาษาและคำศัพท์ของเอกสาร แม้ว่าภาษาที่มีอยู่นั้นค่อนข้างเหมาะสมกับงานของมันในฐานะ API ฮาร์ดแวร์กราฟิกที่ทันสมัย
โปรดอธิบายเหตุผลเบื้องหลังและข้อดีของ DSA ใหม่
เหตุผลที่ใหญ่ที่สุดคือวิธีเก่าคือความเจ็บปวด มันทำให้ยากมากในการเขียนไลบรารีเข้าด้วยกันซึ่งแต่ละครั้งอาจแก้ไขหรือพึ่งพาสถานะ GL มันทำให้มันยากที่จะห่อ GL API อย่างมีประสิทธิภาพในรูปแบบเชิงวัตถุหรือการทำงานเนื่องจากรากการจัดการสถานะขั้นตอนลึกซึ่งทำให้การห่อ API ในภาษาที่ไม่ใช่ C ต่างๆยากและทำให้มันยากที่จะให้ห่ออุปกรณ์กราฟิกที่มีประสิทธิภาพ OpenGL ที่เป็นนามธรรมจาก Direct3D
ที่สองคือค่าใช้จ่าย API ของเครื่องสถานะขั้นตอนตามที่อธิบายไว้ก่อนหน้านี้
ประการที่สามฟังก์ชั่น DSA เปลี่ยนซีแมนติกส์ตามความเหมาะสมจาก API เก่าที่อนุญาตให้ปรับปรุงประสิทธิภาพ สิ่งที่ไม่สามารถเปลี่ยนแปลงได้ก่อนหน้านี้ถูกทำให้ไม่เปลี่ยนรูปแบบเช่นซึ่งจะลบรหัสการเก็บหนังสือจำนวนมากออกจากเซิร์ฟเวอร์ GL แอปพลิเคชันสามารถโทรไปยังฮาร์ดแวร์หรือตรวจสอบได้เร็วขึ้น (หรือในแถบอเมริกาแบบขนาน) เมื่อเซิร์ฟเวอร์ GL ไม่ต้องจัดการกับวัตถุที่ไม่แน่นอน
-
เหตุผลเพิ่มเติมและคำอธิบายจะได้รับในข้อกำหนดส่วนขยาย EXT_direct_state_accessสเปคขยาย
-
การเปลี่ยนแปลงฮาร์ดแวร์ที่เกี่ยวข้องกับการออกแบบ API นั้นค่อนข้างมาก
โปรดจำไว้ว่า OpenGL มีอายุย้อนไปถึงปี 1991 ฮาร์ดแวร์เป้าหมายไม่ใช่กราฟิกการ์ดระดับผู้บริโภค (ที่ไม่มีอยู่) แต่เวิร์คสเตชั่ CAD ขนาดใหญ่และสิ่งที่คล้ายกัน ฮาร์ดแวร์ในยุคนั้นมีซองจดหมายประสิทธิภาพที่แตกต่างจากวันนี้มาก มัลติเธรดนั้นหายากขึ้นรถบัสหน่วยความจำและซีพียูมีช่องว่างความเร็วน้อยกว่าและ GPU ทำอะไรได้มากกว่าการเรนเดอร์สามเหลี่ยมแบบฟังก์ชันคงที่เล็กน้อย
มีการเพิ่มคุณสมบัติฟังก์ชั่นคงที่มากขึ้น มีการเพิ่มโมเดลแสงโหมดพื้นผิวและอื่น ๆ ทั้งหมดซึ่งแต่ละชิ้นต้องการสถานะของตนเอง วิธีการของรัฐที่ใช้งานง่ายนั้นทำงานเมื่อคุณมีสถานะไม่มากนัก เมื่อเพิ่มสถานะมากขึ้นเรื่อย ๆ API ก็เริ่มระเบิดที่ตะเข็บ API นั้นดูน่าอึดอัดมากขึ้น แต่ก็ไม่ได้ห่างจากโหมดฮาร์ดแวร์มากนักเนื่องจากมันใช้สวิตช์สถานะเป็นจำนวนมาก
จากนั้นฮาร์ดแวร์ที่ตั้งโปรแกรมได้มา ฮาร์ดแวร์กลายเป็นโปรแกรมได้มากขึ้นจนถึงตอนนี้ฮาร์ดแวร์รองรับสถานะเพียงเล็กน้อยโปรแกรมที่ผู้ใช้จัดหาและบัฟเฟอร์จำนวนมาก ทุกสภาวะจากยุคก่อนหน้านั้นต้องถูกเลียนแบบเช่นเดียวกับคุณสมบัติคงที่ของฟังก์ชั่นในยุคนั้นที่ถูกจำลองโดยไดรเวอร์
ฮาร์ดแวร์ก็เปลี่ยนไปเป็นแบบขนานมากขึ้นเรื่อย ๆ การออกแบบฮาร์ดแวร์อื่น ๆ ที่จำเป็นนี้ทำให้การเปลี่ยนแปลงสถานะกราฟิกมีราคาแพงมาก ฮาร์ดแวร์ทำงานในบล็อกขนาดใหญ่ของสถานะไม่เปลี่ยนรูป เนื่องจากการเปลี่ยนแปลงเหล่านี้ไดรเวอร์ไม่สามารถใช้แต่ละสถานะเล็กน้อยที่ผู้ใช้ตั้งค่าได้ทันที แต่ต้องทำการแบตช์การเปลี่ยนแปลงโดยอัตโนมัติและใช้เมื่อจำเป็นโดยปริยาย
ฮาร์ดแวร์ที่ทันสมัยทำงานได้ดียิ่งขึ้นจากรุ่น OpenGL คลาสสิก DSA เป็นการเปลี่ยนแปลงเพียงเล็กน้อยที่ต้องการมากกว่า 10 ปีก่อน (สัญญาเดิมเป็นส่วนหนึ่งของ OpenGL 3.0) คล้ายกับสิ่งที่ D3D10 ทำ หลายของฮาร์ดแวร์ที่มีการเปลี่ยนแปลงข้างต้นจำเป็นต้องไปไกลกว่าเพียง DSA เพื่อให้ OpenGL ที่เกี่ยวข้องซึ่งเป็นเหตุผลที่ยังคงส่วนขยายใหญ่มากขึ้นอย่างเห็นได้ชัดว่าการเปลี่ยนรูปแบบ OpenGL ที่มีอยู่ จากนั้นก็มี GLnext API ใหม่ทั้งหมดรวมทั้ง D3D12, Mantle, Metal และอื่น ๆ ไม่ใช่หนึ่งเดียวที่จะทำให้เครื่องสถานะที่ล้าสมัย