WebGL

**WebGL** (**Veb Grafik kutubxonasi**) — plaginlardan foydalanmasdan har qanday veb-brauzerda interaktiv 2D va 3D grafiklarni koʻrsatish uchun JavaScript API. WebGL boshqa veb-standartlar bilan toʻliq integratsiyalashgan boʻlib, fizika va tasvirni qayta ishlash va veb-sahifalar sifatida effektlardan GPU tomonidan tezlashtirilgan foydalanish imkonini beradi. WebGL elementlari boshqa HTML elementlari bilan aralashtirilishi va sahifaning boshqa qismlari yoki sahifa foni bilan birlashtirilishi mumkin.

WebGL dasturlari JavaScriptda yozilgan va C yoki C++ ga oʻxshash OpenGL ES Shading Language (GLSL ES) tilida yozilgan va kompyuterning grafik ishlov berish blokida (GPU) bajariladigan kodidan iborat. WebGL notijorat Khronos Group tomonidan ishlab chiqilgan va yuritiladi.

2022-yil 9-fevralda Khronos Group barcha asosiy brauzerlar uchun WebGL 2.0 foydalanishini eʼlon qildi.

## Dizayn
WebGL 1.0 OpenGL ES 2.0 ga asoslangan va 3D grafika uchun API taqdim etadi. U HTML5 kanvas elementidan foydalanadi va unga Document Object Model (DOM) interfeyslari yordamida kirish mumkin.

WebGL 2.0 OpenGL ES 3.0 ga asoslangan va WebGL 1.0 ning ko‘plab kengaytmalari mavjudligini kafolatlaydi va yangi API’larni taqdim etadi. Avtomatik xotira boshqaruvi JavaScript tomonidan bilvosita taqdim etiladi.

OpenGL ES 2.0 kabi WebGL ham OpenGL 1.0 da kiritilgan va OpenGL 3.0 da eskirgan funksiyali API larga ega emas. Agar kerak boʻlsa, ushbu funksiya shader kodini taqdim etish va JavaScriptda maʼlumotlar ulanishlarini sozlash orqali oxirgi dasturchi tomonidan amalga oshirilishi kerak.

WebGLdagi shaderlar toʻgʻridan-toʻgʻri GLSLda ifodalanadi va WebGL APIga matnli satrlar sifatida uzatiladi. WebGL ilovasi ushbu shader koʻrsatmalarini GPU kodiga kompilyatsiya qiladi. Ushbu kod API orqali yuborilgan har bir tepalik uchun va ekranga rasterlangan har bir piksel uchun bajariladi.

## Tarixi
WebGL Mozillaʼda Vladimir Vukićević tomonidan boshlangan Canvas 3D tajribalaridan kelib chiqadi. Vukićević birinchi marta 2006-yilda Canvas 3D prototipini namoyish qilgan. 2007-yil oxiriga kelib, Mozilla va Opera ham oʻzlarining alohida dasturlarini yaratdilar.

2009-yil boshida Khronos Group notijorat texnologiya konsorsiumi Apple, Google, Mozilla, Opera va boshqalar ishtirokida WebGL ishchi guruhini boshladi. WebGL spetsifikatsiyasining 1.0 versiyasi 2011-yil mart oyida chiqarilgan. 2012-yil mart oyidan boshlab ishchi guruh rahbari Ken Rassell hisoblanadi.

WebGL ning dastlabki ilovalariga Zygote Body kiradi. 2012-yil noyabr oyida Autodesk oʻz ilovalarining koʻpchiligini mahalliy WebGL mijozlarida ishlaydigan tizimga oʻtkazganligini eʼlon qildi. Bu dasturlarga Fusion 360 va AutoCAD 360 kiradi. WebGL 2 spetsifikatsiyasini ishlab chiqish 2013-yilda boshlangan va 2017-yil yanvarida yakunlangan. Ushbu spetsifikatsiya OpenGL ES 3.0 ga asoslangan. Birinchi ilovalar Firefox 51, Chrome 56 va Opera 43 da mavjud edi.

