OpenGL ES: nima, arxitekturasi va qo'llanilishi

Muallif: IT Sectr Nashr etilgan: 2026-05-03 O'qish vaqti: 11 daq

OpenGL ES — ochiq spetsifikatsiyali grafik API bo'lib, o'rnatilgan va mobil tizimlar uchun mo'ljallangan. U dasturlashtiriladigan shader konveyeri orqali 2D va 3D grafikaning apparat tezlashtirilgan renderlashini ta'minlaydi. Khronos Group, 2025 ma'lumotlariga ko'ra, OpenGL ES mobil qurilmalarda eng keng tarqalgan grafik API bo'lib qolmoqda, dunyo bo'ylab 10 milliarddan ortiq o'rnatishni qo'llab-quvvatlaydi. Kutubxona o'yinlarda, xarita xizmatlarida, AR ilovalarida va Android va iOS interfeyslarida ishlatiladi.

Asosiy ma'lumotlar

  • OpenGL ES — mobil va o'rnatilgan qurilmalar uchun ko'p platformali grafik API, sanoatda de-fakto standart
  • Dasturlashtiriladigan konveyer GLSL tilida yozilgan cho'qqi, fragment va hisoblash shaderlarini o'z ichiga oladi
  • Versiyalar OpenGL ES 2.0, 3.0 va 3.2 mavjud funksiyalar to'plamini belgilaydi — har bir keyingi versiya shader bosqichlari va ishlash yaxshilanishlarini qo'shadi
  • EGL — OpenGL ES ni ma'lum platformaning (Android, iOS, Windows) oyna tizimi bilan bog'laydigan oraliq qatlam
  • Metal va Vulkan — past darajali alternativlar, kamroq qo'shimcha yukni ta'minlaydi, lekin ishga tushirish uchun ko'proq kod talab qiladi

OpenGL ES nima?

OpenGL ES (Open Graphics Library for Embedded Systems) — mobil qurilmalar, o'yin konsollari va o'rnatilgan tizimlar uchun moslashtirilgan desktop OpenGL API ning kichik to'plamidir. Spetsifikatsiya Khronos Group konsorsiumi tomonidan ishlab chiqiladi va barcha ishlab chiqaruvchilar uchun bepul. Desktop OpenGL dan farqli o'laroq, OpenGL ES sobit konveyerning eskirgan funksiyalarini olib tashlaydi, faqat dasturlashtiriladigan shader konveyerini qoldiradi — bu energiya sarfini kamaytiradi va drayverlarni soddalashtiradi.

OpenGL ES ning asosiy qo'llanish sohasi — real vaqt rejimida grafika renderlash. API mobil o'yinlarda (Unity, Unreal Engine), navigatsiya ilovalarida, ARCore va ARKit asosidagi AR yechimlarida, shuningdek Android va iOS tizim interfeyslarida ishlatiladi. StatCounter, 2026 ma'lumotlariga ko'ra, faol smartfonlar orasida OpenGL ES 3.0+ qo'llab-quvvatlovchi qurilmalarning ulushi 92% dan oshadi.

OpenGL ES ning asosiy afzalligi — ko'p platformalilik. OpenGL ES da yozilgan bir xil ilova minimal o'zgarishlar bilan Android, iOS, Linux va Windows da ishlashi mumkin. Bu API ni grafik dvigatelni qayta yozmasdan ko'plab platformalarga mo'ljallangan loyihalar uchun optimal tanlov qiladi.

Sobit vs dasturlashtiriladigan konveyer

OpenGL ning dastlabki versiyalari (2.0 dan oldin) sobit konveyerdan — cho'qqi va pikselni qayta ishlashning oldindan belgilangan bosqichlari to'plamidan foydalangan. Dasturchi faqat parametrlarni sozlashi mumkin edi: yorug'lik manbalarining joylashuvi, materiallarning xususiyatlari, transformatsiya matritsalari. OpenGL ES 2.0 da joriy qilingan dasturlashtiriladigan konveyer sobit bosqichlarni shaderlar bilan — GPU da bajariladigan kichik dasturlar bilan almashtirdi. Bu dasturchilarga geometriyani ko'rsatish ustidan to'liq nazorat berdi.

Dasturlashtiriladigan konveyerga o'tish mobil grafikada inqilob bo'ldi. Dasturchilar murakkab effektlarni amalga oshirish imkoniyatiga ega bo'ldilar: PBR (Physically Based Rendering), dinamik soyalar, post-ishlov va HDR. Sobit konveyer kamroq kod talab qilgan, lekin noyob vizual uslublarni yaratishga imkon bermagan. Zamonaviy mobil o'yinlar to'liq dasturlashtiriladigan konveyerda ishlaydi.

