1 คะแนน โดย GN⁺ 2024-01-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เรนเดอเรอร์ใหม่ของ GTK

  • มีการเพิ่มเรนเดอเรอร์ใหม่สองตัวสำหรับ GL และ Vulkan ให้กับ GTK
  • เรนเดอเรอร์เหล่านี้ใช้ชื่อเดิมซ้ำ โดยตั้งชื่อว่า "ngl" และ "vulkan"
  • ทั้งสองตัวถูกสร้างจากซอร์สเดียวกัน จึงถูกเรียกว่าเรนเดอเรอร์แบบ "รวมศูนย์" ด้วย

ซอร์สเดียว

  • เรนเดอเรอร์ทั้งสองถูกสร้างจากซอร์สเดียวกัน และออกแบบด้วยโมเดลที่อิงตาม Vulkan API
  • มีชั้น abstraction เพื่อครอบคลุมความแตกต่างระหว่าง Vulkan กับ GL
  • ทำให้สามารถใช้โครงสร้างพื้นฐานร่วมกันได้ เช่น การสำรวจ scene graph, การคงสถานะการแปลง, การแคช texture และ glyph
  • ในอนาคตอาจขยายไปสู่เรนเดอเรอร์ที่อิง Metal บน macOS หรือ DirectX บน Windows ได้

รายละเอียดการใช้งาน

  • เรนเดอเรอร์ GL เดิมใช้ shader ที่เรียบง่าย และพึ่งพาการเรนเดอร์แบบ offscreen สำหรับเนื้อหาที่ซับซ้อน
  • เรนเดอเรอร์แบบรวมศูนย์มี shader แยกตามแต่ละโหนด และใช้ shader ที่ซับซ้อนกว่าเพื่อแปลผลข้อมูลจากบัฟเฟอร์แทนการใช้ offscreen
  • เรนเดอเรอร์แบบรวมศูนย์ยังได้รับการปรับแต่งไม่มากนัก แต่เน้นความถูกต้องและการบำรุงรักษา จึงสามารถจัดการต้นไม้ของ render node ที่หลากหลายได้อย่างแม่นยำกว่า

ฟีเจอร์ใหม่

  • Anti-aliasing: เรนเดอเรอร์ GL เดิมมีปัญหาทำให้รายละเอียดบางส่วนหายไป แต่เรนเดอเรอร์แบบรวมศูนย์ปรับปรุงจุดนี้ด้วย anti-aliasing
  • Fractional scaling: เรนเดอเรอร์แบบรวมศูนย์รองรับการจัดการสเกลแบบเศษส่วนได้อย่างถูกต้อง
  • Gradient แบบอิสระ: เรนเดอเรอร์แบบรวมศูนย์รองรับ gradient ที่มี color stop ได้ไม่จำกัด
  • Dmabufs: เรนเดอเรอร์ Vulkan สามารถสร้าง dmabufs ได้เมื่อสร้าง texture ผ่าน API render_texture

สิ่งที่ควรระวัง

  • ไม่รองรับโหนด glshader อีกต่อไป
  • ตำแหน่งแบบเศษส่วน: เรนเดอเรอร์ใหม่จะวางวัตถุในตำแหน่งที่แม่นยำ
  • ปัญหาไดรเวอร์: เรนเดอเรอร์ใหม่ใช้กราฟิกไดรเวอร์ในรูปแบบใหม่และแตกต่างออกไป จึงอาจเกิดปัญหาได้

เร็วขึ้นหรือไม่?

  • ตอนนี้เรนเดอเรอร์ใหม่ยังไม่ได้เร็วกว่า
  • เรนเดอเรอร์ GL เดิมถูกปรับแต่งมาเพื่อความเร็ว ขณะที่เรนเดอเรอร์ใหม่มอบฟีเจอร์ใหม่และความถูกต้องที่มากขึ้น
  • เรนเดอเรอร์ Vulkan แสดงประสิทธิภาพใกล้เคียงกับเรนเดอเรอร์ GL เดิมในการทดสอบ benchmark แบบไม่เป็นทางการ

ค่าเริ่มต้นใหม่

  • ใน snapshot 4.13.6 ที่ประกาศล่าสุด ได้ตั้งค่าเรนเดอเรอร์ ngl เป็นค่าเริ่มต้นใหม่
  • นี่เป็นมาตรการเชิงทดลอง และหากเกิดปัญหาก็สามารถย้อนกลับไปใช้เรนเดอเรอร์ GL เดิมได้

แผนและความเป็นไปได้ในอนาคต

  • เรนเดอเรอร์ใหม่เป็นพื้นฐานที่ดีสำหรับการทำสีอย่างเหมาะสมรวมถึง HDR, path rendering บน GPU, การเรนเดอร์นอก main thread และการปรับปรุงประสิทธิภาพ