## Amalga oshirish jarayoni

### Native Graphics Layer Engine
Native Graphics Layer Engine (ANGLE) WebGL 1.0 (ES 3.0 ga chambarchas mos keladigan 2.0) va OpenGL ES 2.0 va 3.0 standartlarini amalga oshiradigan ochiq kodli grafik mexanizmidir. Bu Windows platformalarida Google Chrome va Mozilla Firefox uchun ishlatish imkonsiz boʻlib, WebGL va OpenGL chaqiruvlarini mavjud platformaga xos API’larga tarjima qilish orqali ishlaydi. ANGLE hozirda OpenGL ES 2.0 va 3.0 dan ish stoli OpenGL, OpenGL ES, Direct3D 9 va Direct3D 11 API lariga kirish imkonini beradi. ″(Google) *Chrome Windows tizimidagi barcha grafik tasvirlar, jumladan Canvas2D mukammallashtirilgan ilovasi va Native Client sinov muhiti uchun ANGLEdan foydalanadi.″*

## Dasturiy taʼminot
WebGL zamonaviy brauzerlar tomonidan keng qoʻllab-quvvatlanadi. Biroq, uning mavjudligi uni qoʻllab-quvvatlaydigan GPU kabi boshqa omillarga bogʻliq. Rasmiy WebGL veb-sayti oddiy test rejimini taqdim etadi. Batafsil maʼlumot (masalan, brauzer qaysi render qiluvchi dasturdan foydalanishi va qanday kengaytmalar mavjudligi) uchinchi tomon veb-saytlarida taqdim etiladi.

### Ish stoli brauzerlari

* Google Chrome — WebGL 1.0 2011-yil fevral oyida chiqarilgan 9-versiyasidan boshlab yangilangan drayverlarga ega qobiliyatli grafik kartaga ega barcha platformalarda ishlaydi. Windows tizimida sukut boʻyicha Chrome OpenGL ES ni drayverlarni yaxshiroq qoʻllab-quvvatlaydigan Direct X 9.0c yoki 11.0 ga tarjima qilish uchun ANGLE (Native Graphics Layer Engine) render qiluvchi dasturidan foydalanadi. Linux va Mac OS X da standart render qiluvchi dastur OpenGL hisoblanadi. Windowsda render sifatida OpenGLni majburlash ham mumkin. 2013-yil sentabr oyidan boshlab Chrome yangiroq Direct3D 11 renderiga ega, ammo bu yangiroq grafik kartani talab qiladi. Chrome 56+ WebGL 2.0 ni qo‘llab-quvvatlaydi.
* Firefox — WebGL 1.0 4.0 versiyasidan boshlab yangilangan drayverlarda sifatli grafik kartaga ega barcha platformalarda yoqilgan. 2013-yildan beri Firefox ham ANGLE orqali Windows platformasida DirectX dan foydalanadi. Firefox 51+ WebGL 2.0 ni qoʻllab-quvvatlaydi.
* Safari — Safari 6.0 va OS X Mountain Lion, Mac OS X Lion va Mac OS X Snow Leopard’dagi Safari 5.1 da o‘rnatilgan Safari 6.0 va undan keyingi versiyalari Safari 8.0 dan oldin o‘chirib qo‘yilgan (ishlatish imkonsiz) WebGL 1.0 ni qo‘llab-quvvatladi. Safari 12-versiyasi (MacOS Mojaveda mavjud) hozirda „Eksperimental“ sifatida WebGL 2.0 uchun mavjud.
* Opera — WebGL 1.0 2014-yilda oʻchirib qoʻyilgan boʻlsada, Opera 11 va 12-da joriy qilingan. Opera 43+ WebGL 2.0 ni qoʻllab-quvvatlaydi.
* Internet Explorer — WebGL 1.0 qisman Internet Explorer 11 da qoʻllab-quvvatlanadi. Dastlab u rasmiy WebGL muvofiqlik testlarining aksariyatida muvaffaqiyatsizlikka uchradi, ammo Microsoft keyinchalik bir nechta yangilanishlarni chiqardi. Eng soʻnggi 0,94 WebGL mexanizmi hozirda Khronos sinovlarining ~97 % dan oʻtadi. WebGLni qoʻllab-quvvatlash, shuningdek, IEWebGL kabi uchinchi tomon plaginlari yordamida Internet Explorerning oldingi versiyalariga qoʻlda qoʻshilishi mumkin.
* Microsoft Edge — Microsoft Edge Legacy uchun dastlabki barqaror versiya WebGL 0.95 versiyasini (kontekst nomi: „eksperimental-webgl“) ochiq manbali GLSL dan HLSL transpilyatoriga qo‘llab-quvvatlaydi. 10240+ versiyasi WebGL 1.0 ni prefiks sifatida qoʻllab-quvvatlaydi. Eng soʻnggi Chromiumga asoslangan Edge WebGL 2.0ni qoʻllab-quvvatlaydi.