OpenGL ES arxitekturasi: renderlash konveyeri

Grafik konveyer OpenGL ES bir necha ketma-ket bosqichlardan iborat, har biri kirish ma'lumotlarini cho'qqilardan ekrandagi piksellargacha o'zgartiradi. Konveyer arxitekturasini tushunish, cheklangan energiya va issiqlik byudjetiga ega mobil qurilmalarda renderlash samaradorligini optimallashtirish uchun juda muhimdir.

Konveyer bosqichiVazifasiDasturlashtiriladi
Vertex ShaderCho'qqilarni transformatsiyalash, model-ko'rinish-proyeksiya matritsalarini qo'llashHa — GLSL
TessellationGeometriyani bo'lish (faqat ES 3.2)Ha — GLSL
Geometry ShaderPrimitivlardan yangi geometriya yaratishHa — GLSL
RasterizationPrimitivlarni fragmentlarga (piksellarga) aylantirishYo'q — sobit
Fragment ShaderHar bir fragment rangini hisoblash, teksturalash, yoritishHa — GLSL
Per-Fragment OperationsDepth test, stencil test, blending, scissor testParametrlarni sozlash

Birinchi bosqich — cho'qqi shaderi — har bir cho'qqini mustaqil qayta ishlaydi. Bu bosqichda transformatsiyalar qo'llaniladi: modelning lokal fazosidan dunyo fazosiga, keyin kamera fazosiga va nihoyat, kesish fazosiga (clip space) o'tish. Transformatsiyalar MVP (Model-View-Projection) uniform-matritsalari orqali beriladi, ular kamera yoki ob'ektlar harakati paytida har kadrda yangilanadi.

Primitivlar (nuqtalar, chiziqlar, uchburchaklar) yig'ilgandan so'ng rasterizatsiya amalga oshiriladi — har bir primitiv ekranning qaysi piksellarini qoplashini aniqlash jarayoni. Rasterizator interpolyatsiya qilingan atributlar (rang, normallar, UV koordinatalari) bilan fragmentlar — potentsial piksellarni yaratadi. Fragmentlar soni to'g'ridan-to'g'ri ekran o'lchamiga va primitiv proyeksiyasining maydoniga bog'liq.

Fragment shaderi yaratilgan har bir fragment uchun bajariladi. U teksturalar, yorug'lik manbalari va materiallarni hisobga olgan holda pikselning yakuniy rangini hisoblaydi. Fragment shaderining chiqishida bir qator per-fragment testlari o'tkaziladi: depth test fragmentning ko'rinadiganligini aniqlaydi; stencil test renderlashni niqob bo'yicha cheklaydi; blending fragment rangini kadr buferida allaqachon yozilgan rang bilan aralashtiradi.

OpenGL ES konteksti holatlari

OpenGL ES holat mashinasi (state machine) sifatida ishlaydi: barcha sozlamalar — joriy shader, bog'langan teksturalar, faol testlar — kontekstning global holatida saqlanadi. glEnable, glBindTexture yoki glUseProgram orqali holatni o'zgartirish barcha keyingi chizish buyruqlariga ta'sir qiladi. Har bir holat o'zgarishi drayverda qo'shimcha yuk keltirib chiqaradi, shuning uchun draw chaqiruvlarini holat bo'yicha guruhlash asosiy optimallashtirish usulidir.

OpenGL ES versiyalari va ularning imkoniyatlari

OpenGL ES 1.0 va 1.1 (2003–2004 yillarda chiqarilgan) sobit konveyerga asoslangan edi. Ular transformatsiya, teksturalash, yoritish va blending ni qo'llab-quvvatlagan, ammo shaderlarni dasturlashga ruxsat bermagan. API Symbian va Windows Mobile asosidagi dastlabki mobil telefonlar va qurilmalarda ishlatilgan. Bugungi kunda bu versiyalar eskirgan hisoblanadi — zamonaviy qurilmalar ularni qo'llab-quvvatlamaydi.

OpenGL ES 2.0 (2007) GLSL ES tilida cho'qqi va fragment shaderlari bilan dasturlashtiriladigan konveyerni joriy qildi. Bu versiya Android 2.2+ va iOS 5+ uchun standartga aylandi va bugungi kungacha qurilmalarning katta ko'pchiligi tomonidan qo'llab-quvvatlanadi. OpenGL ES 2.0 — Unity, Unreal Engine va Cocos2d-x ni mobil platformalarda ishlatish uchun zarur bo'lgan minimal versiya.

