OpenGL ES एक ओपन स्पेसिफिकेशन वाला ग्राफ़िक्स API है जो एम्बेडेड और मोबाइल सिस्टम के लिए डिज़ाइन किया गया है। यह प्रोग्रामेबल शेडर पाइपलाइन के माध्यम से हार्डवेयर-त्वरित 2D और 3D ग्राफ़िक्स रेंडरिंग प्रदान करता है। Khronos Group, 2025 के अनुसार, OpenGL ES मोबाइल उपकरणों पर सबसे व्यापक ग्राफ़िक्स API बना हुआ है, जो दुनिया भर में 10 बिलियन से अधिक इंस्टॉलेशन का समर्थन करता है। लाइब्रेरी का उपयोग गेम, मैपिंग सेवाओं, AR अनुप्रयोगों और Android एवं iOS पर इंटरफ़ेस में किया जाता है।
मुख्य बिंदु
OpenGL ES (एम्बेडेड सिस्टम के लिए ओपन ग्राफ़िक्स लाइब्रेरी) मोबाइल उपकरणों, गेम कंसोल और एम्बेडेड सिस्टम के लिए अनुकूलित डेस्कटॉप OpenGL API का एक उपसमूह है। विनिर्देश Khronos Group कंसोर्टियम द्वारा विकसित किया गया है और सभी निर्माताओं के लिए निःशुल्क उपलब्ध है। डेस्कटॉप OpenGL के विपरीत, OpenGL ES फिक्स्ड-फ़ंक्शन पाइपलाइन की पुरानी सुविधाओं को हटा देता है, केवल प्रोग्रामेबल शेडर पाइपलाइन छोड़ता है — इससे बिजली की खपत कम होती है और ड्राइवर सरल होते हैं।
OpenGL ES का मुख्य अनुप्रयोग क्षेत्र रीयल-टाइम ग्राफ़िक्स रेंडरिंग है। API का उपयोग मोबाइल गेम (Unity, Unreal Engine), नेविगेशन ऐप, ARCore और ARKit पर आधारित AR समाधान, साथ ही Android और iOS सिस्टम इंटरफ़ेस में किया जाता है। StatCounter, 2026 के अनुसार, सक्रिय स्मार्टफ़ोन में OpenGL ES 3.0+ समर्थन वाले उपकरणों की हिस्सेदारी 92% से अधिक है।
OpenGL ES का मुख्य लाभ क्रॉस-प्लेटफ़ॉर्म संगतता है। OpenGL ES में लिखा गया एक ही एप्लिकेशन न्यूनतम बदलावों के साथ Android, iOS, Linux और Windows पर चल सकता है। यह API को ग्राफ़िक्स इंजन को फिर से लिखे बिना कई प्लेटफ़ॉर्म को लक्षित करने वाली परियोजनाओं के लिए एक इष्टतम विकल्प बनाता है।
OpenGL के शुरुआती संस्करण (2.0 से पहले) फिक्स्ड पाइपलाइन का उपयोग करते थे — वर्टेक्स और पिक्सेल प्रसंस्करण के पूर्वनिर्धारित चरणों का एक सेट। डेवलपर केवल पैरामीटर कॉन्फ़िगर कर सकता था: प्रकाश स्रोतों की स्थिति, सामग्री गुण, रूपांतरण मैट्रिक्स। प्रोग्रामेबल पाइपलाइन, जो OpenGL ES 2.0 में शुरू की गई, ने फिक्स्ड चरणों को शेडर से बदल दिया — GPU पर निष्पादित छोटे प्रोग्राम। इसने डेवलपर्स को ज्यामिति रेंडरिंग पर पूर्ण नियंत्रण दिया।
प्रोग्रामेबल पाइपलाइन में संक्रमण मोबाइल ग्राफ़िक्स के लिए एक क्रांति था। डेवलपर्स को जटिल प्रभाव लागू करने की क्षमता मिली: PBR (फ़िज़िकली बेस्ड रेंडरिंग), डायनामिक शैडो, पोस्ट-प्रोसेसिंग और HDR। फिक्स्ड पाइपलाइन में कम कोड की आवश्यकता थी लेकिन अद्वितीय दृश्य शैली बनाने की अनुमति नहीं देती थी। आधुनिक मोबाइल गेम पूरी तरह से प्रोग्रामेबल पाइपलाइन पर काम करते हैं।
ग्राफ़िक्स पाइपलाइन OpenGL ES में कई अनुक्रमिक चरण होते हैं, जिनमें से प्रत्येक वर्टेक्स से स्क्रीन पर पिक्सेल तक के पथ पर इनपुट डेटा को रूपांतरित करता है। पाइपलाइन आर्किटेक्चर को समझना सीमित ऊर्जा और तापीय बजट वाले मोबाइल उपकरणों पर रेंडरिंग प्रदर्शन को अनुकूलित करने के लिए महत्वपूर्ण है।
| पाइपलाइन चरण | उद्देश्य | प्रोग्रामेबल |
|---|---|---|
| वर्टेक्स शेडर | वर्टेक्स रूपांतरण, मॉडल-व्यू-प्रोजेक्शन मैट्रिक्स लागू करना | हाँ — GLSL |
| टेसलेशन | ज्यामिति उपविभाजन (केवल ES 3.2) | हाँ — GLSL |
| ज्यामिति शेडर | प्रिमिटिव से नई ज्यामिति उत्पन्न करना | हाँ — GLSL |
| रेस्टराइज़ेशन | प्रिमिटिव को फ़्रैगमेंट (पिक्सेल) में बदलना | नहीं — फिक्स्ड |
| फ़्रैगमेंट शेडर | प्रत्येक फ़्रैगमेंट का रंग, टेक्सचरिंग, प्रकाश गणना | हाँ — GLSL |
| प्रति-फ़्रैगमेंट संचालन | डेप्थ टेस्ट, स्टेंसिल टेस्ट, ब्लेंडिंग, सिज़र टेस्ट | पैरामीटर कॉन्फ़िगरेशन |
पहला चरण — वर्टेक्स शेडर — प्रत्येक वर्टेक्स को स्वतंत्र रूप से प्रोसेस करता है। इस चरण में रूपांतरण लागू किए जाते हैं: मॉडल के स्थानीय स्पेस से विश्व स्पेस, फिर कैमरा स्पेस और अंततः क्लिप स्पेस में अनुवाद। रूपांतरण MVP (मॉडल-व्यू-प्रोजेक्शन) यूनिफ़ॉर्म मैट्रिक्स के माध्यम से सेट किए जाते हैं, जो कैमरा या ऑब्जेक्ट चलने पर प्रत्येक फ्रेम अपडेट होते हैं।
प्रिमिटिव असेंबली (पॉइंट, लाइन, त्रिकोण) के बाद, रेस्टराइज़ेशन किया जाता है — यह निर्धारित करने की प्रक्रिया कि प्रत्येक प्रिमिटिव स्क्रीन के किन पिक्सेल को कवर करता है। रेस्टराइज़र इंटरपोलेटेड विशेषताओं (रंग, नॉर्मल, UV निर्देशांक) के साथ फ़्रैगमेंट — संभावित पिक्सेल उत्पन्न करता है। फ़्रैगमेंट की संख्या सीधे स्क्रीन रिज़ॉल्यूशन और प्रिमिटिव के प्रोजेक्शन क्षेत्र पर निर्भर करती है।
फ़्रैगमेंट शेडर प्रत्येक उत्पन्न फ़्रैगमेंट के लिए निष्पादित होता है। यह टेक्सचर, प्रकाश स्रोतों और सामग्रियों को ध्यान में रखते हुए अंतिम पिक्सेल रंग की गणना करता है। फ़्रैगमेंट शेडर का आउटपुट प्रति-फ़्रैगमेंट परीक्षणों की एक श्रृंखला से गुज़रता है: डेप्थ टेस्ट निर्धारित करता है कि फ़्रैगमेंट दिखाई दे रहा है या नहीं; स्टेंसिल टेस्ट मास्क द्वारा रेंडरिंग को प्रतिबंधित करता है; ब्लेंडिंग फ़्रैगमेंट के रंग को फ़्रेमबफ़र में पहले से लिखे रंग के साथ मिलाती है।
OpenGL ES एक स्टेट मशीन के रूप में काम करता है: सभी सेटिंग्स — वर्तमान शेडर, बाउंड टेक्सचर, सक्षम परीक्षण — संदर्भ की वैश्विक स्थिति में संग्रहीत होते हैं। glEnable, glBindTexture या glUseProgram के माध्यम से स्थिति बदलने से बाद के सभी ड्रॉ कमांड प्रभावित होते हैं। प्रत्येक स्थिति स्विच ड्राइवर में ओवरहेड उत्पन्न करता है, इसलिए ड्रॉ कॉल को स्थिति के अनुसार समूहित करना मुख्य अनुकूलन तकनीक है।
OpenGL ES 1.0 और 1.1 (2003–2004 में जारी) फिक्स्ड पाइपलाइन पर आधारित थे। वे रूपांतरण, टेक्सचरिंग, प्रकाश और ब्लेंडिंग का समर्थन करते थे, लेकिन शेडर प्रोग्रामिंग की अनुमति नहीं देते थे। API का उपयोग शुरुआती मोबाइल फ़ोन और Symbian एवं Windows Mobile पर आधारित उपकरणों में किया जाता था। आज ये संस्करण पुराने माने जाते हैं — आधुनिक उपकरण इनका समर्थन नहीं करते।
OpenGL ES 2.0 (2007) ने GLSL ES में वर्टेक्स और फ़्रैगमेंट शेडर के साथ प्रोग्रामेबल पाइपलाइन शुरू की। यह संस्करण Android 2.2+ और iOS 5+ के लिए मानक बन गया और आज भी अधिकांश उपकरणों द्वारा समर्थित है। OpenGL ES 2.0 मोबाइल प्लेटफ़ॉर्म पर Unity, Unreal Engine और Cocos2d-x के लिए आवश्यक न्यूनतम संस्करण है।
OpenGL ES 3.0 (2012) ने कई महत्वपूर्ण क्षमताएँ जोड़ीं: मल्टीपल रेंडर टार्गेट (MRT), ट्रांसफ़ॉर्म फ़ीडबैक, इंस्टेंसिंग, ETC2/EAC के माध्यम से मनमाना प्रारूप टेक्सचर। ड्रॉ कॉल की संख्या कम करके रेंडरिंग प्रदर्शन संस्करण 2.0 की तुलना में 30–50% बढ़ गया। OpenGL ES 3.1 (2014) ने कंप्यूट शेडर और परमाणु बफ़र संचालन शुरू किए — इससे GPU पर न केवल ग्राफ़िक्स बल्कि कंप्यूट कार्य (पोस्ट-प्रोसेसिंग, कपड़ा सिमुलेशन, भौतिकी गणना) भी निष्पादित करना संभव हो गया।
OpenGL ES 3.2 (2015) — विनिर्देश का नवीनतम संस्करण — टेसलेशन और ज्यामिति शेडर, साथ ही फ़्लोट टेक्सचर और ब्लेंड मोड का विस्तारित सेट जोड़ा। 2016 में अधिक आधुनिक Vulkan के जारी होने के बावजूद, OpenGL ES 3.2 मौजूदा कोड के विशाल आधार और प्लेटफ़ॉर्म के बीच अनुप्रयोगों को पोर्ट करने में आसानी के कारण एक प्रासंगिक API बना हुआ है।
| संस्करण | वर्ष | मुख्य क्षमताएँ | संगतता (2026) |
|---|---|---|---|
| 1.x | 2003 | फिक्स्ड पाइपलाइन, प्रकाश, टेक्सचर | पुराना |
| 2.0 | 2007 | प्रोग्रामेबल पाइपलाइन, GLSL ES | 99% उपकरण |
| 3.0 | 2012 | MRT, इंस्टेंसिंग, ETC2, ट्रांसफ़ॉर्म फ़ीडबैक | 92% उपकरण |
| 3.1 | 2014 | कंप्यूट शेडर, परमाणु बफ़र | 80% उपकरण |
| 3.2 | 2015 | टेसलेशन, ज्यामिति शेडर | 65% उपकरण |
GLSL ES (एम्बेडेड सिस्टम के लिए ओपन GL शेडिंग लैंग्वेज) C सिंटैक्स पर आधारित एक शेडर प्रोग्रामिंग भाषा है जिसमें वेक्टर और मैट्रिक्स के साथ काम करने के लिए अतिरिक्त प्रकार हैं। प्रत्येक शेडर एक प्रोग्राम है जो एप्लिकेशन आरंभीकरण पर GPU मशीन कोड में संकलित होता है। CPU कोड के विपरीत, शेडर बड़े पैमाने पर समानांतर रूप से निष्पादित होते हैं: हज़ारों वर्टेक्स या फ़्रैगमेंट एक साथ प्रोसेस होते हैं।
वर्टेक्स शेडर मेश के प्रत्येक वर्टेक्स को प्रोसेस करता है। इसका मुख्य कार्य इनपुट स्थिति को MVP मैट्रिक्स से गुणा करके क्लिप स्पेस में अंतिम वर्टेक्स स्थिति की गणना करना है। इसके अतिरिक्त, वर्टेक्स शेडर नॉर्मल, UV निर्देशांक, रंग की गणना कर सकता है और उन्हें वेरिंग वेरिएबल के माध्यम से फ़्रैगमेंट शेडर में भेज सकता है। वर्टेक्स शेडर का प्रत्येक आह्वान स्वतंत्र रूप से काम करता है, जिससे GPU प्रति फ्रेम लाखों वर्टेक्स प्रोसेस कर सकता है।
// Simple vertex shader for OpenGL ES 3.0
#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;
}
फ़्रैगमेंट शेडर स्क्रीन पर प्रत्येक पिक्सेल का रंग निर्धारित करता है। यह वर्टेक्स शेडर से इंटरपोलेटेड वेरिंग मान प्राप्त करता है, बाउंड टेक्सचर से टेक्सेल सैंपल करता है और प्रकाश लागू करता है। सही प्रकाश के लिए फ़ॉन्ग या ब्लिन-फ़ॉन्ग मॉडल का उपयोग डिफ्यूज़, स्पेक्युलर और एम्बिएंट घटक गणना के साथ किया जाता है। फ़्रैगमेंट शेडर का प्रत्येक आह्वान एक पिक्सेल से मेल खाता है, इसलिए आह्वानों की कुल संख्या स्क्रीन पर ऑब्जेक्ट के प्रोजेक्शन क्षेत्र के बराबर होती है।
// Simple fragment shader with texture and lighting
#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);
}
उपरोक्त उदाहरण में, फ़्रैगमेंट शेडर UV निर्देशांक द्वारा 2D टेक्सचर से टेक्सेल सैंपल करता है, नॉर्मल और प्रकाश दिशा के डॉट उत्पाद के रूप में डिफ्यूज़ प्रकाश की गणना करता है, और टेक्सेल रंग को प्रकाश तीव्रता से गुणा करता है। Mediump मोबाइल GPU पर फ़्रैगमेंट शेडर के लिए अनुशंसित सटीकता है: यह न्यूनतम बिजली खपत पर पर्याप्त गुणवत्ता प्रदान करता है।
Android पर OpenGL ES के साथ काम करने के लिए, EGL संदर्भ बनाना आवश्यक है — एक सतह जिस पर ग्राफ़िक्स रेंडर किया जाएगा। iOS पर, GLKit फ्रेमवर्क द्वारा प्रदान की गई EAGL परत (EGL के समान) का उपयोग किया जाता है। दोनों मामलों में, आरंभीकरण प्रक्रिया में विंडो सतह बनाना, संदर्भ गुण कॉन्फ़िगर करना और वर्तमान रेंडरिंग थ्रेड से बाइंड करना शामिल है।
// OpenGL ES 3.0 initialization on Android
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)
}
}
संदर्भ बनाने के बाद, डेवलपर को बफ़र सेट अप करने की आवश्यकता होती है: वर्टेक्स बफ़र (VBO) में वर्टेक्स निर्देशांक, नॉर्मल और UV होते हैं; इंडेक्स बफ़र (EBO) त्रिकोण बनाने के लिए वर्टेक्स ट्रैवर्सल क्रम को परिभाषित करता है। VAO (वर्टेक्स ऐरे ऑब्जेक्ट) सभी विशेषता कॉन्फ़िगरेशन को एक ऑब्जेक्ट में जोड़ता है, मेश स्विच करते समय API कॉल की संख्या कम करता है।
EGL (नेटिव प्लेटफ़ॉर्म ग्राफ़िक्स इंटरफ़ेस) OpenGL ES और विंडो सिस्टम के बीच एक मध्यवर्ती परत है। Android पर, EGL रेंडरिंग सतह के निर्माण, फ़्रेमबफ़र कॉन्फ़िगरेशन चयन (रंग गहराई, स्टेंसिल, MSAA) और vsync सिंक्रोनाइज़ेशन का प्रबंधन करता है। एक विशिष्ट कॉन्फ़िगरेशन 24-बिट डेप्थ बफ़र और 8-बिट स्टेंसिल बफ़र के साथ RGBA8888 का अनुरोध करता है। iOS पर, EGL की भूमिका EAGL द्वारा CAEAGLLayer के साथ मिलकर निभाई जाती है।
मोबाइल उपकरणों पर OpenGL ES प्रदर्शन अनुकूलन में कई प्रमुख अभ्यास शामिल हैं। कई समान ऑब्जेक्ट रेंडर करने के लिए इंस्टेंसिंग (glDrawArraysInstanced) का उपयोग करें — इससे ड्रॉ कॉल की संख्या कम होती है। टेक्सचर पूल लागू करें और ड्रॉ कॉल के बीच टेक्सचर स्विचिंग से बचें। ऑब्जेक्ट को शेडर, फिर टेक्सचर, फिर मेश के अनुसार क्रमबद्ध करें — यह क्रम संदर्भ स्थिति स्विच को कम करता है।
Metal Apple का निम्न-स्तरीय ग्राफ़िक्स API है, जो A7 चिप से शुरू होकर iOS और macOS पर उपलब्ध है। Metal न्यूनतम ड्राइवर ओवरहेड के साथ GPU तक सीधी पहुँच प्रदान करता है, लेकिन केवल Apple उपकरणों पर काम करता है। WWDC 2024 के अनुसार, रनटाइम स्थिति जाँच को कम करके Metal समान हार्डवेयर पर OpenGL ES की तुलना में 40% तक अधिक प्रदर्शन प्रदान करता है।
Vulkan Khronos Group द्वारा विकसित OpenGL ES का क्रॉस-प्लेटफ़ॉर्म उत्तराधिकारी है। Vulkan स्पष्ट संसाधन प्रबंधन का उपयोग करता है: डेवलपर मेमोरी पूल आवंटित करता है, कमांड बफ़र बनाता है और GPU एक्सेस को सिंक्रोनाइज़ करता है। यह प्रदर्शन पर अधिकतम नियंत्रण देता है, लेकिन Vulkan आरंभीकरण कोड OpenGL ES की तुलना में 3–4 गुना अधिक व्यापक है। Vulkan Android 7+ पर AAA गेम और उच्च-आवश्यकता वाले ग्राफ़िक्स अनुप्रयोगों के लिए अनुशंसित है।
OpenGL ES, Metal और Vulkan के बीच चुनाव लक्ष्य प्लेटफ़ॉर्म और प्रदर्शन आवश्यकताओं पर निर्भर करता है। OpenGL ES क्रॉस-प्लेटफ़ॉर्म परियोजनाओं के लिए सबसे अच्छा विकल्प बना हुआ है जहाँ विकास की गति महत्वपूर्ण है। अधिकतम प्रदर्शन के लिए iOS/macOS इकोसिस्टम के लिए Metal पसंद किया जाता है। Vulkan उन परियोजनाओं के लिए विकल्प है जहाँ प्रति फ्रेम हर मिलीसेकंड मायने रखता है और विकास बजट निम्न-स्तरीय अनुकूलन में निवेश की अनुमति देता है।
| विशेषता | OpenGL ES | Metal | Vulkan |
|---|---|---|---|
| प्लेटफ़ॉर्म | Android, iOS, Windows, Linux | केवल iOS, macOS | Android, Windows, Linux (iOS नहीं) |
| API स्तर | उच्च (स्टेट मशीन) | मध्यम | निम्न (स्पष्ट) |
| आरंभीकरण कोड | 50–100 पंक्तियाँ | 100–200 पंक्तियाँ | 300–500 पंक्तियाँ |
| मेमोरी नियंत्रण | स्वचालित | अर्ध-स्वचालित | पूरी तरह से मैनुअल |
| प्रदर्शन | आधारभूत | +20–40% बनाम ES | +30–60% बनाम ES |
अक्सर पूछे जाने वाले प्रश्न
OpenGL ES डेस्कटॉप OpenGL का एक उपसमूह है जिसमें से फिक्स्ड-पाइपलाइन की पुरानी सुविधाएँ हटा दी गई हैं। OpenGL ES में छोटी विनिर्देश मात्रा, एक सरलीकृत सटीकता प्रोफ़ाइल है और यह मोबाइल उपकरणों की कम बिजली खपत के लिए अनुकूलित है।
Android सभी उपकरणों पर OpenGL ES 2.0, Android 4.3+ पर 3.0, Android 5.0+ पर 3.1, Android 7.0+ वाले चुनिंदा उपकरणों पर 3.2 का समर्थन करता है। वर्तमान समर्थन स्तर EGL_CONFIG_CAVEAT के माध्यम से जाँचा जा सकता है।
GLSL ES (एम्बेडेड सिस्टम के लिए ओपन GL शेडिंग लैंग्वेज) vec2/vec3/vec4/mat4 प्रकार और अंतर्निहित फ़ंक्शन texture, normalize, dot के साथ C-जैसी भाषा है। ES 3.0+ के लिए #version 300 es निर्देश का उपयोग किया जाता है।
हाँ, OpenGL ES क्रॉस-प्लेटफ़ॉर्म परियोजनाओं के लिए प्रासंगिक बना हुआ है जहाँ विकास की गति और व्यापक उपकरण समर्थन प्राथमिकता है। iOS इकोसिस्टम के लिए Metal सीखना बेहतर है; अधिकतम प्रदर्शन वाली नई परियोजनाओं के लिए, Vulkan का उपयोग करें।
Android पर, संदर्भ बनाने के बाद GLES30.glGetString(GLES30.GL_VERSION) कॉल करें। स्ट्रिंग में संस्करण संख्या और विक्रेता जानकारी होती है। iOS पर, [EAGLContext currentContext] और API प्रॉपर्टी का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।