### Mobil brauzerlar

* BlackBerry 10 — WebGL 1.0 BlackBerry qurilmalari uchun OS 10.00 versiyasidan beri mavjud.
* BlackBerry PlayBook — WebGL 1.0 WebWorks va brauzer orqali PlayBook OS 2.00 da mavjud.
* Android brauzeri — asosan qoʻllab-quvvatlanmaydi, ammo Sony Ericsson Xperia qator Android smartfonlari proshivka yangilanganidan keyin WebGL imkoniyatlariga ega boʻldi. Samsung smartfonlarida WebGL ham yoqilgan (Galaxy SII (4.1.2) va Galaxy Note 8.0 (4.2) da tasdiqlangan). Koʻpgina telefonlarda Android brauzerini almashtirgan Google Chrome brauzerida qoʻllab-quvvatlanadi (lekin yangi standart Android brauzeri emas).
* Internet Explorer — Prefiksli WebGL 1.0 Windows Phone 8.x (11+) da mavjud.
* Mobil uchun Firefox — Firefox 4dan beri WebGL 1.0 Android va MeeGo qurilmalari uchun mavjud.
* Firefox OS
* Google Chrome
* Maemo — Nokia N900 da WebGL 1.0 PR1.2 mikrodastur yangilanishidan boshlab birja microB brauzerida mavjud.
* MeeGo — WebGL 1.0 „Web“ birja brauzerida qo‘llab-quvvatlanmaydi. Biroq, u Firefox orqali ishlaydi.
* Microsoft Edge — Prefiksli WebGL 1.0 Windows 10 Mobileda mavjud.
* Opera Mobile — Opera Mobile 12 WebGL 1.0 ni qoʻllab-quvvatlaydi (faqat Androidda).
* Sailfish OS — WebGL 1.0 standart Sailfish brauzerida qoʻllab-quvvatlanadi.
* Tizen — WebGL 1.0 qo‘llab-quvvatlanadi.
* iOS — WebGL 1.0 mobil Safari uchun iOS 8 da mavjud.

## Xususiyatlar va tizim