OpenGL ES 3.0 (2012) bir nechta muhim imkoniyatlarni qo'shdi: bir nechta render nishonlari (MRT), transform feedback, instancing, ETC2/EAC orqali ixtiyoriy formatdagi teksturalar. Renderlash samaradorligi draw chaqiruvlari sonining kamayishi hisobiga 2.0 versiyasiga nisbatan 30–50% ga oshdi. OpenGL ES 3.1 (2014) hisoblash shaderlari (compute shaders) va buferlar bilan atom operatsiyalarini joriy qildi — bu GPU da nafaqat grafik, balki hisoblash vazifalarini (post-ishlov, mato simulyatsiyasi, fizika hisoblari) bajarishga imkon berdi.

OpenGL ES 3.2 (2015) — spetsifikatsiyaning so'nggi versiyasi — tesselatsiya va geometriya shaderlari, shuningdek kengaytirilgan float-teksturalar to'plami va blend rejimlarini qo'shdi. 2016 yilda zamonaviyroq Vulkan ning chiqarilishiga qaramay, OpenGL ES 3.2 mavjud kodning ulkan bazasi va ilovalarni platformalar o'rtasida ko'chirishning soddaligi tufayli dolzarb API bo'lib qolmoqda.

VersiyaYilAsosiy imkoniyatlarMoslik (2026)
1.x2003Sobit konveyer, yoritish, teksturalarEskirgan
2.02007Dasturlashtiriladigan konveyer, GLSL ES99% qurilmalar
3.02012MRT, instancing, ETC2, transform feedback92% qurilmalar
3.12014Hisoblash shaderlari, atom buferlari80% qurilmalar
3.22015Tesselatsiya, geometriya shaderlari65% qurilmalar

OpenGL ES da shaderlar: GLSL va dasturlashtiriladigan konveyer

GLSL ES (OpenGL Shading Language for Embedded Systems) — vektorlar va matritsalar bilan ishlash uchun qo'shimcha turlarga ega C sintaksisiga asoslangan shader dasturlash tili. Har bir shader ilova ishga tushirish bosqichida GPU ning mashina kodiga kompilyatsiya qilinadigan dasturdir. CPU kodidan farqli o'laroq, shaderlar ommaviy-parallel bajariladi: minglab cho'qqi yoki fragment bir vaqtning o'zida qayta ishlanadi.

Cho'qqi shaderlari

Cho'qqi shaderi to'rning har bir cho'qqisini qayta ishlaydi. Uning asosiy vazifasi kirish pozitsiyasini MVP matritsasiga ko'paytirish orqali cho'qqining clip space dagi yakuniy pozitsiyasini hisoblashdir. Bundan tashqari, cho'qqi shaderi normallar, UV koordinatalari, ranglarni hisoblab, ularni varying o'zgaruvchilari orqali fragment shaderiga uzatishi mumkin. Cho'qqi shaderining har bir chaqiruvi mustaqil ishlaydi, bu GPU ga bir kadrda millionlab cho'qqilarni qayta ishlashga imkon beradi.

glsl
// OpenGL ES 3.0 uchun oddiy cho'qqi shaderi
#version 300 es
layout(location = 0) in vec4 a_position;
layout(location = 1) in vec3 a_normal;
layout(location = 2) in vec2 a_texCoord;

uniform mat4 u_mvpMatrix;

out vec3 v_normal;
out vec2 v_texCoord;

void main() {
    gl_Position = u_mvpMatrix * a_position;
    v_normal = mat3(u_mvpMatrix) * a_normal;
    v_texCoord = a_texCoord;
}

Fragment shaderlari

Fragment shaderi ekrandagi har bir pikselning rangini aniqlaydi. U cho'qqi shaderidan interpolyatsiya qilingan varying qiymatlarini qabul qiladi, bog'langan teksturalardan teksellarni tanlaydi va yoritishni qo'llaydi. To'g'ri yoritish uchun diffuse, specular va ambient komponentlarini hisoblash bilan Phong yoki Blinn-Phong modeli ishlatiladi. Fragment shaderining har bir chaqiruvi bitta pikselga to'g'ri keladi, shuning uchun umumiy chaqiruvlar soni ob'ektning ekrandagi proyeksiya maydoniga teng.

glsl
// OpenGL ES 3.0 uchun tekstura va yoritish bilan oddiy fragment shaderi
#version 300 es
precision mediump float;

in vec3 v_normal;
in vec2 v_texCoord;

uniform sampler2D u_texture;
uniform vec3 u_lightDir;

out vec4 fragColor;

