Vulkan هي API عبر المنصات للعمل مع الرسوميات والحوسبة على GPU، طورتها مجموعة Khronos Group. توفر Vulkan تحكماً منخفض المستوى في العتاد، وتوليداً متعدد الخيوط للأوامر، وأداءً قابلاً للتنبؤ. وفقاً لـ Khronos Group (2026)، Vulkan مدعومة على 98% من أجهزة Android الحديثة.
النقاط الرئيسية
Vulkan هي API منخفضة المستوى وعبر المنصات للعمل مع وحدات معالجة الرسوميات، أصدرتها Khronos Group لأول مرة في 2016. حلت Vulkan محل OpenGL، مقدمة عبئاً أقل على CPU بشكل كبير، وأداءً قابلاً للتنبؤ، وقدرة على توليد الأوامر متعددة الخيوط.
على عكس OpenGL، حيث يقوم برنامج التشغيل بالتحقق والمزامنة على CPU، تضع Vulkan إدارة الموارد على عاتق المطور. تخصيص الذاكرة، المزامنة عبر الإشارات والحواجز، إنشاء خطوط الأنابيب — كل هذا يتم التحكم فيه بشكل صريح. يوفر هذا الأسلوب تحسناً في الأداء يصل إلى 50% في السيناريوهات المحدودة بوحدة المعالجة المركزية.
Vulkan مدعومة على Windows, Linux, Android, iOS (عبر MoltenVK), macOS (MoltenVK), Nintendo Switch ووحدات التحكم. وفقاً لـ Khronos Group (2026)، تعمل API على أجهزة مزودة بـ GPU من NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) و Apple (عبر طبقة Metal). أضافت Vulkan 1.4 (2026) دعم Mesh Shaders و Video Encode API.
في البداية، تم تطوير Vulkan تحت الاسم الرمزي “glNext” — خليفة OpenGL. قدمت Vulkan 1.0 (2016) API أساسية مع إدارة ذاكرة صريحة، شادرات SPIR-V وقوائم انتظار متعددة الخيوط. أضافت Vulkan 1.1 (2018) Subgroup Operations ودعم الأنواع ذات 16 بت. قدمت Vulkan 1.2 (2020) Buffer Device Address و Timeline Semaphores.
قامت Vulkan 1.3 (2022) بتوحيد Dynamic Rendering و Graphics Pipeline Library. Vulkan 1.4 (2026) جعلت دعم Mesh Shaders إلزامياً وأضافت Video Encode/Decode API لتشفير H.264/HEVC/AV1 via العتاد. وفقاً لـ Khronos (2026)، Vulkan 1.4 مدعومة على جميع GPU الجديدة NVIDIA RTX 50xx, AMD RX 9000 و Intel Arc B-series.
هندسة Vulkan مبنية على طبقة تجريد العتاد (طبقة HW). يتفاعل التطبيق مع الجهاز المادي (VkPhysicalDevice) عبر جهاز منطقي (VkDevice). تُرسل الأوامر إلى قوائم الانتظار (VkQueue)، كل منها ينتمي إلى عائلة قوائم انتظار محددة (graphics, compute, transfer).
VkInstance هو الكائن الجذر لـ Vulkan، ويخزن معلومات عن طبقات التحقق والإضافات. VkPhysicalDevice يمثل GPU المادي ويسمح بالاستعلام عن خصائصه، أكوام الذاكرة وعائلات قوائم الانتظار. VkDevice هو جهاز منطقي مع قوائم انتظار وإضافات مطلوبة بشكل صريح.
// إنشاء جهاز منطقي لـ Vulkan
VkDeviceCreateInfo devInfo {};
devInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
devInfo.queueCreateInfoCount = 1;
float queuePriority = 1.0f;
VkDeviceQueueCreateInfo queueInfo {};
queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queueInfo.queueFamilyIndex = 0;
queueInfo.queueCount = 1;
queueInfo.pQueuePriorities = &queuePriority;
devInfo.pQueueCreateInfos = &queueInfo;
VkDevice device;
vkCreateDevice(physicalDevice, &devInfo,
nullptr, &device);
VkQueue queue;
vkGetDeviceQueue(device, 0, 0, &queue);
الدالة vkCreateDevice تنشئ جهازاً منطقياً بقوائم الانتظار المحددة. VkQueue هو مؤشر قائمة انتظار لإرسال الأوامر. يمكن استخدام قائمة انتظار واحدة للرسوميات والحوسبة والنسخ إذا كانت العلامات المقابلة مدعومة من عائلة قوائم الانتظار. تؤثر أولوية قائمة الانتظار (0.0–1.0) على ترتيب التنفيذ عند التنافس.
في Vulkan، يتم تخصيص الذاكرة بشكل صريح عبر VkDeviceMemory. يستعلم المطور عن أنواع الذاكرة (HOST_VISIBLE, DEVICE_LOCAL) من الجهاز المادي ويخصص الكتل. المخازن المؤقتة (VkBuffer) والأنسجة (VkImage) ليس لها ذاكرة خاصة — بل تُربط بالكتل المخصصة عبر vkBindBufferMemory.
Vulkan Memory Allocator (VMA) هي مكتبة من AMD تبسط إدارة الذاكرة. تقوم VMA تلقائياً بتجميع التخصيصات الصغيرة في كتل كبيرة، وتدير إزالة التجزئة، وتختار نوع الذاكرة المناسب. وفقاً لـ AMD (2025)، تقلل VMA عدد تخصيصات الذاكرة بمقدار 50–100 مرة مقارنة بالإدارة اليدوية.
VkCommandPool يدير الذاكرة للمخازن المؤقتة للأوامر. تُسجل المخازن المؤقتة (VkCommandBuffer) على CPU وتُرسل إلى GPU عبر vkQueueSubmit. يدعم Vulkan المخازن المؤقتة الأولية والثانوية: الأولية تُرسل مباشرة، الثانوية يمكن استدعاؤها من الأولية لبناء الأوامر متعدد الخيوط.
يبدأ تسجيل الأوامر بـ vkBeginCommandBuffer وينتهي بـ vkEndCommandBuffer. بينهما، تُسجل أوامر التقديم: vkCmdDraw، vkCmdDispatch، vkCmdCopyBuffer و vkCmdPipelineBarrier للمزامنة. يتم إنشاء مخزن أوامر جديد لكل إطار مع تجميع عبر إعادة تعيين المجموعة.
التقديم في Vulkan يُنظم عبر خطوط الأنابيب (VkPipeline). على عكس OpenGL، حيث يتم تغيير حالة خط الأنابيب بشكل عام، تستخدم Vulkan VkPipeline — خط أنابيب مُجمّع مسبقاً يتضمن جميع المراحل: إدخال الرؤوس، الشادرات، التنقيط، depth-stencil والمزج.
VkGraphicsPipelineCreateInfo يصف خط الأنابيب الكامل: شادرات الرؤوس والأجزاء، الطوبولوجيا (triangle list, triangle strip)، المُنقّط (fill mode, cull mode)، المعاينة المتعددة، اختبارات depth-stencil، المزج وإعدادات منفذ العرض. يُنشأ خط الأنابيب مرة واحدة ويُعاد استخدامه — تغيير الحالة يتطلب خط أنابيب جديد أو حالة ديناميكية.
// إعداد خط أنابيب الرسوميات
VkGraphicsPipelineCreateInfo pipelineInfo {};
pipelineInfo.sType =
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
pipelineInfo.stageCount = 2;
pipelineInfo.pStages = shaderStages;
pipelineInfo.pVertexInputState =&;
vertexInputState;
pipelineInfo.pRasterizationState =&;
rasterState;
VkPipeline graphicsPipeline;
vkCreateGraphicsPipelines(device,
VK_NULL_HANDLE, 1, &pipelineInfo,
nullptr, &graphicsPipeline);
الحالة الديناميكية (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) تسمح بتغيير معلمات معينة دون إنشاء خط أنابيب جديد. جعلت Vulkan 1.4 دعم Dynamic State 3 (VK_EXT_extended_dynamic_state_3) إلزامياً لإدارة blend constants و depth bias والطوبولوجيا أثناء التنفيذ، مما يقلل عدد خطوط الأنابيب في المشروع.
VkRenderPass يصف هيكل مراحل التقديم: أي المرفقات تُستخدم، وكيفية مسحها وتحميلها. يعمل Dynamic Rendering (VK_KHR_dynamic_rendering، إلزامي منذ Vulkan 1.4) على تبسيط العملية: يتم إنشاء render pass أثناء التنفيذ في المخزن المؤقت للأوامر عبر vkCmdBeginRendering، دون كائن VkRenderPass مسبق.
وفقاً لـ Khronos (2026)، Dynamic Rendering يقلل كود تهيئة Vulkan بنسبة 30–40% ويخفض عدد تباديل خطوط الأنابيب. لتقنيات التقديم المؤجل المعقدة (Deferred Shading)، لا يزال من المناسب استخدام VkRenderPass الكلاسيكي مع subpasses متعددة لـ G-buffer والإضاءة.
SPIR-V هو تنسيق ثنائي عالمي للشادرات في Vulkan، طورته Khronos. يمكن كتابة الشادرات بـ GLSL أو HLSL أو لغة Zink وترجمتها إلى SPIR-V عبر glslangValidator أو dxc أو Google Shaderc. لا تقبل Vulkan الشادرات في كود مصدري — فقط SPIR-V ثنائي.
GLSL لـ Vulkan يختلف عن GLSL القياسي لـ OpenGL. تُستخدم الكتل (layout) مع تحديد صريح لأرقام set و binding، بدلاً من المتغيرات المضمنة. تُحدد سمات الرؤوس عبر location، والمتغيرات الموحدة عبر uniform blocks أو المخازن المؤقتة. Push constants (حتى 128 بايت) متاحة لنقل البيانات بسرعة دون مخازن مؤقتة.
// شادر رؤوس Vulkan/GLSL
#version 460
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inNormal;
layout(binding = 0, set = 0)
uniform UniformBufferObject {
mat4 modelViewProjection;
} ubo;
layout(location = 0) out vec3 outNormal;
void main() {
gl_Position = ubo.modelViewProjection *
vec4(inPosition, 1.0);
outNormal = inNormal;
}
المُعرّفات layout(set = N, binding = M) هي فرق رئيسي بين Vulkan GLSL و OpenGL. Set يقابل مجموعة واصفات (VkDescriptorSet)، binding يقابل مورداً محدداً (مخزن، نسيج، عيّنة). فصل الموارد إلى sets يسمح بتبديل مجموعات الموارد بكفاءة بين draw calls دون ربط موارد فردية.
VkDescriptorSet هو مجموعة من الموارد (المخازن، الأنسجة، العيّنات) المرتبطة بالشادرات. يصف تخطيط الواصفات أنواع الموارد وأرقام binding الخاصة بها. تُحدّث مجموعات الواصفات عبر vkUpdateDescriptorSets وتُعاد استخدامها بين draw calls. تدعم Vulkan 1.4 VK_EXT_descriptor_buffer للوصول المباشر إلى الواصفات من GPU.
Push Constants هي آلية للنقل السريع لكميات صغيرة من البيانات (حتى 128 بايت) إلى الشادرات دون إنشاء واصفات. تُعيّن push constants عبر vkCmdPushConstants في المخزن المؤقت للأوامر. وفقاً لـ Khronos (2025)، استخدام push constants بدلاً من uniform buffers يقلل الحمل على CPU بنسبة 10–15% عند معدلات draw calls تتجاوز 10 آلاف لكل إطار.
Vulkan هي API الوحيدة التي تعمل على جميع المنصات الرئيسية: Windows (عبر برنامج تشغيل ICD الرسمي)، Linux (RADV, AMDVLK, NVIDIA)، Android (Vulkan 1.3+، إلزامي منذ Android 10)، وعلى أجهزة Apple عبر MoltenVK — طبقة ترجمة من Vulkan إلى Metal.
على Android، Vulkan إلزامية لـ Android 10 والإصدارات الأحدث. توصي Google باستخدام Vulkan للمشاريع الجديدة، خاصة الألعاب عالية الأداء وتطبيقات AR عبر ARCore. توفر Qualcomm Adreno و ARM Mali دعماً كاملاً لـ Vulkan 1.3 مع تتبع الأشعة via العتاد على Adreno 8xx و Mali-G720.
وفقاً لـ Google (2026)، 98% من أجهزة Android التي تعمل بـ Android 10+ تدعم Vulkan. للتوافق مع الإصدارات السابقة، تتوفر ANGLE (Almost Native Graphics Layer Engine)، التي تترجم OpenGL ES إلى Vulkan. يتيح هذا تشغيل تطبيقات OpenGL القديمة على برنامج تشغيل Vulkan مع تحسن في الأداء يصل إلى 20%.
على Android، تتمتع Vulkan بأولوية عالية لكفاءة الطاقة: تستهلك تطبيقات Vulkan طاقة أقل بنسبة 25–40% مقارنة بـ OpenGL ES تحت نفس الحمل الرسومي على أجهزة Adreno 7xx+. وهذا يجعل Vulkan API المفضلة للألعاب على الأجهزة المحمولة.
MoltenVK هو تطبيق لـ Vulkan فوق Metal، طورته LunarG و Valve. يترجم MoltenVK استدعاءات Vulkan API إلى Metal، ويدعم Vulkan 1.2 على iOS و macOS. أداء MoltenVK قريب من Metal الأصلي: يبلغ حمل الترجمة 5–15% حسب السيناريو.
وفقاً لـ LunarG (2025)، يُستخدم MoltenVK في CrossOver (Wine لنظام Mac) لتشغيل ألعاب Windows على macOS. تعمل Dota 2 و Civilization VI و Baldur's Gate 3 على macOS عبر MoltenVK بأداء 30–60 FPS على M3/M4. يدعم MoltenVK MetalFX upscaling لتحسين الأداء.
VK_KHR_ray_tracing هي إضافة لتتبع الأشعة via العتاد في Vulkan، إلزامية منذ Vulkan 1.4. مدعومة على GPU مع أنوية RT: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. توفر Vulkan RT VkAccelerationStructure و VkRayTracingPipeline و Shader Binding Table.
يدعم Vulkan Ray Tracing الانعكاسات والظلال والإطباق المحيطي والإضاءة العالمية في الوقت الفعلي. وفقاً لـ Khronos (2026)، على NVIDIA RTX 5090، يحقق Vulkan Ray Tracing ما يصل إلى 100 Giga rays/s في مشاهد بجودة مرجعية. للمنصات المحمولة، يتدرج Vulkan RT عبر تقليل التمويه وإزالة الضوضاء الزمنية.
الأسئلة الشائعة
Vulkan هي API GPU منخفضة المستوى وعبر المنصات مع إدارة صريحة للموارد. على عكس OpenGL، تمنح تحكماً في الذاكرة والمزامنة وتعدد الخيوط، مما يوفر تحسناً في الأداء يصل إلى 50% في السيناريوهات المحدودة بـ CPU.
يعمل Vulkan على Windows, Linux, Android, Nintendo Switch، وعلى iOS/macOS عبر MoltenVK (ترجمة إلى Metal). مدعوم على GPU من NVIDIA, AMD, Intel, Qualcomm, ARM و Apple (عبر MoltenVK).
SPIR-V هو تنسيق ثنائي عالمي للشادرات في Vulkan. تُكتب الشادرات بـ GLSL أو HLSL، وتُترجم إلى SPIR-V، وتُغذى إلى Vulkan. يضمن هذا استقلالية لغة الشادرات وأداء ترجمة قابل للتنبؤ.
نعم، عبر VK_KHR_ray_tracing — إضافة إلزامية منذ Vulkan 1.4. مدعومة على GPU مع أنوية RT: NVIDIA RTX, AMD RX 6000+, Intel Arc. يوفر Vulkan RT هياكل تسريع BVH و Shader Binding Table وتقاطعات أشعة via العتاد.
حاجز الدخول أعلى من OpenGL أو DirectX 11 بسبب إدارة الذاكرة الصريحة والمزامنة وخطوط الأنابيب. توفر Khronos دليل Vulkan التعليمي وعينات Vulkan ودليل Vulkan. يتطلب المثلث الأول حوالي 500 سطر من الكود.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا