# โอเพนจีแอล
โอเพนจีแอล (https://www.opengl.org/wiki/Main_Page ไลบรารีกราฟิกส์แบบเปิด) คือส่วนต่อประสานโปรแกรมประยุกต์ (API) ด้านการเร็นเดอร์ภาพกราฟิกส์เวกเตอร์สองมิติและสามมิติ ที่ทำงานได้หลายแพลตฟอร์มและหลายภาษา ส่วนต่อประสานนี้มักใช้ทำงานระหว่างหน่วยประมวลผลกราฟิกส์ (GPU) เพื่อให้บรรลุผลการเร็นเดอร์แบบเร่งด้วยฮาร์ดแวร์

โอเพนจีแอลได้รับการพัฒนาขึ้นโดยบริษัทซิลิคอนกราฟิกส์ (Silicon Graphics Inc.: SGI) ตั้งแต่ พ.ศ. 2534 และออกเผยแพร่เมื่อ 30 มิถุนายน พ.ศ. 2535 และใช้งานอย่างกว้างขวางในการออกแบบใช้คอมพิวเตอร์ช่วย (CAD) ความเป็นจริงเสมือน การทำให้เห็นได้เชิงวิทยาศาสตร์ การทำสารสนเทศให้เห็นได้ เครื่องจำลองการฝึกบิน และวิดีโอเกมเป็นต้น โครโนสกรุป ซึ่งเป็นกลุ่มบริษัทด้านเทคโนโลยีที่ไม่แสวงผลกำไร ได้เข้ามาบริหารจัดการโอเพนจีแอลตั้งแต่ปี พ.ศ. 2559

 ประวัติ 
ตั้งแต่คริสต์ทศวรรษ 1980 การพัฒนาซอฟต์แวร์ที่สามารถทำงานกับฮาร์ดแวร์กราฟิกได้หลากชนิดเป็นความท้าทายอย่างยิ่ง นักพัฒนาซอฟต์แวร์เขียนอินเทอร์เฟซและไดรเวอร์ของตนเองสำหรับฮาร์ดแวร์แต่ละชิ้น ทำให้ต้องใช้ความพยายามทวีคูณและมีราคาแพง

มาถึงต้นคริสต์ทศวรรษ 1990 ซิลิคอนกราฟิกส์เป็นผู้นำในเรื่องภาพกราฟิกส์สามมิติสำหรับเครื่องสถานีงาน เอพีไอชื่อ ไอริสจีแอล (IRIS GL) ของบริษัทนี้ ถือว่า "นำสมัย" และกลายมาเป็นมาตรฐานด้านอุตสาหกรรมตามความนิยม บดบังรัศมี ฟิกส์ (PHIGS) ซึ่งเป็นเอพีไอที่มีพื้นฐานบนมาตรฐานเปิด เนื่องจากไอริสจีแอลใช้งานง่ายกว่าฟิกส์ และรองรับการเร็นเดอร์ในภาวะทันที (immediate mode)

บริษัทคู่แข่งของซิลิคอนกราฟิกส์ (รวมทั้งซันไมโครซิสเต็มส์ ฮิวเลตต์-แพคการ์ด และไอบีเอ็ม) ก็สามารถนำฮาร์ดแวร์สามมิติที่รองรับส่วนขยายต่าง ๆ สำหรับมาตรฐานฟิกส์เข้าสู่ตลาด ทำให้ส่วนแบ่งการตลาดของซิลิคอนกราฟิกส์ลดลงเนื่องจากผู้ผลิตฮาร์ดแวร์ภาพกราฟิกส์สามมิติเข้าสู่ตลาดมากขึ้น ด้วยความพยายามที่จะคงไว้ซึ่งอิทธิพลในตลาด ซิลิคอนกราฟิกส์จึงตัดสินใจเปลี่ยนไอริสจีแอลเป็นมาตรฐานเปิด ซึ่งนั่นก็คือ โอเพนจีแอล

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

ข้อจำกัดหนึ่งของไอริสจีแอลก็คือ การเข้าถึงคุณลักษณะที่รองรับโดยฮาร์ดแวร์ที่กำหนดเท่านั้น ถ้าฮาร์ดแวร์กราฟิกไม่รองรับคุณลักษณะอันใดอันหนึ่ง โปรแกรมประยุกต์ก็จะไม่สามารถใช้คุณลักษณะนั้นได้ โอเพนจีแอลได้แก้ปัญหานี้โดยเตรียมซอฟต์แวร์รองรับไว้สำหรับคุณลักษณะที่ไม่มีในฮาร์ดแวร์ ช่วยให้โปรแกรมประยุกต์สามารถใช้กราฟิกขั้นสูงบนระบบค่อนข้างต่ำได้ โอเพนจีแอลได้กำหนดวิธีการเข้าถึงฮาร์ดแวร์ให้เป็นมาตรฐาน ผลักดันภาระการพัฒนาโปรแกรมส่วนต่อประสานฮาร์ดแวร์ให้เป็นของผู้ผลิตฮาร์ดแวร์ และมอบหมายฟังก์ชันการจัดแบ่งหน้าต่างให้ระบบปฏิบัติการทำแทน ด้วยฮาร์ดแวร์กราฟิกมีมากมายหลายหลาก การทำให้ฮาร์ดแวร์ทั้งหมดพูดคุยด้วยภาษาเดียวกันในแนวทางนี้จึงเป็นผลสะท้อนที่โดดเด่น ที่ทำให้นักพัฒนาสามารถพัฒนาซอฟต์แวร์ภาพกราฟิกสามมิติบนแพลตฟอร์มในระดับที่สูงขึ้น

เมื่อ พ.ศ. 2535 ซิลิคอนกราฟิกส์ได้เป็นผู้นำในการตั้งคณะกรรมการทบทวนสถาปัตยกรรมโอเพนจีแอล (OpenGL Architecture Review Board: OpenGL ARB) ขึ้นมา ซึ่งเป็นกลุ่มของบริษัทต่าง ๆ ที่จะคอยบำรุงรักษาและขยายข้อกำหนดของโอเพนจีแอลในอนาคต

เมื่อ พ.ศ. 2537 ซิลิคอนกราฟิกส์ได้มีแนวคิดที่จะสร้างโอเพนจีแอลพลัสพลัส (OpenGL++) ที่มีส่วนประกอบอย่างเช่น เอพีไอ scene-graph (โดยคาดว่าจะใช้เทคโนโลยีเพอร์ฟอร์เมอร์เป็นฐาน) ข้อกำหนดนี้หมุนเวียนกันอยู่ในกลุ่มของบริษัทที่สนใจกลุ่มเล็ก ๆ แต่ก็ไม่ได้กลายมาเป็นผลิตภัณฑ์

เมื่อ พ.ศ. 2538 ไมโครซอฟท์ได้เผยแพร่ไดเรกต์ทรีดี (Direct3D) ออกมา ซึ่งในที่สุดก็กลายมาเป็นคู่แข่งหลักของโอเพนจีแอล ต่อมาวันที่ 17 ธันวาคม พ.ศ. 2540 ไมโครซอฟท์กับซิลิคอนกราฟิกส์ได้ริเริ่มโครงการฟาเรนไฮต์ ซึ่งเป็นความพยายามบรรลุเป้าหมายการรวมส่วนต่อประสานโอเพนจีแอลกับไดเรกต์ทรีดีเข้าด้วยกัน (และเอพีไอ scene-graph ด้วย) และต่อมาฮิวเลตต์-แพคการ์ดก็ได้เข้าร่วมโครงการด้วยใน พ.ศ. 2541 โครงการเริ่มต้นขึ้นด้วยสัญญาที่ว่าจะนำเอพีไอคอมพิวเตอร์กราฟิกส์สามมิติที่โต้ตอบได้มาสู่ชาวโลก แต่เนื่องด้วยข้อจำกัดทางการเงินของซิลิคอนกราฟิกส์ เหตุผลเชิงกลยุทธ์ของไมโครซอฟท์ และการขาดการสนับสนุนด้านอุตสาหกรรมโดยทั่วไป โครงการนี้จึงถูกทอดทิ้งไปเมื่อ พ.ศ. 2542

เมื่อเดือนกรกฎาคม พ.ศ. 2549 คณะกรรมการทบทวนสถาปัตยกรรมโอเพนจีแอล ได้มีมติให้ส่งมอบการควบคุมมาตรฐานเอพีไอของโอเพนจีแอลแก่โครโนสกรุป (Khronos Group)OpenGL ARB to pass control of OpenGL specification to Khronos Group, Khronos press releaseOpenGL ARB to Pass Control of OpenGL Specification to Khronos Group, AccessMyLibrary Archive

 ความเปลี่ยนแปลงในอุตสาหกรรมเกมส์ 
เมื่อเดือนมิถุนายน พ.ศ. 2561 บริษัทแอปเปิล  ได้ประกาศว่าสถานะของ OpenGL และ OpenCL จะถือเป็น deprecated (เลิกใช้) ในทุกแพลตฟอร์ม (iOS, macOS และ tvOS) โดยเสนอแนะให้นักพัฒนาโปรแกรมหันไปใช้ Metal API ซึ่งเป็นผลิตภัณฑ์ของแอปเปิลแทน เอพีไอดังกล่าวได้รับการเผยแพร่มาตั้งแต่ พ.ศ. 2557

บริษัทไอดีซอฟต์แวร์ (id Software) ได้ใช้โอเพนจีแอลในการสร้างเกมตั้งแต่ GLQuake (เปลี่ยนเทคโนโลยีจาก  Quake มาเป็นโอเพนจีแอลโดยมีการปรับแต่งเล็กน้อย) ซึ่งถูกปล่อยออกมาในปี พ.ศ. 2540  ตัวเอนจิ้นแรกของบริษัทที่ใช้โอเพนจีแอลอย่างถูกต้องมีลิขสิทธิ์คือ Quake II engine หรือ  id Tech 2 ในปี พ.ศ. 2559 พวกเขาได้ปล่อยตัวอัปเดตสำหรับ id Tech 6 ซึ่งใช้ Vulkan อันเป็นเทคโนโลยียุคใหม่ถัดจากโอเพนจีแอล ID Tech 7 จึงเลิกใช้โอเพนจีแอล

เมื่อเดือนมีนาคม พ.ศ. 2566 บริษัทวาล์ว (Valve Corporation) ได้ถอดโอเพ่นจีแอลออกจาก Dota 2

โครโนกรุ๊ปได้ถอดโอเพนจีแอลออกจากเทคโนโลยีคอมพิวเตอร์กราฟฟิกส์สมัยใหม่หลายตัว เช่น เรย์เทรซซิ่ง การเข้ารหัสวีโดโอบนจีพียู การลบรอยหยักในกราฟิกส์ อัลกอริธึมในดีพเลิร์นนิ่ง FidelityFX Super Resolution(FSR) ของ AMD และ Nvidia DLSS

เกมส์ Atypical ซึ่งสนับสนุนโดย Samsung ได้ปรับปรุงเอ็นจิ้นใหม่โดยใช้ Vulkan แทนที่จะเป็นโอเพนจีแอล

นอกจากนี้ Google Stadia และระบบปฏิบัติการ Fuchsia ก็ใช้ Vulkan เป็นกราฟฟิกเอพีไอหลัก รวมทั้งต้องการให้ใช้จีพียูที่สนับสนุน Vulkan ด้วย ทั้งนี้ Fuchsia ตั้งใจที่จะใช้โอเพนจีแอลบนชั้นของ Vulkan ด้วยเลเยอร์ของ ANGLE translation

ประวัติรุ่น
โอเพนจีแอลรุ่นแรก หรือเวอร์ชัน 1.0 เปิดตัวเมื่อ 30 มิถุนายน พ.ศ. 2535 โดยมาร์ค ซีกัล และเคิร์ต อะเคลลีย์ หลังจากนั้นมา โอเพนจีแอลได้รับการปรับปรุงคุณลักษณะหลายเวอร์ชัน ในแต่ละเวอร์ชันได้กำหนดฟีเจอร์ต่าง ๆ ที่เป็นพื้นฐานให้กราฟฟิกการ์ดต้องสนับสนุนหรือรองรับ และต่อต้านส่วนต่อขยายด้วยการเขียนที่ง่ายกว่วา เวอร์ชันใหม่แต่ละเวอร์ชันมีแนวโน้มที่จะรวมส่วนขยายต่าง ๆ เข้าด้วยกันซึ่งได้รับการสนับสนุนอย่างกว้างขวางจากผู้จำหน่ายกราฟิกการ์ด แม้ว่ารายละเอียดของส่วนขยายเหล่านั้นอาจมีการเปลี่ยนแปลงได้

+ประวัติเวอร์ชันของโอเพนจีแอล เวอร์ชัน วันที่เผยแพร่คุณสมบัติใหม่1.1พ.ศ. 2538Texture objects, Vertex Arrays1.216 มีนาคม พ.ศ. 25383D textures, BGRA และ packed pixel formats, และมีการใช้imaging subset ซึ่งเป็นประโยชน์แก่แอพประมวลผลข้อมูลภาพ1.2.114 ตุลาคม พ.ศ. 2538 ออกส่วนขยาย ARB1.314 สิงหาคม พ.ศ. 2544Multitexturing, multisampling, texture compression1.424 กรกฎาคม พ.ศ. 2545Depth textures, GLSlang1.529 กรกฎาคม พ.ศ. 2546Vertex Buffer Object (VBO), Occlusion Queries2.07 กันยายน พ.ศ. 2547GLSL 1.1, MRT, Non Power of Two textures, Point Sprites, Two-sided stencil2.12 กรกฎาคม พ.ศ. 2549GLSL 1.2, Pixel Buffer Object (PBO), sRGB Textures3.011 สิงหาคม พ.ศ. 2551GLSL 1.3, Texture Arrays, Conditional rendering, Frame Buffer Object (FBO)3.124 มีนาคม พ.ศ. 2552GLSL 1.4, Instancing, Texture Buffer Object, Uniform Buffer Object, Primitive restart3.23 สิงหาคม พ.ศ. 2552GLSL 1.5, Geometry Shader, Multi-sampled textures3.311 มีนาคม พ.ศ. 2553GLSL 3.30, ปรับปรุงฟังก์ชันรุ่นเก่าให้เข้าได้กับคุณลักษณะของ OpenGL 4.04.011 มีนาคม พ.ศ. 2553GLSL 4.00, Tessellation on GPU, shaders with 64-bit precision4.126 กรกฎาคม พ.ศ. 2553GLSL 4.10, แสดง debug output ให้ดูง่าย, เข้ากันได้กับ OpenGL ES 2.04.28 กรกฎาคม พ.ศ. 2554GLSL 4.20, Shaders ด้วย atomic counters, draw transform feedback instanced, การแพ็ค shader, เพิ่มขีดสมรรถนะ4.36 สิงหาคม พ.ศ. 2555GLSL 4.30, Compute shaders leveraging GPU parallelism, shader storage buffer objects, high-quality ETC2/EAC texture compression, increased memory security, a multi-application robustness extension, compatibility with OpenGL ES 3.04.422 กรกฎาคม พ.ศ. 2556GLSL 4.40, Buffer Placement Control, Efficient Asynchronous Queries, Shader Variable Layout, Efficient Multiple Object Binding, Streamlined Porting of Direct3D applications,  Bindless Texture Extension, Sparse Texture Extension4.511 สิงหาคม พ.ศ. 2557GLSL 4.50, Direct State Access (DSA), Flush Control, ความคงทน, ความเข้ากันได้กับ OpenGL ES 3.1 API และ shader, ฟีเจอร์การจำลอง DX114.631 กรกฎาคม พ.ศ. 2560GLSL 4.60, เพิ่มประสิทธิภาพการประมวลผลเรขาคณิตและการรันเเชดเดอร์, เพิ่มข้อมูล, no error context, polygon offset clamp, SPIR-V, anisotropic filtering

แหล่งข้อมูลเรียนรู้-ฝึกฝน
 OpenGL Step by Step ฝึกการเขียนโปรแกรมโดยใช้โอเพนจีแอล ทีละสเต็ป
 OpenGL Introduction  แนะนำการเขียนโปรแกรมโดยใช้โอเพนจีแอล
 OpenGL SDK  แนะนำเครื่องมือพัฒนาโปรแกรมโดยใช้โอเพนจีแอล
 Anton's OpenGL 4 Tutorials  ฝึกการเขียนโปรแกรมโดยใช้โอเพนจีแอล เวอร์ชัน 4
 Getting Started - OpenGL Wiki  เริ่มต้นกับโอเพนจีแอลวิกิ
 Learn OpenGL  เรียนรู้โอเพนจีแอล พร้อมซอร์สโค้ด

วัลแคน
วัลแคน (Vulkan) เดิมเรียกว่า "Next Generation OpenGL Initiative" (glNext) เป็นการออกแบบระบบใหม่เพื่อหลอมรวม OpenGL และ OpenGL ES ให้เป็น API เดียว ซึ่งจะไม่คำนึงถึงความเข้ากันได้กับเวอร์ชันของโอเพนจีแอลที่มีอยู่

วัลแคนเวอร์ชันแรก ได้รับการเผยแพร่เมื่อวันที่ 16 กุมภาพันธ์ พ.ศ. 2559

Vulkan เป็น API ใหม่สำหรับกราฟิกที่เร่งความเร็วด้วยฮาร์ดแวร์ (และการคำนวณทั่วไป) ผ่าน GPU ดั้งเดิม โอเพนจีแอลจะยังคงได้รับการพัฒนาต่อไปเนื่องจากเป็น API ระดับสูงกว่า Vulkan เราสามารถอนุมานได้ว่า Vulkan นั้นน่าจะจบลงด้วยการเป็น "OpenGL 5"