
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:
- 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.
- 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.
- 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.
- 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.
- Command Buffers and Synchronization
- Recording and submitting command buffers.
- Understanding semaphores and fences for GPU synchronization.
- Managing multiple frames in flight for efficient rendering.
- 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.
- 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.
- Depth and Stencil Buffering
- Implementing depth buffering for correct rendering order.
- Configuring stencil testing for advanced rendering techniques.
Leave a comment