สรุป

  • เรนเดอเรอร์ใหม่นี้มีฟีเจอร์ที่น่าสนใจ และยังมีอีกหลายฟีเจอร์ที่จะถูกเพิ่มเข้ามา
  • มีการขอให้ลองใช้เรนเดอเรอร์ใหม่ และส่งฟีดแบ็กว่าใช้งานได้ดีหรือไม่

GN⁺ มีความเห็นว่า

  • เรนเดอเรอร์ใหม่นี้เป็นพัฒนาการสำคัญที่มอบตัวเลือกการเรนเดอร์ที่แม่นยำและหลากหลายยิ่งขึ้นให้กับนักพัฒนา
  • แนวทางการรวม Vulkan และ GL เข้าด้วยกันมีศักยภาพในการเพิ่มความเข้ากันได้ของการเรนเดอร์บนแพลตฟอร์มที่หลากหลายในอนาคต
  • ความก้าวหน้าทางเทคนิคนี้จะช่วยยกระดับประสบการณ์ผู้ใช้ และเพิ่มคุณภาพด้านภาพของแอปพลิเคชัน

1 ความคิดเห็น

 
GN⁺ 2024-01-30
ความคิดเห็นบน Hacker News
  • ราวปี 2010 เคยมี HTML renderer แบบทดลองที่สามารถสร้าง UI ของแอปพลิเคชัน GTK ในเบราว์เซอร์ได้โดยใช้เพียง HTML และ CSS ตอนนั้นยังเป็นช่วงก่อนที่ Atom, VS Code, Electron และน่าจะรวมถึง NodeJS จะถือกำเนิดขึ้น จึงน่าประทับใจมาก ปัจจุบันไม่แน่ชัดว่า HTML renderer ตัวนั้นยังมีอยู่หรือไม่
  • รู้สึกเสียดายที่ GTK เดินตามแนวโน้มการอนุญาตให้มีวิดเจ็ตบน title bar บางส่วนลากได้ บางส่วนลากไม่ได้ และทำให้พื้นที่ที่จัดสรรให้ชื่อแอปพลิเคชันกับชื่อไฟล์ลดลง เรื่องนี้ไม่ได้จำกัดอยู่แค่ GTK
  • ไม่ค่อยเข้าใจหลักการทำงานของ desktop environment บน Linux รู้สึกว่ามันซับซ้อนขึ้นเรื่อย ๆ และมีสิ่งถูกเพิ่มเข้ามามากขึ้น
  • ตื่นเต้นกับ fractional scaling ที่ละเอียดถึงระดับพิกเซล
  • กล่าวถึงว่าถ้าใช้ wgpu.rs ก็จะได้ DirectX และ Metal มาฟรี
  • สนใจ ANSI text renderer ซึ่งจะทำให้รันโปรแกรม GTK ภายใน xterm ได้ และอาจเพิ่มความสามารถ sixel แบบเลือกใช้ได้ด้วย
  • ตั้งคำถามว่าทำไมการลดลงของประสิทธิภาพจึงถูกยอมรับ โดยตนเองยังคงทำงานคอมพิวต์ส่วนใหญ่บนฮาร์ดแวร์รุ่นเก่า และฟีเจอร์เหล่านี้อาจปิดการใช้งานได้หรืออาจไม่ได้รับการรองรับจาก GPU
  • งานของ GTK ดูสนุกและเจ๋ง มีการพูดถึง anti-aliasing และคาดหวังถึงความเป็นไปได้ในการนำเทคนิค signed distance field ที่ใช้เรนเดอร์ฟอนต์ใน game engine มาใช้ เทคโนโลยีหลายอย่างที่ใช้ใน game renderer อาจมีประโยชน์กับโค้ด GUI เช่นกัน
  • มีนักพัฒนา graphics engine จำนวนมากที่สร้าง renderer ที่ล้ำหน้าไปหลายยุคเมื่อเทียบกับ renderer ของ open source GUI toolkit แต่ส่วนใหญ่ทำงานอยู่ในบริษัทพัฒนาเกม จึงไม่มีเวลาไปมีส่วนร่วมกับ open source stack หากชุมชนสามารถจัดงบประมาณอย่างสม่ำเสมอเพื่อจ่ายให้คนเหล่านี้ได้ ก็อาจได้เห็นการอัปเดตด้าน rendering และ toolkit ครั้งใหญ่บนเดสก์ท็อปโอเพนซอร์ส
  • มีความคิดเห็นหนึ่งถูกแจ้งรายงานจนถูกซ่อนเนื้อหาไว้