Кіріспе

Крос-платформалық графикалық API

OpenGL (Open Graphics Library) – ол компьютерлік көмекпен жобалау (CAD), бейне ойындар, ғылыми визуализация, виртуалды шындық және ұшу симуляциясы сияқты әртүрлі қолданбалар үшін қолданылады. 2006 жылдан бері OpenGL коммерциялық емес технология консорциумы Khronos Group басқаруында.

Дизайн

OpenGL спецификациясы 2D және 3D графиканы салуға арналған абстрактілі қолданба бағдарламалау интерфейсін (API) сипаттайды. Ол негізінен немесе толығымен GPU сияқты аппараттық үдетуді пайдалану үшін жобаланған, бірақ API-ді CPU-да іске қосылатын бағдарламалық құралдарда толығымен жүзеге асыруға болады. API клиенттік бағдарлама шақыратын функциялар жиынтығы ретінде анықталады, сондай-ақ аталатын бүтін сан тұрақтыларының жиынтығымен бірге (мысалы, ондық сан 3553-ке сәйкес келетін GL_TEXTURE_2D тұрақтысы). Функциялардың анықтамалары C бағдарламалау тіліндегілерге сырттай ұқсас болғанымен, олар тілге тәуелсіз. Сондықтан OpenGL көптеген тілдік байланыстарға ие, олардың ең маңыздылары WebGL (JavaScript байланысы, OpenGL ES 2.0 негізінде, веб-браузерден 3D бейнелеу үшін API); WGL, GLX және CGL (C байланыстары); iOS ұсынған C байланысы; және Android ұсынған Java және C байланыстары. OpenGL тілге тәуелсіз болумен қатар, платформалық тәуелсіздікке де ие. Спецификация OpenGL контекстін алу және басқару туралы ештеңе айтпайды, бұл мәселені негізгі терезе жүйесінің егжей-тегжейі ретінде қалдырады. Осы себепті OpenGL тек бейнелеумен ғана айналысады, кіріс, аудио немесе терезелермен байланысты API-лерді ұсынбайды.

Даму

OpenGL белсенді әзірлеуден тоқтады: 2001 және 2014 жылдар аралығында OpenGL спецификациясы көбінесе жыл сайын жаңартылып келді, 2009 жылы екі жаңа нұсқа (3.1 және 3.2), ал 2010 жылы үш жаңа нұсқа (3.3, 4.0 және 4.1) шықты. Соңғы OpenGL спецификациясы 4.6 үш жылдық үзілістен кейін 2017 жылы жарық көрді және негізгі профильге бар болған он бір ARB және EXT кеңейтуін қосумен шектелді. Одан бері ол Vulkan және басқа технологияларды дамытуға бағытталды. Нәтижесінде, қазіргі заманғы графикалық процессорлар (GPU) ұсынатын кейбір мүмкіндіктер, мысалы, сәулелерді іздеу (ray tracing), OpenGL-де қолдау таппайды. OpenGL спецификациясының жаңа нұсқаларын Khronos Group жариялайды, олардың әрқайсысы API-ды түрлі жаңа мүмкіндіктерді қолдау үшін кеңейтеді. Әр нұсқаның мәліметтері графикалық карта өндірушілері, операциялық жүйелерді жобалаушылар және Mozilla, Google сияқты жалпы технологиялық компанияларды қоса, топ мүшелерінің арасындағы келісім бойынша шешіледі. Негізгі API талап ететін мүмкіндіктерге қоса, графикалық өңдеу блогы (GPU) жеткізушілері кеңейтулер арқылы қосымша функционалды ұсынуы мүмкін. Кеңейтулер жаңа функциялар мен тұрақтыларды енгізе алады, сондай-ақ қолданыстағы OpenGL функцияларының шектеулерін жеңілдетуі немесе жоюы мүмкін. Өндірушілер кеңейтулерді басқа жеткізушілерден немесе Khronos Group-тан қолдау алмастан, арнайы API-ларды ұсыну үшін пайдалана алады, бұл OpenGL-дің икемділігін арттырады. Барлық кеңейтулер OpenGL тізілімінде жинақталады және анықталады. Әрбір кеңейту оны жасаған компанияның атына негізделген қысқа идентификатормен байланысты. Мысалы, Nvidia-ның идентификаторы NV, ол GL NV half float кеңейту атының бір бөлігі, GL HALF FLOAT NV тұрақтысы және glVertex2hNV функциясы болып табылады. Егер бірнеше өндіруші бірдей API-ді пайдаланып, бірдей функционалды іске асыруға келіссе, EXT идентификаторын пайдаланатын ортақ кеңейту шығарылуы мүмкін. Мұндай жағдайларда Khronos Group Architecture Review Board кеңейтуге ресми мақұлдауын беруі мүмкін, онда ARB идентификаторы қолданылады. OpenGL-дің әрбір жаңа нұсқасында енгізілген мүмкіндіктер көбінесе кеңінен қолданылған бірнеше кеңейтулердің, әсіресе ARB немесе EXT типіндегі кеңейтулердің біріктірілген мүмкіндіктерінен тұрады.

