เรนเดอเรอร์ใหม่สำหรับ GTK
(blog.gtk.org)- โครงสร้างพื้นฐานการเรนเดอร์ของ GTK ถูกจัดใหม่เป็น ngl สำหรับ GL และ vulkan สำหรับ Vulkan โดยเรนเดอเรอร์ทั้งสองใช้โครงสร้างแบบรวมศูนย์ที่บิลด์จากซอร์สเดียวกัน
- อิมพลีเมนเทชันส่วนกลางอิงตามลำดับการทำงานของ Vulkan API และทำ abstraction ความแตกต่างระหว่าง GL 3.3+ กับ GLES 3.0+ เพื่อใช้ โครงสร้างพื้นฐานการเรนเดอร์ ร่วมกัน เช่น การท่อง scene graph และแคช
- เรนเดอเรอร์ใหม่นี้ให้ความสำคัญกับ ความถูกต้อง และการบำรุงรักษามากกว่าความเร็วในทันที พร้อมปรับปรุง anti-aliasing, fractional scaling, จุดหยุดสีของไล่ระดับแบบไม่จำกัด และการรองรับ dmabuf
- นักพัฒนาแอปควรตรวจสอบว่า ไม่รองรับโหนด glshader, มีการเปลี่ยนแปลงในการจัดการตำแหน่งแบบเศษส่วน และอาจเจอปัญหาไดรเวอร์ โดยแม้จะดูเหมือนเป็นปัญหาฝั่งไดรเวอร์ก็ควรรายงานไปที่ GTK
- ในสแนปช็อต GTK 4.13.6 ตอนนี้ ngl เป็นค่าเริ่มต้นใหม่แล้ว แต่ยังอยู่ในช่วงทดลองใช้งาน และหากพบปัญหาใหญ่ก็อาจย้อนกลับไปใช้เรนเดอเรอร์ gl เดิมใน GTK 4.14 ได้
เรนเดอเรอร์แบบรวมสำหรับ GL และ Vulkan
- GTK เพิ่มเรนเดอเรอร์ใหม่ ngl สำหรับ GL และ vulkan สำหรับ Vulkan
- เรนเดอเรอร์ทั้งสองถูกบิลด์จากซอร์สเดียวกัน จึงถูกเรียกว่า เรนเดอเรอร์แบบรวม
- โมเดลการอิมพลีเมนต์ยึดตาม Vulkan API และมี abstraction สำหรับจัดการความแตกต่างของ GL 3.3+ และ GLES 3.0+
- โครงสร้างนี้ช่วยให้สามารถแชร์งานพื้นฐานที่เดิมต้องดูแลแยกตามเรนเดอเรอร์ได้
- การท่อง scene graph
- การจัดการทรานส์ฟอร์มและสถานะอื่น ๆ
- แคช texture และ glyph
- งานดูแลให้เรนเดอเรอร์ทั้งสองทันสมัยและสอดคล้องกัน
เงื่อนไขเมื่อต้องการขยายไปยัง Metal และ DirectX
- มีความเป็นไปได้ที่จะขยายแนวทางเดียวกันนี้ไปยังเรนเดอเรอร์บน macOS ที่ใช้ Metal หรือบน Windows ที่ใช้ DirectX
- Vulkan และ GL ได้เปรียบเพราะโดยพื้นฐานแล้วใช้ภาษา shader เดียวกันคือ GLSL
- แต่เงื่อนไขแบบเดียวกันนี้ใช้ไม่ได้กับ Metal หรือ DirectX จึงอาจต้องเขียน shader ซ้ำ หรือใช้เครื่องมือแปลงอย่าง SPIRV-Cross
- ผู้มีส่วนร่วมที่สนใจงานด้านนี้ยินดีต้อนรับ
วิธีอิมพลีเมนต์และ ubershader
- เรนเดอเรอร์ GL เดิมใช้ shader แบบเรียบง่ายแยกตามแต่ละประเภทของ rendernode และมักพึ่งพา offscreen rendering เมื่อเนื้อหาซับซ้อน
- เรนเดอเรอร์แบบรวมก็มี shader แยกตามโหนด ที่ทรงพลังขึ้นเช่นกัน แต่ยังใช้ shader ที่ซับซ้อนเพื่อแปลข้อมูลในบัฟเฟอร์แทนการทำ offscreen ด้วย
- ในวงการเขียนโปรแกรมเกม แนวทางนี้เรียกว่า ubershader
- อิมพลีเมนเทชันใหม่ยังปรับแต่งไม่มากเท่าเรนเดอเรอร์ GL เดิม แต่ให้ความสำคัญกับ ความถูกต้อง และการบำรุงรักษา จึงสามารถจัดการต้นไม้ rendernode ที่หลากหลายได้อย่างถูกต้องมากขึ้น
คุณภาพการเรนเดอร์และฟีเจอร์ใหม่
-
Anti-aliasing
- เรนเดอเรอร์ GL เดิมอาจทำให้รายละเอียดเล็กมากที่พอดีอยู่ระหว่างขอบเขตหนึ่งพิกเซลหายไป
- ปัญหานี้อาจกระทบแม้แต่เส้นใต้แบบ mnemonic
- เรนเดอเรอร์แบบรวมเก็บรายละเอียดเล็ก ๆ ได้ดีกว่า และลดอาการขอบหยักของเส้นรอบ primitive ได้ด้วย
-
Fractional scaling
- Anti-aliasing เป็นพื้นฐานสำคัญสำหรับการจัดการ สเกลแบบเศษส่วน อย่างถูกต้อง
- เมื่อสเกลหน้าต่างขนาด 1200×800 ที่ 125% เรนเดอเรอร์แบบรวมจะใช้ framebuffer ขนาด 1500×1000
- วิธีนี้ใช้พิกเซลน้อยกว่ามากและให้ภาพคมชัดกว่าการปล่อยให้ compositor ย่อภาพ 2400×1600 ลงมา
-
ไล่ระดับแบบอิสระ
- เรนเดอเรอร์ GL เดิมรองรับจุดหยุดสีได้สูงสุด 6 จุดสำหรับไล่ระดับเชิงเส้น, แบบรัศมี และแบบกรวย
- เรนเดอเรอร์แบบรวมอนุญาตให้มีจุดหยุดสีได้ ไม่จำกัด
- ยังใช้ anti-aliasing กับไล่ระดับด้วย เพื่อสร้างเส้นที่นุ่มนวลบนขอบที่คม
-
dmabuf
- GTK ได้เพิ่มการรองรับ dmabuf และงานด้าน graphics offloading ตั้งแต่ช่วงฤดูใบไม้ร่วงที่ผ่านมา
- เรนเดอเรอร์ใหม่รองรับสิ่งนี้ และขยาย API render_texture เพื่อให้สร้าง dmabuf ได้เมื่อมีการขอสร้าง texture
- ตอนนี้ส่วนขยายนี้ใช้ได้เฉพาะกับเรนเดอเรอร์ Vulkan เท่านั้น
สิ่งที่นักพัฒนาแอปควรตรวจสอบ
-
ไม่รองรับโหนด glshader
- โหนด glshader มีประโยชน์กับเดโมของ GTK 4.0 แต่ผูกติดกับเรนเดอเรอร์ GL เดิมอย่างมาก
- โหนดดังกล่าวตั้งอยู่บนสมมติฐานของ GLSL API ที่เรนเดอเรอร์เดิมเปิดเผยไว้
- เรนเดอเรอร์ใหม่ ไม่รองรับโหนด glshader
- เอกสารของ GTK แนะนำให้ตรวจสอบก่อนพึ่งพา shader และหากล้มเหลวให้ใช้ shader ที่ง่ายกว่า หรือเส้นทางสำรองที่ไม่ใช้ shader
- หลัง GTK 4.0 มีการเพิ่มฟีเจอร์อย่างโหนด mask และการรองรับ texture แบบ straight-alpha ทำให้หลายกรณีใช้งานของโหนด glshader ไม่จำเป็นอีกต่อไป
-
ตำแหน่งแบบเศษส่วน
- เรนเดอเรอร์ GL เดิมปัดค่าตำแหน่ง จึงอาจไม่เห็นปัญหาแม้ส่งตำแหน่งแบบเศษส่วนเข้าไป
- เรนเดอเรอร์ใหม่จะวางตามตำแหน่งที่ระบุไว้ตรง ๆ
- ความต่างนี้อาจทำให้เกิดผลลัพธ์ที่ไม่ได้ตั้งใจ จึงควรตรวจสอบว่าตำแหน่งเป็นค่าที่ต้องการจริงหรือไม่
- ควรระวังเป็นพิเศษกับการวาดแบบสไตล์ cairo ที่วางเส้นไว้ที่ตำแหน่งครึ่งพิกเซลเพื่อให้เติมหนึ่งแถวพิกเซลได้พอดี
-
ปัญหาไดรเวอร์
- เรนเดอเรอร์ใหม่ใช้งานไดรเวอร์กราฟิกในรูปแบบใหม่และต่างจากเดิม จึงมีโอกาสกระตุ้นให้เกิดปัญหาฝั่งไดรเวอร์
- แม้ปัญหาจะดูเหมือนเป็น issue ของไดรเวอร์ ก็ควรรายงานไปที่ GTK
- สิ่งนี้ช่วยให้ประเมินได้ว่าโค้ดใหม่ทำงานได้ดีแค่ไหนบนไดรเวอร์และฮาร์ดแวร์ที่หลากหลาย
สถานะประสิทธิภาพในปัจจุบัน
- เรนเดอเรอร์ใหม่ยังไม่ได้เร็วกว่าของเดิม
- เรนเดอเรอร์ GL เดิมถูกปรับแต่งมาอย่างหนักเพื่อความเร็ว ใช้ shader ที่เรียบง่ายกว่า และไม่ต้องคำนวณสิ่งที่จำเป็นต่อฟีเจอร์อย่าง anti-aliasing
- เป้าหมายคือทำให้เรนเดอเรอร์ใหม่เร็วกว่าในท้ายที่สุด แต่ตอนนี้ ฟีเจอร์ใหม่และความถูกต้อง คือจุดปรับปรุงที่สำคัญกว่า
- เรนเดอเรอร์แบบใช้ GPU ทั้งหมดในปัจจุบันเร็วพอสำหรับการเรนเดอร์แอป GTK ที่ 60fps หรือ 144fps
- จากเบนช์มาร์กแบบไม่เป็นทางการ เรนเดอเรอร์ Vulkan อยู่ในระดับใกล้เคียงกับเรนเดอเรอร์ GL เดิม หรือบางกรณีก็ดีกว่า
- สาเหตุที่เรนเดอเรอร์ GL ใหม่ช้ากว่ายังไม่ได้รับการติดตามอย่างชัดเจน
การเปลี่ยนค่าเริ่มต้นและข้อยกเว้น
- ใน สแนปช็อต GTK 4.13.6 ที่เพิ่งออกมา เรนเดอเรอร์ ngl กลายเป็นค่าเริ่มต้นใหม่
- การเปลี่ยนแปลงนี้ยังเป็นการทดลองใช้ และต้องผ่านการทดสอบกับแอปจำนวนมากขึ้นเพื่อยืนยันความพร้อมสำหรับการใช้งานจริง
- หากพบปัญหาใหญ่ อาจย้อนกลับไปใช้เรนเดอเรอร์ gl เดิมใน GTK 4.14 ได้
- เรนเดอเรอร์ Vulkan ยังไม่ใช่ค่าเริ่มต้น
- พอร์ต WebKit GTK4 ทำงานได้บน GL แต่ยังไม่ทำงานบน Vulkan
- ตอนนี้ GtkGLArea และ GtkMediaStream สร้าง GL texture และเรนเดอเรอร์ Vulkan ยังนำเข้าโดยตรงไม่ได้
- หากปัญหาเหล่านี้ได้รับการแก้ไขในอนาคตอันใกล้ ก็จะทบทวนการตัดสินใจเรื่องเรนเดอเรอร์เริ่มต้นอีกครั้ง
- หากใช้งาน GTK บนฮาร์ดแวร์ที่เก่ามาก เรนเดอเรอร์ GL เดิมอาจเหมาะกว่า
- เรนเดอเรอร์ GL เดิมต้องการความสามารถจาก GPU น้อยกว่า
- สามารถ override การเลือกเรนเดอเรอร์ได้ด้วยตัวแปรแวดล้อม
GSK_RENDERER - ตัวอย่าง:
GSK_RENDERER=gl
สิ่งที่อาจทำได้ต่อจากนี้
- เรนเดอเรอร์ใหม่เป็นรากฐานสำหรับการพัฒนาฟีเจอร์ที่ต้องการมานาน
- งานที่เป็นไปได้ในอนาคตมีดังนี้
- การจัดการสี ที่ถูกต้อง รวมถึง HDR
- path rendering บน GPU
- ความเป็นไปได้ในการเรนเดอร์ glyph
- การเรนเดอร์นอก main thread
- การปรับปรุงประสิทธิภาพบนอุปกรณ์ที่เก่าและมีสมรรถนะต่ำกว่า
- บางรายการจะเป็นจุดโฟกัสของงานระยะสั้นและระยะกลาง
- ยังมีฟีเจอร์เพิ่มเติมที่วางแผนไว้สำหรับเรนเดอเรอร์ใหม่ และผู้ใช้สามารถลองใช้งานเองแล้วแจ้งผลการทำงานได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นานมาแล้ว น่าจะราวปี 2010 เห็นจะได้ เหมือนเคยมี HTML renderer แบบทดลองที่ให้รัน แอป GTK ภายในเบราว์เซอร์ และประกอบ UI ด้วย HTML+CSS ทั่วไป
ตอนนั้นรู้สึกช็อกมาก และน่าจะยังเป็นช่วงก่อน Atom, VS Code, Electron หรืออาจจะกระทั่ง NodeJS จะออกมาด้วยซ้ำ
ไม่แน่ใจว่า renderer ตัวนั้นยังอยู่หรือเปล่า
https://docs.gtk.org/gtk4/broadway.html
https://www.phoronix.com/news/GTK4-Broadway-Being-Used
ไม่คิดว่ามันเป็นแบ็กเอนด์หลัก/ทางการ แต่ก็ยังอยู่และถูกพอร์ตมาที่ Gtk4 แล้ว
เพราะลักษณะการทำงานมันใกล้กับแนวทาง pure canvas ที่ทิ้งแทบทุกอย่างที่เบราว์เซอร์มีให้ แล้วสร้างใหม่ทั้งหมดตั้งแต่ต้น
เกณฑ์ในการดูว่ามันทำงานได้ถูกต้องหรือไม่โดยทั่วไปคือ (a) ใช้การเลื่อนของเบราว์เซอร์ (b) ใช้การเรนเดอร์ข้อความของเบราว์เซอร์ (c) จัดการลิงก์เป็นองค์ประกอบจริง ซึ่ง Broadway ไม่ผ่านทั้งสามข้อ
มันเขียนระบบเลื่อนเอง, เรนเดอร์ข้อความที่ฝั่งเซิร์ฟเวอร์แล้วส่งมาเป็นภาพ, และพอพยายามคลิกลิงก์ก็ดูเหมือนจะค้างจริง ๆ
นอกจากนี้การป้อนข้อความก็น่าจะใช้แค่อีเวนต์คีย์ ทำให้ IME composition พังหมด และการนำทางด้วยคีย์บอร์ดก็น่าจะเป็นฝั่ง GTK แทนที่จะเป็น native
มันยังไม่สามารถให้ accessibility tree ได้อย่างมีความหมายด้วย
สำหรับ tech demo หรือการใช้งานส่วนตัวที่ยอมรับข้อจำกัดได้ก็โอเค แต่ไม่เหมาะกับการแจกจ่ายสู่สาธารณะ และจริง ๆ แล้วใกล้เคียงกับ พวก RDP/VNC ที่ผสมการใช้ DOM นิดหน่อยมากกว่า
และต้องจำไว้ด้วยว่าโค้ดทั้งหมดรันอยู่ที่ฝั่งเซิร์ฟเวอร์
โดยพื้นฐานแล้วมันคือการสตรีมข้อมูลพิกเซลไปยังองค์ประกอบ canvas จึงแทบไม่ต่างจาก VNC ที่มี web viewer ติดมาด้วย
https://imgur.com/a/2EDZ2Ti
https://github.com/moondev/gtk3-docker
use case ของผมคือรันเบราว์เซอร์ภายในเบราว์เซอร์ เพื่อให้โต้ตอบกับบริการ Kubernetes clusterip ได้ง่ายโดยไม่ต้องทำ port forwarding หรือ proxy
อีกตัวอย่างเจ๋ง ๆ คือเปิด virt-manager แล้วรัน VM ด้วย gtk virt-viewer จากนั้นควบคุมผ่านเบราว์เซอร์
https://github.com/m-bers/docker-virt-manager
หวังว่า GTK จะไม่เดินตามกระแสการใส่ วิดเจ็ตในแถบชื่อหน้าต่าง
บางอย่างลากได้ บางอย่างลากไม่ได้ และยังทำให้พื้นที่สำหรับแสดงชื่อแอปกับชื่อไฟล์ลดลงด้วย
ไม่ใช่ว่านี่เป็นข้อบ่นที่มีต่อ GTK อย่างเดียว
การปรับสเกลแบบเศษส่วน ที่แม่นยำระดับพิกเซล เยี่ยมเลย วู้!
ถ้าต่อไปมีการรองรับบน Wayland อย่างเหมาะสม ก็ดูเหมือนว่า การรองรับ HiDPI จะเป็นไปได้บนเดสก์ท็อป Linux หลักทุกตัว
มันบอกว่าถ้าปรับสเกลหน้าต่าง 1200×800 เป็น 125% ตัว unified renderer จะใช้ framebuffer ขนาด 1500×1000 แทนที่จะปล่อยให้ compositor ย่อภาพ 2400×1600
เท่าที่ผมเข้าใจคือ หน้าต่างที่เพราะสเกล 125% จึงควรถูกวาดบนหน้าจอเป็น 1500×1000 พิกเซลนั้น ในแง่ application pixel ยังถือเป็น 1200×800 อยู่
OpenGL และ Vulkan เรนเดอร์ด้วย floating point อยู่แล้ว ก็น่าจะหมายถึงว่าสามารถวาดลงบัฟเฟอร์ที่เรนเดอร์แบบ 1:1 กับหน้าจอได้โดยตรงผ่านการแปลงพิกัด
ถ้าเข้าใจถูก แบบนี้ก็ดูเป็น วิธีที่สมเหตุสมผล เสียที
มีใครเข้าใจจริง ๆ ไหมว่า เดสก์ท็อปเอนไวรอนเมนต์ บน Linux ทำงานกันอย่างไร? ผมไม่เข้าใจเลย
มันให้ความรู้สึกว่าซับซ้อนขึ้นเรื่อย ๆ และเหมือนแค่มีของถูกพอกเพิ่มเข้าไป
โครงสร้างแบบไคลเอนต์/เซิร์ฟเวอร์ในท้ายที่สุดกลับตรงข้ามกับโมเดลการประมวลผลกราฟิกแบบบูรณาการสูงที่เรามาถึงทุกวันนี้
แทนที่จะยอมเลิก X11 ตั้งแต่เนิ่น ๆ เพื่อลดความเสียหาย ทั้งฝั่งผู้ขาย Unix และโอเพนซอร์สกลับพยายามทำน้ำมะนาวจากมะนาวเสียทั้งรถบรรทุกอยู่นานเกินไป
นั่นจึงเป็นเหตุผลว่าทำไม GUI บน Linux ถึงล้าหลังแบบนี้
Apple ไม่ได้ถูกผูกติดกับ X11 และยอมรับโมเดลแบบบูรณาการ จึงพัฒนา GUI บน Unix ได้อย่างรวดเร็ว และตอนนี้ยังออกแบบ GPU ของตัวเองอีกด้วย ซึ่งยิ่งเห็นได้ชัด
ผมสงสัยว่าสถาปัตยกรรม Wayland จะส่งผลมากแค่ไหน และจะมี แอปเฉพาะสำหรับ GNOME เกิดขึ้นจริงหรือไม่
น่าจะดีถ้ามีตัวเรนเดอร์ข้อความแบบ ansi
จะได้รันโปรแกรม GTK ภายใน xterm ของฉันได้ และถ้าเลือกได้ก็อยากแถม sixel มานิดหน่อยด้วย
มีแถบด้านข้าง, พฤติกรรมบางอย่างในแถบชื่อเรื่อง, และโครงสร้างแบบมุมมองรายละเอียด
แอปบน Mac, แอป Windows แบบ “Modern”, และแอปมือถือก็คล้ายกัน
เลยสงสัยว่าชุดเครื่องมือ UX จะเป็นแบบประกาศเชิงสมบูรณ์และเชิงความหมายทั้งหมดได้ไหม
ในระดับสูงประมาณว่า “มุมมองมาสเตอร์/รายละเอียด, มุมมองรายการที่มีฟิลด์พวกนี้, และต้องมีการกระทำบางอย่าง” โดยไม่ระบุตำแหน่งหรือสไตล์ แล้วให้ระบบเลือกวิดเจ็ตที่เหมาะสมให้อัตโนมัติ
แล้วค่อยมีทางหนีทีไล่ด้วย CSS เล็กน้อยหรือเจาะลงไปใช้วิดเจ็ตเนทีฟได้
ดูเหมือนว่าแทบทุกแอปที่ไม่ใช่เบราว์เซอร์, โปรแกรมแก้ไข WYSIWYG, หรือโปรแกรมดูสื่อ จะเข้ากับกรอบนี้ได้ และประเด็นสำคัญคือสามารถสร้าง TUI จากคำอธิบายแบบนี้ได้ง่าย
https://github.com/fathyb/carbonyl
https://i.imgur.com/pIQ4K7Q.png
ถ้าใช้ https://wgpu.rs/ ก็คงได้ DirectX และ Metal ฟรีเลย :)
งานนี้ดูสนุกมากจริง ๆ
ตอนอ่านส่วนของการทำ anti-aliasing ก็คิดว่า signed distance field แบบที่ใช้ในเกมเอนจิน น่าจะใช้กับการเรนเดอร์ฟอนต์ที่สเกลได้ตามใจเหมือนกันหรือเปล่า
Valve เคยออกบทความวิชาการดี ๆ เรื่องนี้ไว้
ในโค้ด UI ของตัวเรนเดอร์เกมหรือฝั่งการเรนเดอร์เดคาล มีเทคนิคเจ๋ง ๆ เยอะมากที่น่าจะเป็นประโยชน์กับโค้ด GUI ด้วย
ไม่เข้าใจว่าทำไม ประสิทธิภาพที่ลดลง ถึงยอมรับกันได้
ฉันยังทำงานส่วนใหญ่บนฮาร์ดแวร์เก่า ถ้าฟีเจอร์พวกนี้ปิดได้ฉันก็อยากปิด และบน GPU ของฉันมันอาจไม่รองรับด้วยซ้ำ
ถ้ามีอาการช้าจนสังเกตได้ก็ใช้
GSK_RENDERER=glได้ถ้าเป็น Microsoft, Apple หรือ Google ก็คงไม่เปิดให้ถกเรื่องพวกนี้เลยด้วยซ้ำ
Microsoft คงจะประมาณว่า “ลืม API เดิมไปซะ นี่คือ API ใหม่”, Apple คงเป็น “บังคับใช้ตั้งแต่ ${WEIRD_NAME}”, ส่วน Google คงเป็น “อัปเดตนั้นคุณไม่ได้”
แต่สิ่งที่น่าผิดหวังคือ ตัวเรนเดอร์ Vulkan กลับไปได้แค่ประสิทธิภาพใกล้เคียงกับตัวเรนเดอร์ GL เดิม
นี่ดูเหมือนเป็นสัญญาณว่าปัญหาอยู่ฝั่งผู้เรียกใช้มากกว่าตัว 3D API เอง
น่าจะต้องติดตามประสิทธิภาพและปรับปรุงซ้ำตลอดทั้งการพัฒนา มากกว่าจะหวังพึ่ง “ความบริสุทธิ์ทางสถาปัตยกรรม” ซึ่งคงไม่ใช่ความคิดที่ดีนัก
ฉันไม่เคยเห็นกรณีที่เอา immediate mode rendering API ไปแปลงเป็น retained mode แล้วจะเร็วขึ้น
มันอาจเป็นไปได้ไม่ทางใดก็ทางหนึ่ง แต่ต้องใช้แรงมหาศาล และถ้าจะซ่อมเคสประหลาด ๆ ก็ต้องแก้ฝั่งไคลเอนต์ของ API ด้วย
เท่าที่จำได้ ส่วนใหญ่ใช้ MacBook ราคาแพง เลยมีปัญหาหลายอย่างที่ถูกปัดไปด้วยคำว่า “บนเครื่องฉันใช้ได้”
ตัวอย่างเช่น มีปัญหาเรื่อง การเรนเดอร์ฟอนต์ หลายอย่างที่ไม่กระทบจอ Retina
ไม่ได้อยากให้ฟังดูขมขื่น แต่โดยมากแล้วนักพัฒนาเอนจินกราฟิกที่เก่ง ๆ ได้สร้างเรนเดอเรอร์ที่ล้ำหน้ากว่าเรนเดอเรอร์ของ GUI toolkit แบบโอเพนซอร์สไปแล้วหลายยุค
ในหมู่พวกเรามีหลายคนที่สามารถนำการเรนเดอร์ยุคถัดไปของจริงมาสู่เดสก์ท็อปโอเพนซอร์สได้ แต่กำลังทำงานอยู่ที่บริษัทพัฒนาเกมและนั่นคือสิ่งที่เลี้ยงชีพ
จึงไม่มีเวลาไปมีส่วนร่วมกับสแตกโอเพนซอร์ส
ถ้าชุมชนสามารถจัดงบเพื่อจ่ายค่าตอบแทนให้กับนักพัฒนาเหล่านี้อย่างสม่ำเสมอได้ การอัปเดตเรนเดอเรอร์และ toolkit ก็คงจะแตกต่างไปมาก
แอปโอเพนซอร์สอื่น ๆ ก็เช่นกัน
กราฟิก 2D มีจุดร่วมกับเกมเอนจินน้อยมาก
ในงาน 2D อินพุตมักเป็น Bézier และ spline อื่น ๆ มี overdraw เยอะ และการจัดการหน่วยความจำ VRAM ก็ซับซ้อนขึ้นเพราะมี texture ที่ผู้ใช้จัดให้
ในทางกลับกัน เกมเอนจินกำลังแก้ปัญหายาก ๆ ที่ไม่เกี่ยวกับเรนเดอเรอร์ 2D เช่น แสงแบบไดนามิก เอฟเฟกต์เชิงปริมาตร และสภาพแวดล้อมแบบไดนามิก
รู้สึกว่า game UI toolkit กับ desktop GUI framework เป็นคนละโลกที่มีความคาดหวังต่างกัน
จากประสบการณ์ที่เคยใช้ทั้งสองอย่างในสายงานของผม GTK/Qt มักจัดการเรื่องการผสานเข้ากับระบบปฏิบัติการ ฟีเจอร์การช่วยการเข้าถึง การนำทางด้วยคีย์บอร์ด และฟังก์ชันอย่างคัดลอก/วาง ได้ดีหรือดีมาก
game UI toolkit มักไม่ต้องการสิ่งเหล่านี้ จึงยอมทิ้งไปทั้งหมด และไปโฟกัสที่ประสิทธิภาพ ธีม และการผสานเข้ากับเกมเอนจินแทน
ในทางทฤษฎีอาจบอกได้ว่าเรนเดอเรอร์เป็นอิสระจากเรื่องเหล่านี้ แต่ในทางปฏิบัติไม่ได้เป็นแบบนั้นทั้งหมด
เมื่อมีงบประมาณจำกัด เวลาที่จะใช้กับฟีเจอร์ไหนก็แตกต่างกันด้วย
เรนเดอเรอร์ที่เร็วและแม่นยำมากไม่ได้สำคัญกับ desktop GUI framework เท่ากับที่สำคัญกับ game UI toolkit
มีกี่ตัวที่รองรับ CMYK และหน่วยสำหรับงานพิมพ์?
นี่ยังแค่แตะผิวของสิ่งที่ GUI renderer ต้องมี แต่เกมเอนจินไม่จำเป็นต้องมี
ผมสงสัยมากว่ากลุ่มนักพัฒนาเกมจะสามารถประกอบอะไรสักอย่างที่เร็วกว่ามากเมื่อเทียบกับ Skia โดยไม่ต้องเสียฟีเจอร์ไปมากมายได้จริง
คนที่ต้องหาเลี้ยงชีพ แต่ก็มีส่วนร่วมเท่าที่ทำได้ด้วยการใช้ซอฟต์แวร์และบางครั้งก็ช่วยเขียนโค้ด
แน่นอนว่าถ้าชุมชนระดมทุนได้ก็คงยอดเยี่ยม แต่แม้แต่งานประสานงานนั้นเองก็เป็นงานที่สำหรับใครบางคนแล้วไม่ได้ช่วยเลี้ยงชีพ
ผมชอบโอเพนซอร์ส/ซอฟต์แวร์เสรี รู้สึกขอบคุณที่มันมีอยู่ และก็ช่วยเท่าที่ทำได้เมื่อมีโอกาส แต่ผมคิดมานานแล้วว่านี่คือ ความมุ่งหมายของคนที่มีอภิสิทธิ์
คุณต้องมีเวลาว่าง และต้องสามารถใช้เวลาว่างนั้นกับงานที่ไม่ได้ช่วยยกระดับคุณภาพชีวิตได้ อีกทั้งยังต้องทำแบบนั้นได้อย่างต่อเนื่อง
ผมทำงานอยู่ในอุตสาหกรรมเกม และถึงแม้เรนเดอเรอร์ 3D จะดีมาก แต่ผมยังไม่เคยเห็น 2D UI renderer ที่ให้ความรู้สึกว่าแข่งขันได้จริง
คุณใช้ตัวอะไรสำหรับการเรนเดอร์ path และ pattern?