### Foydalanish
Oʻz-oʻzidan kerakli 3D grafikalarni tezda ishlab chiqarishni taʼminlaydigan WebGL API ning past darajadagi turi odatda 3D grafikalarda narsalarni yaratish uchun foydalaniladigan toʻplamlarni yaratishga yordam berdi (masalan, shaderlar uchun koʻrish oʻzgarishlari, view frustum va boshqalar). Ommabop sanoat formatlarida sahna grafiklari va 3D obyektlarni yuklash kabi asosiy vazifalar qoʻshimcha funksiyalarni taʼminlash uchun kutubxonalar tomonidan (ularning baʼzilari boshqa tillardan JavaScriptga koʻchirilgan) mavhumlashtiriladi. Koʻpgina yuqori darajadagi xususiyatlarni taʼminlovchi kutubxonalarning toʻliq boʻlmagan roʻyxatiga A-Frame (VR), BabylonJS, PlayCanvas, three.js, OSG, JS va CopperLicht kiradi. X3D shuningdek, X3D va VRML kontentini WebGL da ishlaydigan qilish uchun X3DOM deb nomlangan loyihani yaratdi. 3D modeli HTML5 da `<X3D>` XML tegida va interaktiv skript JavaScript va DOM dan foydalanadi. BS Content Studio va InstantReality X3D eksportchisi X3Dni HTML formatida eksport qilishi va WebGL orqali ishlashi mumkin. 

### Oʻyinlar
Shuningdek, WebGL uchun 2D va 3D, jumladan Unreal Engine 4 va Unity uchun oʻyin mexanizmlari tez paydo boʻldi. Stage3D /Flash asosidagi Away3D yuqori darajali kutubxonasi TypeScript orqali WebGL uchun portga ham ega. Shaderlar uchun faqat vektor va matritsali matematik yordam dasturlarini taqdim etuvchi yengilroq yordamchi kutubxona bu sylvester.js. U baʼzan glUtils.js deb nomlangan WebGL maxsus kengaytmasi bilan birgalikda ishlatiladi.

Bundan tashqari, Cocos2d -x yoki Pixi.js kabi WebGL ustiga qurilgan baʼzi 2D kutubxonalar mavjud boʻlib, ular Flash dunyosida Stage3D orqali Starling Framework bilan sodir boʻlgan voqealarga oʻxshash harakatda ishlash sabablari tufayli shu tarzda amalga oshirilgan. WebGLga asoslangan 2D kutubxonalari WebGL mavjud boʻlmaganda HTML5ga qaytadi. 

GPUga deyarli toʻgʻridan-toʻgʻri kirishni taʼminlash orqali renderlash muammosini bartaraf etish JavaScript dasturlarida ishlash cheklovlarini ham yuzaga keltirdi. Ulardan baʼzilari asm.js va WebAssembly tomonidan koʻrib chiqildi (xuddi shunday, CrossBridge kabi loyihalar tomonidan hal qilingan ActionScriptda Stage3Dning taʼsir koʻrsatish muammolari paydo boʻldi).

### Kontent yaratish
Boshqa har qanday grafik API kabi, WebGL sahnalari uchun kontent yaratish oddiy 3D kontent yaratish vositasidan foydalanishni va sahnani tomoshabin yoki yordamchi kutubxona tomonidan oʻqilishi mumkin boʻlgan formatga eksport qilishni talab qiladi. Buning uchun Blender, Autodesk Maya yoki SimLab Composer kabi ish stoli 3D mualliflik dasturidan foydalanish mumkin. Xususan, Blend4Web WebGL sahnasini toʻliq Blenderda yaratish va hatto mustaqil veb-sahifa sifatida ham bir marta bosish bilan brauzerga eksport qilish imkonini beradi. CopperCube va WebGLga asoslangan Clara.io onlayn muharriri kabi WebGLga xos dasturlar ham mavjud. Sketchfab va Clara.io kabi onlayn platformalar foydalanuvchilarga oʻzlarining 3D modellarini toʻgʻridan-toʻgʻri yuklash va ularni joylashtirilgan WebGL koʻrish vositasi yordamida namoyish qilish imkonini beradi.

### Atrof-muhitga asoslangan vositalar
Bundan tashqari, Mozilla Foundation oʻzining Firefox brauzerida 27-versiyadan boshlab, vertex va fragment shaderlarini tahrirlash imkonini beruvchi oʻrnatilgan WebGL vositalarini joriy qildi. Bir qator boshqa nosozliklarni tuzatish va profillash vositalari ham paydo boʻldi.
## Manbalar