Қатысқан кітапханалар

OpenGL-дің ең алғашқы нұсқалары OpenGL Utility Library (GLU) деп аталатын қосымша кітапханамен бірге жарық көрді. Ол заманауи аппараттық құралдарда қолдау көрсетілмейтін, бірақ пайдалы әрі қажетті мүмкіндіктерді ұсынды, мысалы, тесселяциялау, мип-карталар мен қарапайым геометриялық нысандарды жасау. GLU спецификациясы 1998 жылы соңғы рет жаңартылды және қазір қолданыстан шығарылған OpenGL мүмкіндіктеріне тәуелді.

Кеңейтулер кітапханаларын жүктеу

OpenGL кеңейтулерін анықтау және жүктеуге байланысты жоғары жұмыс жүктемесін ескере отырып, барлық қолжетімді кеңейтулер мен функцияларды автоматты түрде жүктейтін бірнеше кітапханалар құрастырылды. Мысалдарға OpenGL Easy Extension (GLEE) кітапханасы, OpenGL Extension Wrangler Library (GLEW) және glbinding кіреді. JOGL және PyOpenGL сияқты көптеген тілдік байланыстар да кеңейтулерді автоматты түрде жүктейді.

Қолданылу

Mesa 3D – OpenGL-дің ашық кодты іске асырылуы. Ол толығымен бағдарламалық қамтамасыз ету арқылы рендерлеуді жүзеге асыра алады, сондай-ақ Тікелей рендерлеу инфрақұрылымын пайдаланып, BSD, Linux және басқа да платформаларда аппараттық үдетуді қолдануы мүмкін. 20.0 нұсқасынан бастап OpenGL стандартының 4.6 нұсқасын қолдайды.

Тарих

1980-ші жылдары кең ауқымды графикалық жабдықпен жұмыс істейтін бағдарламалық құралды жасау шынымен қиындық тудырды. Бағдарламалық құралды жасаушылар әрбір жабдық үшін жеке интерфейстер мен драйверлер жазды. Бұл қымбатқа түсті және күш-жігердің көбеюіне әкелді. 1990-шы жылдардың басында Silicon Graphics (SGI) жұмыс станциялары үшін 3D графика саласында жетекші болды. Олардың IRIS GL API ашық стандарттарға негізделген PHIGS-ке қарағанда өнеркәсіптік стандарт ретінде кеңінен қолданылды. Бұл IRIS GL пайдалануға оңай деп есептелгендіктен және ол дереу рендерингті қолдағандықтан болды. PHIGS пайдалануға қиын және оның мүмкіндіктері ескірген деп саналды. SGI-нің бәсекелестері (Sun Microsystems, Hewlett Packard және IBM-нің ішінде) PHIGS стандартына енгізілген кеңейтулермен қолдау көрсетілген 3D жабдықты нарыққа шығара алды, бұл SGI-ді IRIS GL-дің бір нұсқасын OpenGL деп аталатын қоғамдық стандарт ретінде ашуға итермеледі. Дегенмен, SGI-дің көптеген клиенттері үшін IRIS GL-ден OpenGL-ге көшу айтарлықтай инвестиция талап ететін. Сонымен қатар, IRIS GL 3D графикамен тікелей қатысы жоқ API функцияларын қамтыды. Мысалы, ол терезе, пернетақта және тышқан API-ін қамтыды, өйткені ол X Window System және Sun's NeWS-тен бұрын жасалған. IRIS GL кітапханалары лицензиялық және патенттік мәселелерге байланысты ашық қолжетімді болмады. Бұл факторлар SGI-ді OpenGL қолдауы жетілген кезде озық және эксклюзивті Iris Inventor және Iris Performer бағдарламалау API-лерін қолдауды жалғастыруға мәжбүр етті. IRIS GL-дің бір шектеуі – ол тек негізгі жабдықпен қолдау көрсетілетін мүмкіндіктерге ғана қол жеткізуді қамтамасыз етті. Егер графикалық жабдық белгілі бір мүмкіндікті қолдамаса, қосымша оны пайдалана алмайды. OpenGL бұл мәселені жабдықпен қолдау көрсетілмейтін мүмкіндіктердің бағдарламалық реализациясын ұсыну арқылы шешті, бұл қосымшаларға салыстырмалы түрде нашар қуатты жүйелерде озық графиканы пайдалануға мүмкіндік берді. OpenGL жабдыққа қол жеткізуді стандарттады, жабдық интерфейсі бағдарламаларын (құрылғы драйверлерін) жасау жауапкершілігін жабдық өндірушілеріне жүктеді және терезе функцияларын негізгі операциялық жүйеге тапсырды. Графикалық жабдықтың сан алуан түрлері болғандықтан, олардың барлығын осылай бір тілде сөйлетудің өте маңызды әсері болды, бұл бағдарламалық құралды жасаушыларға 3D бағдарламалық құралды жасау үшін жоғары деңгейдегі платформаны ұсынды. 1992 жылы SGI OpenGL Architecture Review Board (OpenGL ARB) құруға жетекшілік етті, бұл компаниялар тобы болашақта OpenGL спецификациясын сақтап, кеңейтетін болды. 1994 жылы SGI "OpenGL++" деп аталатын нәрсені шығару туралы ойланды, ол олардың Performer технологиясына негізделген сценалық график API сияқты элементтерді қамтыды. Спецификация бірнеше қызығушы тараптарға таратылды, бірақ ешқашан өнімге айналмады. 1996 жылы Microsoft Direct3D-ді шығарды, ол ақырында OpenGL-дің негізгі бәсекелесіне айналды. 50-ден астам ойын әзірлеушілер 1997 жылдың 12 маусымында Microsoft компаниясына ашық хат жолдап, компанияны OpenGL-ді белсенді түрде қолдауға шақырды. 1997 жылдың 17 желтоқсанында Microsoft және SGI OpenGL және Direct3D интерфейстерін біріктіру мақсатымен бірлескен жоба – Fahrenheit жобасын бастады (және сценалық график API-ін де қосты). 1998 жылы Hewlett Packard жобаға қосылды. Бастапқыда ол интерактивті 3D компьютерлік графика API әлемін реттеуге үміттендірді, бірақ SGI-дегі қаржылық қиындықтар, Microsoft-тың стратегиялық себептері және жалпы өнеркәсіптік қолдаудың жетіспеуі салдарынан 1999 жылы тоқтатылды. 2006 жылдың шілдесінде OpenGL Architecture Review Board OpenGL API стандартының бақылауын Khronos Group-қа беру үшін дауыс берді.

