Vulkan — egy keresztplatformos API grafikával és számításokkal való munkához GPU-n, amelyet a Khronos Group konzorcium fejlesztett ki. A Vulkan alacsony szintű vezérlést biztosít a hardver felett, többszálú parancsgenerálást és kiszámítható teljesítményt. A Khronos Group (2026) adatai szerint a Vulkan a modern Android-eszközök 98%-án támogatott.
Főbb pontok
Vulkan — egy alacsony szintű, keresztplatformos API grafikus processzorokkal való munkához, amelyet először a Khronos Group adott ki 2016-ban. A Vulkan felváltotta az OpenGL-t, lényegesen alacsonyabb CPU-terhelést, kiszámítható teljesítményt és többszálú parancsgenerálási lehetőséget kínálva.
Ellentétben az OpenGL-lel, ahol az illesztőprogram ellenőrzéseket és szinkronizálást végez a CPU-n, a Vulkan az erőforrás-kezelést a fejlesztőre bízza. Memóriaallokáció, szinkronizálás szemaforokon és korlátokon keresztül, pipeline-ok létrehozása — mindez explicit módon vezérelhető. Ez a megközelítés akár 50%-os teljesítménynövekedést biztosít CPU-bound forgatókönyvekben.
A Vulkan támogatott Windows, Linux, Android, iOS (MoltenVK-n keresztül), macOS (MoltenVK), Nintendo Switch és konzolokon. A Khronos Group (2026) adatai szerint az API NVIDIA, AMD, Intel, Qualcomm (Adreno), ARM (Mali) és Apple (Metal rétegen keresztül) GPU-val rendelkező eszközökön működik. A Vulkan 1.4 (2026) támogatást adott a Mesh Shaders-hez és a Video Encode API-hoz.
Kezdetben a Vulkan „glNext” kódnéven fejlesztették — az OpenGL utódjaként. A Vulkan 1.0 (2016) alapvető API-t biztosított explicit memóriakezeléssel, SPIR-V shaderekkel és többszálú sorokkal. A Vulkan 1.1 (2018) hozzáadta a Subgroup Operations-t és a 16 bites típusok támogatását. A Vulkan 1.2 (2020) bevezette a Buffer Device Address-t és a Timeline Semaphores-t.
A Vulkan 1.3 (2022) szabványosította a Dynamic Rendering-et és a Graphics Pipeline Library-t. Vulkan 1.4 (2026) kötelezővé tette a Mesh Shaders támogatását és hozzáadta a Video Encode/Decode API-t a H.264/HEVC/AV1 hardveres kódolásához. A Khronos (2026) adatai szerint a Vulkan 1.4 minden új GPU-n támogatott: NVIDIA RTX 50xx, AMD RX 9000 és Intel Arc B-sorozat.
A Vulkan architektúrája egy hardver absztrakciós rétegre (HW layer) épül. Az alkalmazás a fizikai eszközzel (VkPhysicalDevice) egy logikai eszközön (VkDevice) keresztül kommunikál. A parancsok sorokba (VkQueue) kerülnek, amelyek mindegyike egy adott sorcsaládhoz (graphics, compute, transfer) tartozik.
VkInstance — a Vulkan gyökér objektuma, amely információkat tárol az érvényesítési rétegekről és kiterjesztésekről. VkPhysicalDevice a fizikai GPU-t reprezentálja, és lehetővé teszi tulajdonságainak, memory heaps és queue families lekérdezését. VkDevice — egy logikai eszköz explicit módon kért sorokkal és kiterjesztésekkel.
// Logikai Vulkan eszköz létrehozása
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);
A vkCreateDevice függvény egy logikai eszközt hoz létre a megadott sorokkal. VkQueue — egy sor leírója parancsok küldéséhez. Egy sor használható grafikához, számításokhoz és másoláshoz, ha a megfelelő jelzőket a sorcsalád támogatja. A sor prioritása (0.0–1.0) befolyásolja a végrehajtás sorrendjét verseny esetén.
A Vulkanban a memória explicit módon allokálódik VkDeviceMemory segítségével. A fejlesztő a fizikai eszköztől memory types-okat (HOST_VISIBLE, DEVICE_LOCAL) kér, és blokkokat allokál. A bufferek (VkBuffer) és textúrák (VkImage) nem rendelkeznek saját memóriával — az allokált blokkokhoz kötődnek vkBindBufferMemory segítségével.
Vulkan Memory Allocator (VMA) — egy AMD-től származó könyvtár, amely leegyszerűsíti a memóriakezelést. A VMA automatikusan csoportosítja a kis allokációkat nagy blokkokba, kezeli a defragmentációt és kiválasztja a megfelelő memory type-ot. Az AMD (2025) adatai szerint a VMA 50–100-szorosára csökkenti a memóriaallokációk számát a kézi kezeléshez képest.
VkCommandPool kezeli a memóriát a parancsbufferek számára. A buffereket (VkCommandBuffer) a CPU-n írják, és vkQueueSubmit segítségével küldik a GPU-ra. A Vulkan támogatja a primary és secondary buffereket: a primary-k közvetlenül kerülnek elküldésre, a secondary-k a primary-ből hívhatók meg többszálú parancsépítéshez.
A parancsok írása vkBeginCommandBuffer-rel kezdődik és vkEndCommandBuffer-rel végződik. Közöttük renderelési parancsok kerülnek rögzítésre: vkCmdDraw, vkCmdDispatch, vkCmdCopyBuffer és vkCmdPipelineBarrier a szinkronizáláshoz. Minden képkockához új parancsbuffer jön létre pool reset segítségével.
Renderelés a Vulkanban pipeline-okon (VkPipeline) keresztül szerveződik. Ellentétben az OpenGL-lel, ahol a pipeline állapota globálisan változik, a Vulkan VkPipeline-t — egy előre lefordított pipeline-t használ, amely minden szakaszt magában foglal: csúcspontok bevitele, shaderek, raszterizáció, depth-stencil és blending.
VkGraphicsPipelineCreateInfo leírja a teljes pipeline-t: csúcs- és fragment shaderek, topológia (triangle list, triangle strip), raszterizáló (fill mode, cull mode), mintavételezés, depth-stencil tesztek, blending és viewport beállítások. A pipeline egyszer jön létre és újra felhasználható — az állapotváltoztatás új pipeline-t vagy dynamic state-et igényel.
// Grafikus pipeline beállítása
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);
A Dynamic State (VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR) lehetővé teszi bizonyos paraméterek megváltoztatását új pipeline létrehozása nélkül. A Vulkan 1.4 kötelezővé tette a Dynamic State 3 (VK_EXT_extended_dynamic_state_3) támogatását a blend constants, depth bias és topológia menet közbeni kezeléséhez, ami csökkenti a pipeline-ok számát a projektben.
VkRenderPass leírja a renderelési menetek szerkezetét: mely attachment-ek használatosak, hogyan tisztítódnak és töltődnek be. A Dynamic Rendering (VK_KHR_dynamic_rendering, Vulkan 1.4-től kötelező) leegyszerűsíti a folyamatot: a render pass menet közben jön létre a parancsbufferben vkCmdBeginRendering segítségével, előzetes VkRenderPass objektum nélkül.
A Khronos (2026) adatai szerint a Dynamic Rendering 30–40%-kal csökkenti a Vulkan inicializációs kódjának mennyiségét és mérsékli a pipeline-permutációk számát. Összetett késleltetett renderelési technikákhoz (Deferred Shading) továbbra is kényelmes a klasszikus VkRenderPass használata több subpass-szel a G-buffer és a megvilágítás számára.
SPIR-V — univerzális bináris shader formátum a Vulkanban, amelyet a Khronos fejlesztett ki. A shaderek írhatók GLSL, HLSL vagy Zink nyelven, és lefordíthatók SPIR-V-re glslangValidator, dxc vagy Google Shaderc segítségével. A Vulkan nem fogad el shadereket forráskódban — csak bináris SPIR-V-t.
GLSL a Vulkanhoz eltér a szabványos OpenGL GLSL-től. Blokkok (layout) használatosak a set és binding számok explicit megadásával, nem pedig beépített változók. A csúcspont-attribútumok location segítségével, az uniform-ok uniform blocks vagy bufferek segítségével adhatók meg. A push constants (128 bájtig) elérhetőek gyors adatátvitelhez bufferek nélkül.
// Vulkan/GLSL csúcs shader
#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;
}
A layout(set = N, binding = M) minősítők — a Vulkan GLSL legfőbb különbsége az OpenGL-től. A Set a leírókészletnek (VkDescriptorSet), a binding egy adott erőforrásnak (buffer, textúra, sampler) felel meg. A Set-ekre bontás lehetővé teszi az erőforráskészletek hatékony váltását draw calls között anélkül, hogy egyedi erőforrásokat kellene kötni.
VkDescriptorSet — a shaderekhez kötött erőforrások csoportja (bufferek, textúrák, samplerek). A leírók elrendezése leírja az erőforrástípusokat és azok binding számát. A leírókészletek vkUpdateDescriptorSets segítségével frissíthetők és újra felhasználhatók draw calls között. A Vulkan 1.4 támogatja a VK_EXT_descriptor_buffer-t a leírók GPU-ból való közvetlen eléréséhez.
Push Constants — egy mechanizmus kis mennyiségű adat (128 bájtig) gyors továbbítására shaderekhez leírók létrehozása nélkül. A push constants a vkCmdPushConstants segítségével adható meg a parancsbufferben. A Khronos (2025) adatai szerint a push constants használata uniform buffers helyett 10–15%-kal csökkenti a CPU terhelését 10 000 feletti draw calls gyakoriságnál képkockánként.
Vulkan az egyetlen API, amely minden fő platformon működik: Windows (hivatalos ICD illesztőprogramon keresztül), Linux (RADV, AMDVLK, NVIDIA), Android (Vulkan 1.3+, Android 10-től kötelező) és Apple eszközökön MoltenVK — a Vulkan → Metal fordítási rétegen keresztül.
Androidon a Vulkan kötelező Android 10 és újabb verziók esetén. A Google a Vulkan-t ajánlja új projektekhez, különösen nagy teljesítményű játékokhoz és AR alkalmazásokhoz ARCore-on keresztül. A Qualcomm Adreno és az ARM Mali teljes Vulkan 1.3 támogatást nyújt hardveres sugárkövetéssel az Adreno 8xx és Mali-G720 esetében.
A Google (2026) adatai szerint az Android-eszközök 98%-a Android 10+ rendszerrel támogatja a Vulkan-t. A visszafelé kompatibilitás érdekében elérhető az ANGLE (Almost Native Graphics Layer Engine), amely az OpenGL ES-t Vulkan-ra fordítja. Ez lehetővé teszi régi OpenGL alkalmazások futtatását Vulkan illesztőprogramon akár 20%-os teljesítménynövekedéssel.
Androidon a Vulkan magas prioritást élvez az energiahatékonyság terén: a Vulkan alkalmazások 25–40%-kal kevesebb energiát fogyasztanak az OpenGL ES-hez képest azonos grafikai terhelés mellett Adreno 7xx+ eszközökön. Ez teszi a Vulkan-t az előnyben részesített API-vá a mobil eszközökön futó játékok számára.
MoltenVK — a Vulkan Metal feletti implementációja, amelyet a LunarG és a Valve fejlesztett ki. A MoltenVK lefordítja a Vulkan API hívásokat Metal-ra, támogatva a Vulkan 1.2-t iOS és macOS rendszeren. A MoltenVK teljesítménye közel áll a natív Metal-hoz: a fordítási többletterhelés forgatókönyvtől függően 5–15%.
A LunarG (2025) adatai szerint a MoltenVK-t a CrossOver-ben (Wine Mac-re) használják Windows játékok macOS-en való futtatásához. A Dota 2, Civilization VI és Baldur’s Gate 3 macOS-en MoltenVK-n keresztül fut 30–60 FPS teljesítménnyel M3/M4-en. A MoltenVK támogatja a MetalFX feljavítást a teljesítmény javításához.
VK_KHR_ray_tracing — a hardveres sugárkövetés kiterjesztése a Vulkanban, Vulkan 1.4-től kötelező. RT magokkal rendelkező GPU-kon támogatott: NVIDIA RTX 20xx/30xx/40xx/50xx, AMD RX 6000+/9000, Intel Arc A/B. A Vulkan RT biztosítja a VkAccelerationStructure, VkRayTracingPipeline és Shader Binding Table elemeket.
A Vulkan Ray Tracing támogatja a tükröződéseket, árnyékokat, környezeti eltakarást és globális megvilágítást valós időben. A Khronos (2026) adatai szerint NVIDIA RTX 5090-en a Vulkan Ray Tracing akár 100 Giga rays/s sebességet ér el referencia minőségű jelenetekben. Hordozható platformok esetén a Vulkan RT elmosáscsökkentéssel és időbeli zajszűréssel skálázható.
Gyakran Ismételt Kérdések
Vulkan — egy alacsony szintű keresztplatformos GPU API explicit erőforrás-kezeléssel. Az OpenGL-lel ellentétben vezérlést biztosít a memória, a szinkronizáció és a többszálúság felett, akár 50%-os teljesítménynövekedést nyújtva CPU-bound forgatókönyvekben.
A Vulkan Windows, Linux, Android, Nintendo Switch rendszereken, valamint iOS/macOS rendszeren MoltenVK-n (Metal-ba fordítás) keresztül működik. Támogatott NVIDIA, AMD, Intel, Qualcomm, ARM és Apple (MoltenVK-n keresztül) GPU-kon.
SPIR-V — a Vulkan univerzális bináris shader formátuma. A shadereket GLSL vagy HLSL nyelven írják, SPIR-V-re fordítják, és továbbítják a Vulkan-nak. Ez biztosítja a shaderírási nyelvtől való függetlenséget és a kiszámítható fordítási teljesítményt.
Igen, a VK_KHR_ray_tracing kiterjesztésen keresztül — Vulkan 1.4-től kötelező. RT magokkal rendelkező GPU-kon támogatott: NVIDIA RTX, AMD RX 6000+, Intel Arc. A Vulkan RT biztosítja a BVH struktúrák gyorsítását, a Shader Binding Table-t és a hardveres sugármetszéseket.
A belépési küszöb magasabb, mint az OpenGL vagy DirectX 11 esetében, az explicit memóriakezelés, szinkronizáció és pipeline-ok miatt. A Khronos Vulkan Tutorial, Vulkan Samples és Vulkan Guide dokumentációt biztosít. Az első háromszöghöz körülbelül 500 sornyi kód szükséges.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is