OpenGL ES: nədir, arxitekturası və tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-05-03 Oxuma vaxtı: 11 dəq

OpenGL ES — açıq spesifikasiyalı, quraşdırılmış və mobil sistemlər üçün nəzərdə tutulmuş qrafik API-dir. O, proqramlaşdırıla bilən şeyder konveyeri vasitəsilə 2D və 3D qrafikasının aparat sürətləndirməli renderinqini təmin edir. Khronos Group, 2025 məlumatlarına görə, OpenGL ES mobil cihazlarda ən geniş yayılmış qrafik API olaraq qalır, dünyada 10 milyarddan çox quraşdırmanı dəstəkləyir. Kitabxana oyunlarda, xəritə xidmətlərində, AR tətbiqlərində və Android və iOS interfeyslərində istifadə olunur.

Əsas məqamlar

  • OpenGL ES — mobil və quraşdırılmış cihazlar üçün çoxplatformalı qrafik API, sənayedə de-fakto standartdır
  • Proqramlaşdırıla bilən konveyer GLSL dilində yazılmış təpə, fraqment və hesablama şeyderlərini əhatə edir
  • Versiyalar OpenGL ES 2.0, 3.0 və 3.2 mövcud funksiyalar dəstini müəyyən edir — hər növbəti versiya şeyder mərhələləri və performans təkmilləşdirmələri əlavə edir
  • EGL — OpenGL ES-i müəyyən platformanın (Android, iOS, Windows) pəncərə sistemi ilə birləşdirən aralıq təbəqədir
  • Metal və Vulkan — daha aşağı səviyyəli alternativlər, daha az əlavə yük təmin edir, lakin inisializasiya üçün daha çox kod tələb edir

OpenGL ES nədir?

OpenGL ES (Open Graphics Library for Embedded Systems) — mobil cihazlar, oyun konsolları və quraşdırılmış sistemlər üçün uyğunlaşdırılmış masaüstü OpenGL API-nin alt dəstidir. Spesifikasiya Khronos Group konsorsiumu tərəfindən hazırlanır və bütün istehsalçılar üçün pulsuzdur. Masaüstü OpenGL-dən fərqli olaraq, OpenGL ES sabit konveyerin köhnəlmiş funksiyalarını silir, yalnız proqramlaşdırıla bilən şeyder konveyerini saxlayır — bu enerji istehlakını azaldır və sürücüləri sadələşdirir.

OpenGL ES-in əsas tətbiq sahəsi — real vaxt rejimində qrafikanın renderinqidir. API mobil oyunlarda (Unity, Unreal Engine), naviqasiya tətbiqlərində, ARCore və ARKit əsaslı AR həllərində, həmçinin Android və iOS sistem interfeyslərində istifadə olunur. StatCounter, 2026 məlumatlarına görə, aktiv smartfonlar arasında OpenGL ES 3.0+ dəstəyi olan cihazların payı 92%-i ötür.

OpenGL ES-in əsas üstünlüyü — çoxplatformalılıqdır. OpenGL ES-də yazılmış eyni tətbiq minimal dəyişikliklərlə Android, iOS, Linux və Windows-da işləyə bilər. Bu, API-ni qrafik mühərriki yenidən yazmadan çoxsaylı platformalara yönəlmiş layihələr üçün optimal seçim edir.

Sabit vs proqramlaşdırıla bilən konveyer

OpenGL-in ilkin versiyaları (2.0-dan əvvəl) sabit konveyerdən — təpə və piksel emalının əvvəlcədən müəyyən edilmiş mərhələlər dəstindən istifadə edirdi. Tərtibatçı yalnız parametrləri konfiqurasiya edə bilirdi: işıq mənbələrinin mövqeyi, materialların xüsusiyyətləri, transformasiya matrisləri. OpenGL ES 2.0-da tətbiq edilən proqramlaşdırıla bilən konveyer sabit mərhələləri şeyderlərlə — GPU-da icra olunan kiçik proqramlarla əvəz etdi. Bu, tərtibatçılara həndəsənin göstərilməsi üzərində tam nəzarət verdi.

Proqramlaşdırıla bilən konveyerə keçid mobil qrafika üçün inqilab oldu. Tərtibatçılar mürəkkəb effektləri həyata keçirmək imkanı əldə etdilər: PBR (Physically Based Rendering), dinamik kölgələr, post-emal və HDR. Sabit konveyer daha az kod tələb edirdi, lakin unikal vizual üslublar yaratmağa imkan vermirdi. Müasir mobil oyunlar tamamilə proqramlaşdırıla bilən konveyerdə işləyir.

OpenGL ES arxitekturası: renderinq konveyeri

Qrafik konveyer OpenGL ES bir neçə ardıcıl mərhələdən ibarətdir, hər biri giriş məlumatlarını təpələrdən ekrandakı piksellərə qədər çevirir. Konveyer arxitekturasını başa düşmək, məhdud enerji və istilik buraxma büdcəsi olan mobil cihazlarda renderinq performansının optimallaşdırılması üçün kritik əhəmiyyət daşıyır.

Konveyer mərhələsiTəyinatProqramlaşdırılır
Vertex ShaderTəpələrin transformasiyası, model-görünüş-proyeksiya matrislərinin tətbiqiBəli — GLSL
TessellationHəndəsənin bölünməsi (yalnız ES 3.2)Bəli — GLSL
Geometry ShaderPrimitivlərdən yeni həndəsənin yaradılmasıBəli — GLSL
RasterizationPrimitivlərin fraqmentlərə (piksellərə) çevrilməsiXeyr — sabit
Fragment ShaderHər fraqmentin rənginin hesablanması, teksturlaşdırma, işıqlandırmaBəli — GLSL
Per-Fragment OperationsDepth test, stencil test, blending, scissor testParametrlərin konfiqurasiyası

Birinci mərhələ — təpə şeyderi — hər təpəni müstəqil emal edir. Bu mərhələdə transformasiyalar tətbiq olunur: modelin lokal məkanından dünya məkanına, sonra kamera məkanına və nəhayət, kəsmə məkanına (clip space) keçid. Transformasiyalar MVP (Model-View-Projection) uniform-matrisləri vasitəsilə verilir, onlar kamera və ya obyektlərin hərəkəti zamanı hər kadrda yenilənir.

Primitivlərin (nöqtələr, xətlər, üçbucaqlar) yığılmasından sonra rasterizasiya aparılır — hər primitivin ekranın hansı piksellərini əhatə etdiyini müəyyən edən proses. Rasterizator interpolyasiya olunmuş atributlarla (rəng, normallar, UV-koordinatlar) fraqmentlər — potensial piksellər yaradır. Fraqmentlərin sayı birbaşa ekranın rezolyusiyasından və primitivin proyeksiya sahəsindən asılıdır.

Fraqment şeyderi yaradılan hər fraqment üçün icra olunur. O, teksturalar, işıq mənbələri və materiallar nəzərə alınmaqla pikselin son rəngini hesablayır. Fraqment şeyderinin çıxışında bir sıra per-fragment testləri aparılır: depth test fraqmentin görünüb-görünmədiyini müəyyən edir; stencil test renderinqi maska ilə məhdudlaşdırır; blending fraqmentin rəngini kadr buferində artıq yazılmış rənglə qarışdırır.

OpenGL ES kontekstinin vəziyyətləri

OpenGL ES sonlu avtomat (state machine) kimi işləyir: bütün parametrlər — cari şeyder, bağlanmış teksturalar, aktiv testlər — kontekstin qlobal vəziyyətində saxlanılır. glEnable, glBindTexture və ya glUseProgram vasitəsilə vəziyyətin dəyişdirilməsi bütün sonrakı çəkmə əmrlərinə təsir edir. Hər vəziyyət dəyişikliyi sürücüdə əlavə yük yaradır, buna görə də draw çağırışlarının vəziyyətə görə qruplaşdırılması əsas optimallaşdırma üsuludur.

OpenGL ES versiyaları və onların imkanları

OpenGL ES 1.0 və 1.1 (2003–2004-cü illərdə buraxılmış) sabit konveyerə əsaslanırdı. Onlar transformasiya, teksturlaşdırma, işıqlandırma və blending-i dəstəkləyirdi, lakin şeyderlərin proqramlaşdırılmasına imkan vermirdi. API Symbian və Windows Mobile əsaslı ilk mobil telefonlarda və cihazlarda istifadə olunurdu. Bu versiyalar artıq köhnəlmiş hesab olunur — müasir cihazlar onları dəstəkləmir.

OpenGL ES 2.0 (2007) GLSL ES dilində təpə və fraqment şeyderləri ilə proqramlaşdırıla bilən konveyer tətbiq etdi. Bu versiya Android 2.2+ və iOS 5+ üçün standart oldu və bu günə qədər cihazların böyük əksəriyyəti tərəfindən dəstəklənir. OpenGL ES 2.0 — Unity, Unreal Engine və Cocos2d-x-in mobil platformalarda işləməsi üçün tələb olunan minimal versiyadır.

OpenGL ES 3.0 (2012) bir neçə kritik imkan əlavə etdi: çoxlu render hədəfləri (MRT), transform feedback, instancing, ETC2/EAC vasitəsilə ixtiyari formatlı teksturalar. Renderinq performansı draw çağırışlarının sayının azaldılması hesabına 2.0 versiyası ilə müqayisədə 30–50% artdı. OpenGL ES 3.1 (2014) hesablama şeyderləri (compute shaders) və buferlərlə atom əməliyyatları tətbiq etdi — bu, GPU-da təkcə qrafik deyil, həm də hesablama tapşırıqlarını (post-emal, parça simulyasiyası, fizika hesablamaları) yerinə yetirməyə imkan verdi.

OpenGL ES 3.2 (2015) — spesifikasiyanın son versiyası — tesselasiya və həndəsə şeyderləri, həmçinin genişləndirilmiş float-tekstur dəsti və blend rejimləri əlavə etdi. 2016-cı ildə daha müasir Vulkan-ın buraxılmasına baxmayaraq, OpenGL ES 3.2 mövcud kodun nəhəng bazası və tətbiqlərin platformalar arasında port edilməsinin sadəliyi sayəsində aktual API olaraq qalır.

VersiyaİlƏsas imkanlarUyğunluq (2026)
1.x2003Sabit konveyer, işıqlandırma, teksturalarKöhnəlmiş
2.02007Proqramlaşdırıla bilən konveyer, GLSL ES99% cihaz
3.02012MRT, instancing, ETC2, transform feedback92% cihaz
3.12014Hesablama şeyderləri, atom buferləri80% cihaz
3.22015Tesselasiya, həndəsə şeyderləri65% cihaz

OpenGL ES-də şeyderlər: GLSL və proqramlaşdırıla bilən konveyer

GLSL ES (OpenGL Shading Language for Embedded Systems) — vektorlar və matrislərlə iş üçün əlavə tiplərlə C sintaksisinə əsaslanan şeyder proqramlaşdırma dilidir. Hər şeyder tətbiqin inisializasiya mərhələsində GPU-nun maşın koduna kompilyasiya olunan proqramdır. CPU kodundan fərqli olaraq, şeyderlər kütləvi-paralel icra olunur: minlərlə təpə və ya fraqment eyni vaxtda emal edilir.

Təpə şeyderləri

Təpə şeyderi torun hər təpəsini emal edir. Onun əsas vəzifəsi daxil olan mövqeyi MVP matrisinə vurmaqla təpənin clip space-də son mövqeyini hesablamaqdır. Bundan əlavə, təpə şeyderi normallar, UV-koordinatlar, rənglər hesablaya və onları varying dəyişənləri vasitəsilə fraqment şeyderinə ötürə bilər. Təpə şeyderinin hər çağırışı müstəqil işləyir ki, bu da GPU-ya kadrda milyonlarla təpəni emal etməyə imkan verir.

glsl
// OpenGL ES 3.0 üçün sadə təpə şeyderi
#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;
}

Fraqment şeyderləri

Fraqment şeyderi ekrandakı hər pikselin rəngini müəyyən edir. O, təpə şeyderindən interpolyasiya olunmuş varying dəyərlərini qəbul edir, bağlanmış teksturalardan tekselləri seçir və işıqlandırma tətbiq edir. Düzgün işıqlandırma üçün diffuse, specular və ambient komponentlərinin hesablanması ilə Phong və ya Blinn-Phong modeli istifadə olunur. Fraqment şeyderinin hər çağırışı bir pikselə uyğundur, buna görə də ümumi çağırış sayı obyektin ekrandakı proyeksiya sahəsinə bərabərdir.