Өнеркәсіпті қолдау

2018 жылдың маусым айында Apple компаниясы барлық платформаларында (iOS, macOS және tvOS) OpenGL API-ларын қолдауды тоқтатты, сонымен бірге әзірлеушілерді 2014 жылы ұсынған, өзгеше Metal API-ін пайдалануға баса кеңес берді. id Software компаниясы 1997 жылы шыққан GLQuake (OpenGL-ге бірнеше өзгерістермен Quake-тің порты) ойынынан бастап OpenGL-ді пайдаланып келеді. Компанияның OpenGL қолдауы бар алғашқы лицензиялық ойын қозғалтқышы Quake II қозғалтқышы болды, ол id Tech 2 деп те белгілі. 2016 жылы олар id Tech 6 үшін жаңарту шығарды, ол OpenGL-дің ізбасары Vulkan-ды қолдады. ID Tech 7 OpenGL қолдауын толығымен жойды. 2023 жылдың наурызында Valve Dota 2 ойынынан OpenGL қолдауын алып тастады. Khronos OpenGL үшін бірқатар заманауи графикалық технологияларды қолдауды тоқтатты, мысалы, Ray Tracing, GPU-да бейне декодтау, терең оқыту алгоритмдерімен антиалиазинг – AMD FidelityFX Super Resolution (FSR) және Nvidia DLSS. Atypical Games компаниясы Samsung компаниясының қолдауымен Vulkan-ды, OpenGL-дің орнына барлық Apple емес платформаларда қолдану үшін өздерінің ойын қозғалтқышын жаңартты. Google-дің Fuchsia OS Vulkan-ды негізгі графикалық API ретінде пайдаланады және Vulkan-ға сәйкес GPU талап етеді. Fuchsia Vulkan-ның үстінен ANGLE аударма қабаты арқылы OpenGL қолдауын қамтамасыз етуді жоспарлап отыр.

Баламалы іске асырулар

Apple OpenGL-ді iOS 12 және macOS 10.14 Mojave жүйелерінде Metal пайдасына қолдануды тоқтатты, бірақ ол әлі де macOS 14 Sonoma-да қолжетімді (Apple кремний құрылғыларында да). OpenGL үшін қолдау көрсетілетін соңғы нұсқасы 2011 жылғы 4.1. MoltenVK авторларының MoltenGL деп аталатын коммерциялық кітапханасы OpenGL шақыруларын Metal-ға аудара алады. OpenGL-ді Vulkan негізінде іске асыруға бағытталған бірнеше жоба бар. Google-дың ANGLE үшін Vulkan артқы жағы 2020 жылдың шілдесінде OpenGL ES 3.1 сәйкестігіне қол жеткізді. Mesa3D жобасы да Zink деп аталатын мұндай драйверді қамтиды. Microsoft-тың Windows 11 on Arm жүйесі GLon12 арқылы OpenGL 3.3 қолдауын қосты, бұл DirectX 12 арқылы Mesa Gallium негізінде ашық бастапқы кодты OpenGL іске асыру болып табылады.

Вулкан

Vulkan, бұрын "Next Generation OpenGL Initiative" (glNext) деп аталған, OpenGL және OpenGL ES-ті бір ортақ API-ге біріктіру мақсатымен жаңадан құрылған жоба. Vulkan API-нің алғашқы нұсқасы 2016 жылдың 16 ақпанында жарияланды.