Introduction to Vulkan API Project

So after the first renderer in OpenGL I decided for myself that this subject is very interesting to me and I want to understand more and learn new things. I started googling about modern APIs and found out that in fact a lot of companies use either DirectX or Vulkan (or both). And my eyes fell on Vulkan for the reason that everywhere I read everyone said that Vulkan is very difficult to understand for beginners, you need to write a lot of code and so on. But it did not discourage me at all, and even on the contrary attracted me, so I started studying it. This project is my first experience with Vulkan, of course for this kind of projects I am not ashamed to write quite “dirty” code, because the purpose of the project is to touch Vulkan itself. GitHub page.

And here’s what I’ve learned:

  1. Vulkan Fundamentals
    • Understanding Vulkan’s explicit control over GPU resources.
    • Learning the differences between Vulkan and OpenGL (and today also DirectX).
    • Setting up a Vulkan instance and enabling necessary extensions.
  2. Instance and Device Creation
    • Creating a Vulkan instance and selecting a suitable physical device.
    • Understanding queue families and logical device creation.
    • Managing validation layers and debugging messages.
  3. Swap Chains and Surface Management
    • Creating and configuring a swap chain for rendering.
    • Understanding image formats, presentation modes, and surface handling.
    • Managing framebuffers and synchronization objects.
  4. Graphics Pipeline
    • Understanding the Vulkan pipeline architecture and its fixed stages.
    • Writing SPIR-V shaders and creating shader modules.
    • Setting up pipeline states, including rasterization, depth testing, and blending.
    • Creating render passes and framebuffers.
  5. Command Buffers and Synchronization
    • Recording and submitting command buffers.
    • Understanding semaphores and fences for GPU synchronization.
    • Managing multiple frames in flight for efficient rendering.
  6. Vertex Input and Buffers
    • Creating vertex and index buffers.
    • Using Vulkan’s memory management model and buffer allocation strategies.
    • Understanding descriptor sets and uniform buffers for passing data to shaders.
  7. Texture Mapping
    • Loading and transferring texture data to the GPU in Vulkan.
    • Creating image views, samplers, and managing mipmaps in Vulkan.
    • Using descriptor sets to bind textures to shaders.
  8. Depth and Stencil Buffering
    • Implementing depth buffering for correct rendering order.
    • Configuring stencil testing for advanced rendering techniques.

Leave a comment

From the blog