glsl
// OpenGL ES 3.0 üçün tekstur və işıqlandırma ilə sadə fraqment şeyderi
#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);
}

Yuxarıdakı nümunədə fraqment şeyderi UV-koordinatlara görə 2D teksturadan teksel seçir, diffuse işıqlandırmanı normal və işıq istiqamətinin skalyar hasili kimi hesablayır və teksel rəngini işıqlandırma intensivliyinə vurur. Mediump — mobil GPU-larda fraqment şeyderləri üçün tövsiyə olunan dəqiqlikdir: minimal enerji sərfiyyatı ilə kifayət qədər keyfiyyət təmin edir.

Mobil layihələrdə OpenGL ES ilə işə necə başlamaq olar

OpenGL ES ilə Android-də işləmək üçün EGL konteksti — qrafikanın göstəriləcəyi səth yaratmaq tələb olunur. iOS-da GLKit framework-u tərəfindən təmin edilən EGL-ə bənzər EAGL təbəqəsi istifadə olunur. Hər iki halda inisializasiya prosesi pəncərə səthinin yaradılması, kontekst atributlarının konfiqurasiyası və cari renderinq thread-inə bağlanmasını əhatə edir.

kotlin
// Android-də OpenGL ES 3.0-ın inisializasiyası
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 yaradıldıqdan sonra tərtibatçı buferləri konfiqurasiya etməlidir: təpə buferi (VBO) təpə koordinatlarını, normalları və UV-ni saxlayır; indeks buferi (EBO) üçbucaqların formalaşdırılması üçün təpələrin keçid sırasını müəyyən edir. VAO (Vertex Array Object) bütün atributların konfiqurasiyasını bir obyektdə birləşdirir, mesh-lərin dəyişdirilməsi zamanı API çağırışlarının sayını azaldır.

EGL kontekstinin konfiqurasiyası

EGL (Native Platform Graphics Interface) — OpenGL ES ilə pəncərə sistemi arasında aralıq təbəqədir. Android-də EGL çəkmə səthinin yaradılmasını, framebuffer konfiqurasiyasının (rəng dərinliyi, stencil, MSAA) seçilməsini və vsync ilə sinxronizasiyanı idarə edir. Tipik konfiqurasiya 24-bit depth buferi və 8-bit stencil buferi ilə RGBA8888 tələb edir. iOS-da EGL rolunu EAGL CAEAGLLayer ilə birlikdə yerinə yetirir.

Mobil cihazlarda OpenGL ES performansının optimallaşdırılması bir neçə əsas təcrübəni əhatə edir. Çoxsaylı eyni obyektlərin renderinqi üçün instancing-dən (glDrawArraysInstanced) istifadə edin — bu draw çağırışlarının sayını azaldır. Tekstura hovuzları tətbiq edin və draw çağırışları arasında tekstura dəyişdirilməsindən qaçın. Obyektləri şeyderə, sonra teksturaya, daha sonra mesh-ə görə sıralayın — bu ardıcıllıq kontekst vəziyyətinin dəyişdirilməsini minimuma endirir.

OpenGL ES vs Metal vs Vulkan

Metal — Apple-dan aşağı səviyyəli qrafik API, A7 çipindən başlayaraq iOS və macOS-da mövcuddur. Metal minimal sürücü əlavə yükü ilə GPU-ya birbaşa giriş təmin edir, lakin yalnız Apple cihazlarında işləyir. WWDC 2024 məlumatlarına görə, Metal eyni avadanlıqda icra zamanı vəziyyət yoxlamalarının sayını azaltmaqla OpenGL ES ilə müqayisədə 40% -ə qədər daha yüksək performans təmin edir.

Vulkan — Khronos Group tərəfindən hazırlanmış OpenGL ES-in çoxplatformalı varisidir. Vulkan resursların açıq idarə edilməsindən istifadə edir: tərtibatçı özü yaddaş hovuzlarını ayırır, əmr buferləri yaradır və GPU-ya girişi sinxronlaşdırır. Bu, performans üzərində maksimal nəzarət verir, lakin Vulkan inisializasiya kodu OpenGL ES-dən 3–4 dəfə daha həcmlidir. Vulkan Android 7+ -də AAA oyunlar və tələbkar qrafikaya malik tətbiqlər üçün tövsiyə olunur.