void main() {
    vec4 texel = texture(u_texture, v_texCoord);
    vec3 normal = normalize(v_normal);
    float diffuse = max(dot(normal, u_lightDir), 0.0);
    fragColor = vec4(texel.rgb * diffuse, texel.a);
}

Yuqoridagi misolda fragment shaderi UV koordinatalari bo'yicha 2D teksturadan teksel tanlaydi, diffuse yoritishni normal va yorug'lik yo'nalishining skalyar ko'paytmasi sifatida hisoblaydi va teksel rangini yoritish intensivligiga ko'paytiradi. Mediump — mobil GPU larda fragment shaderlari uchun tavsiya etiladigan aniqlik: minimal energiya sarfi bilan yetarli sifatni ta'minlaydi.

Mobil loyihalarda OpenGL ES bilan ishlashni qanday boshlash mumkin

OpenGL ES bilan Android da ishlash uchun EGL kontekstini — grafik ko'rsatiladigan sirtni yaratish kerak. iOS da GLKit framework i tomonidan taqdim etiladigan EGL ga o'xshash EAGL qatlami ishlatiladi. Ikkala holatda ham ishga tushirish jarayoni oyna sirtini yaratish, kontekst atributlarini sozlash va joriy renderlash oqimiga bog'lashni o'z ichiga oladi.

kotlin
// Android da OpenGL ES 3.0 ni ishga tushirish
class MyGLRenderer : GLSurfaceView.Renderer {

    private val vertexShaderCode = "#version 300 es\n..."
    private val fragmentShaderCode = "#version 300 es\n..."

    override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        GLES30.glClearColor(0.1f, 0.1f, 0.2f, 1.0f)
        GLES30.glEnable(GLES30.GL_DEPTH_TEST)
    }

    override fun onDrawFrame(gl: GL10?) {
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT)
        // bind VBO, set uniforms, draw elements
    }

    override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
        GLES30.glViewport(0, 0, width, height)
    }
}

Kontekst yaratilgandan so'ng dasturchi buferlarni sozlashi kerak: cho'qqi buferi (VBO) cho'qqi koordinatalari, normallar va UV ni o'z ichiga oladi; indeks buferi (EBO) uchburchaklarni hosil qilish uchun cho'qqilarni aylanib o'tish tartibini belgilaydi. VAO (Vertex Array Object) barcha atributlarning sozlamalarini bitta ob'ektda birlashtiradi, mesh larni almashtirishda API chaqiruvlari sonini kamaytiradi.

EGL kontekstini sozlash

EGL (Native Platform Graphics Interface) — OpenGL ES va oyna tizimi o'rtasidagi oraliq qatlam. Android da EGL chizish sirtini yaratish, framebuffer konfiguratsiyasini (rang chuqurligi, stencil, MSAA) tanlash va vsync bilan sinxronlashni boshqaradi. Odatiy konfiguratsiya 24 bitli depth buferi va 8 bitli stencil buferi bilan RGBA8888 ni talab qiladi. iOS da EGL rolini EAGL CAEAGLLayer bilan birgalikda bajaradi.

Mobil qurilmalarda OpenGL ES samaradorligini optimallashtirish bir necha asosiy amaliyotlarni o'z ichiga oladi. Ko'plab bir xil ob'ektlarni renderlash uchun instancing dan (glDrawArraysInstanced) foydalaning — bu draw chaqiruvlari sonini kamaytiradi. Tekstura hovuzlarini qo'llang va draw chaqiruvlari o'rtasida tekstura almashtirishdan saqlaning. Ob'ektlarni shader bo'yicha, keyin tekstura bo'yicha, so'ngra mesh bo'yicha tartiblang — bu ketma-ketlik kontekst holatini almashtirishni minimallashtiradi.

OpenGL ES vs Metal vs Vulkan

Metal — Apple dan past darajali grafik API, A7 chipidan boshlab iOS va macOS da mavjud. Metal minimal drayver qo'shimcha yuki bilan GPU ga to'g'ridan-to'g'ri kirishni ta'minlaydi, lekin faqat Apple qurilmalarida ishlaydi. WWDC 2024 ma'lumotlariga ko'ra, Metal bir xil uskunada ish vaqtida holat tekshiruvlari sonini kamaytirish orqali OpenGL ES ga nisbatan 40% gacha yuqori samaradorlikni ta'minlaydi.

Vulkan — Khronos Group tomonidan ishlab chiqilgan OpenGL ES ning ko'p platformali vorisi. Vulkan resurslarni aniq boshqarishdan foydalanadi: dasturchi o'zi xotira hovuzlarini ajratadi, buyruq buferlarini yaratadi va GPU ga kirishni sinxronlaydi. Bu samaradorlik ustidan maksimal nazorat beradi, ammo Vulkan ishga tushirish kodi OpenGL ES dan 3–4 baravar katta. Vulkan Android 7+ da AAA o'yinlar va talabchan grafikaga ega ilovalar uchun tavsiya etiladi.

OpenGL ES, Metal va Vulkan o'rtasidagi tanlov maqsadli platformalar va samaradorlik talablariga bog'liq. OpenGL ES ishlab chiqish tezligi muhim bo'lgan ko'p platformali loyihalar uchun eng yaxshi tanlov bo'lib qolmoqda. Metal maksimal samaradorlik bilan iOS/macOS ekotizimi uchun afzal. Vulkan — har bir millisekundlik kadr muhim bo'lgan va ishlab chiqish byudjeti past darajali optimallashtirishga sarmoya kiritishga imkon beradigan loyihalar uchun tanlov.

XarakteristikaOpenGL ESMetalVulkan
PlatformalarAndroid, iOS, Windows, LinuxFaqat iOS, macOSAndroid, Windows, Linux (iOS yo'q)
API darajasiYuqori (state machine)O'rtaPast (explicit)
Ishga tushirish kodi50–100 qator100–200 qator300–500 qator
Xotira nazoratiAvtomatikYarim avtomatikTo'liq qo'lda
SamaradorlikAsosiy+20–40% vs ES+30–60% vs ES

Tez-tez beriladigan savollar

OpenGL va OpenGL ES o'rtasidagi farq nima?

OpenGL ES — sobit konveyerning eskirgan funksiyalari olib tashlangan desktop OpenGL ning kichik to'plamidir. OpenGL ES kichikroq spetsifikatsiya hajmiga, soddalashtirilgan aniqlik profiliga ega va mobil qurilmalarning kam energiya iste'moli uchun optimallashtirilgan.

Android da OpenGL ES ning qaysi versiyasi qo'llab-quvvatlanadi?

Android barcha qurilmalarda OpenGL ES 2.0, Android 4.3+ da 3.0, Android 5.0+ da 3.1, Android 7.0+ bo'lgan tanlangan qurilmalarda 3.2 ni qo'llab-quvvatlaydi. Joriy qo'llab-quvvatlash darajasini EGL_CONFIG_CAVEAT orqali tekshirish mumkin.

OpenGL ES shaderlarini yozish uchun qaysi tildan foydalaniladi?

GLSL ES (OpenGL Shading Language for Embedded Systems) — vec2/vec3/vec4/mat4 turlari va texture, normalize, dot ichki funksiyalari bilan C ga o'xshash til. ES 3.0+ uchun #version 300 es direktivasidan foydalaniladi.

2026 yilda OpenGL ES ni o'rganish kerakmi?

Ha, OpenGL ES ishlab chiqish tezligi va keng qurilmalar spektrini qo'llab-quvvatlash ustuvor bo'lgan ko'p platformali loyihalar uchun dolzarb bo'lib qolmoqda. iOS ekotizimi uchun Metal, maksimal samaradorlikka ega yangi loyihalar uchun Vulkan ni o'rganish yaxshiroq.

Qurilmada OpenGL ES versiyasini qanday tekshirish mumkin?

Android da kontekst yaratilgandan so'ng GLES30.glGetString(GLES30.GL_VERSION) ni chaqiring. Qator versiya raqami va ishlab chiqaruvchi haqida ma'lumotni o'z ichiga oladi. iOS da [EAGLContext currentContext] va API xususiyatidan foydalaning.

Xulosa

  • OpenGL ES — 10 milliarddan ortiq o'rnatishda qo'llab-quvvatlanadigan mobil qurilmalar uchun asosiy grafik API
  • Dasturlashtiriladigan konveyer GLSL ES da cho'qqi va fragment shaderlari bilan renderlash ustidan to'liq nazorat beradi
  • Versiyalar 2.0, 3.0, 3.1, 3.2 shader bosqichlari va mavjud funksionallik to'plami bilan farqlanadi
  • EGL OpenGL ES ni oyna tizimi bilan bog'laydi, chizish sirtini va sinxronlashni boshqaradi
  • Metal va Vulkan — samaraliroq alternativlar, lekin ko'proq kod va platforma ixtisoslashuvini talab qiladi
  • Optimallashtirish instancing, draw chaqiruvlarini holat bo'yicha tartiblash va tekstura hovuzlarini o'z ichiga oladi
  • Ko'p platformali loyihalar uchun OpenGL ES soddaligi va etuk ekotizimi tufayli optimal tanlov bo'lib qolmoqda

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing