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 کوآرڈینیٹ، رنگوں کا حساب لگا سکتا ہے اور انہیں varying متغیرات کے ذریعے فریگمنٹ شیڈر میں منتقل کر سکتا ہے۔ ورٹیکس شیڈر کی ہر کال آزادانہ طور پر کام کرتی ہے، جس سے 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;
}
فریگمنٹ شیڈر اسکرین پر ہر پکسل کا رنگ متعین کرتا ہے۔ یہ ورٹیکس شیڈر سے انٹرپولیٹڈ varying اقدار وصول کرتا ہے، باؤنڈ ٹیکسچرز سے ٹیکسیل سیمپل کرتا ہے اور روشنی کا اطلاق کرتا ہے۔ صحیح روشنی کے لیے فونگ یا بلین-فونگ ماڈل ڈفیوز، اسپیکولر اور ایمبیئنٹ اجزاء کی گنتی کے ساتھ استعمال ہوتا ہے۔ فریگمنٹ شیڈر کی ہر کال ایک پکسل سے مطابقت رکھتی ہے، لہذا کل کالز کی تعداد اسکرین پر آبجیکٹ کے پروجیکشن ایریا کے برابر ہے۔
// 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 کراس پلیٹ فارم پروجیکٹس کے لیے بہترین انتخاب ہے جہاں ڈویلپمنٹ کی رفتار اہم ہے۔ Metal زیادہ سے زیادہ کارکردگی کے لیے iOS/macOS ایکو سسٹم کے لیے ترجیح دی جاتی ہے۔ 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