OpenGL ES, Metal və Vulkan arasında seçim hədəf platformalardan və performans tələblərindən asılıdır. OpenGL ES inkişaf sürətinin vacib olduğu çoxplatformalı layihələr üçün ən yaxşı seçim olaraq qalır. Metal maksimum performansla iOS/macOS ekosistemi üçün üstünlük təşkil edir. Vulkan — hər millisaniyəlik kadrın kritik olduğu və inkişaf büdcəsinin aşağı səviyyəli optimallaşdırmaya investisiya etməyə imkan verdiyi layihələr üçün seçimdir.

XarakteristikaOpenGL ESMetalVulkan
PlatformalarAndroid, iOS, Windows, LinuxYalnız iOS, macOSAndroid, Windows, Linux (iOS yox)
API səviyyəsiYüksək (state machine)OrtaAşağı (explicit)
İnisializasiya kodu50–100 sətir100–200 sətir300–500 sətir
Yaddaş nəzarətiAvtomatikYarı avtomatikTamamilə əl ilə
PerformansƏsas+20–40% vs ES+30–60% vs ES

Tez-tez verilən suallar

OpenGL və OpenGL ES arasında fərq nədir?

OpenGL ES — sabit konveyerin köhnəlmiş funksiyalarının silindiyi masaüstü OpenGL-in alt dəstidir. OpenGL ES daha kiçik spesifikasiya həcminə, sadələşdirilmiş dəqiqlik profilinə malikdir və mobil cihazların aşağı enerji istehlakı üçün optimallaşdırılmışdır.

Android-də OpenGL ES-in hansı versiyası dəstəklənir?

Android bütün cihazlarda OpenGL ES 2.0, Android 4.3+ -də 3.0, Android 5.0+ -də 3.1, Android 7.0+ olan seçilmiş cihazlarda 3.2 dəstəkləyir. Aktual dəstək səviyyəsini EGL_CONFIG_CAVEAT vasitəsilə yoxlamaq olar.

OpenGL ES şeyderlərini yazmaq üçün hansı dildən istifadə olunur?

GLSL ES (OpenGL Shading Language for Embedded Systems) — vec2/vec3/vec4/mat4 tipləri və texture, normalize, dot daxili funksiyaları olan C-ə bənzər dildir. ES 3.0+ üçün #version 300 es direktivindən istifadə olunur.

2026-cı ildə OpenGL ES öyrənməyə dəyərmi?

Bəli, OpenGL ES inkişaf sürəti və geniş cihaz spektrinin dəstəyinin prioritet olduğu çoxplatformalı layihələr üçün aktual olaraq qalır. iOS ekosistemi üçün Metal, maksimum performanslı yeni layihələr üçün Vulkan öyrənmək daha yaxşıdır.

Cihazda OpenGL ES versiyasını necə yoxlamaq olar?

Android-də kontekst yaradıldıqdan sonra GLES30.glGetString(GLES30.GL_VERSION) çağırın. Sətir versiya nömrəsi və venzor haqqında məlumat ehtiva edir. iOS-da [EAGLContext currentContext] və API xüsusiyyətindən istifadə edin.

Nəticə

  • OpenGL ES — 10 milyarddan çox quraşdırmada dəstəklənən mobil cihazlar üçün əsas qrafik API
  • Proqramlaşdırıla bilən konveyer GLSL ES-də təpə və fraqment şeyderləri ilə renderinq üzərində tam nəzarət verir
  • Versiyalar 2.0, 3.0, 3.1, 3.2 şeyder mərhələləri və mövcud funksionallıq dəsti ilə fərqlənir
  • EGL OpenGL ES-i pəncərə sistemi ilə birləşdirir, çəkmə səthini və sinxronizasiyanı idarə edir
  • Metal və Vulkan — daha məhsuldar alternativlər, lakin daha çox kod və platforma spesifikliyi tələb edir
  • Optimallaşdırma instancing, draw çağırışlarının vəziyyətə görə sıralanması və tekstura hovuzlarını əhatə edir
  • Çoxplatformalı layihələr üçün OpenGL ES sadəliyi və yetkin ekosistemi sayəsində optimal seçim olaraq qalır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun