Vulkan — mi ez, keresztplatformos API és renderelés

Szerző: IT Sectr Megjelenés: 2026-05-03 Olvasási idő: 9 perc

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 — keresztplatformos GPU API alacsony szintű hardvervezérléssel
  • VkDevice és VkQueue biztosítják a GPU-parancsok többszálú küldését
  • SPIR-V — univerzális bináris shader formátum, GLSL-ből és HLSL-ből fordítható
  • Vulkan Memory Allocator kezeli a GPU-memória explicit allokálását
  • Vulkan Ray Tracing (VK_KHR_ray_tracing) támogatja a hardveres sugárkövetést

Mi az a Vulkan?

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.

A Vulkan története

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: eszköz és sorok

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, VkDevice és VkQueue

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.

cpp
// 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.

VkMemory és VkBuffer — memóriakezelés

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 és VkCommandBuffer

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 Vulkanon keresztül: pipeline és parancsok

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.

VkPipeline — renderelési pipeline

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.

cpp
// 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.

Render Pass és Dynamic Rendering

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.

Shaderek a Vulkanban: SPIR-V és GLSL

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 Vulkanban

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.

glsl
// 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.

Leírók és leírókészletek

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 különböző platformokon

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.

Vulkan Androidon

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.

Vulkan Apple eszközökön MoltenVK-n keresztül

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.

Vulkan Ray Tracing

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

Mi az a Vulkan és miben különbözik az OpenGL-től?

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.

Milyen platformokon működik a Vulkan?

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.

Mi az a SPIR-V a Vulkanban?

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.

Támogatja a Vulkan a sugárkövetést?

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.

Nehéz elkezdeni használni a Vulkan-t?

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

  • Vulkan — keresztplatformos alacsony szintű GPU API a Khronos Group-tól
  • Explicit kezelés memória, szinkronizáció és sorok csökkenti a CPU terhelést
  • VkPipeline — előre lefordított pipeline grafikához és számításokhoz
  • SPIR-V — bináris shader formátum, GLSL-ből és HLSL-ből fordítva
  • Dynamic Rendering (Vulkan 1.4) leegyszerűsíti a Render Pass létrehozását VkRenderPass nélkül
  • MoltenVK biztosítja a Vulkan működését iOS-en és macOS-en Metal-on keresztül
  • Vulkan 1.4 hozzáadta a Mesh Shaders, Video Encode API és kötelező sugárkövetést

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.

Projekt megbeszélése

Olvassa el is