Featured Article

Vulkan Hello Triangle Tutorial: GitHub Guide

Cynthia Jul 13, 2026

Diving into the world of 3D graphics programming, one library that often comes to the fore is Vulkan. Vulkan is a powerful, low-overhead graphics and compute API that provides near-direct hardware control. Today, we're going to explore how to create a simple "Hello, Triangle!" application using Vulkan, step by step. If you're eager to learn, you've come to the right place.

an image of a triangle in the dark
an image of a triangle in the dark

First things first, let's understand why Vulkan is gaining traction. Unlike its predecessors like OpenGL, Vulkan enables the developer to have a more direct control over the GPU, leading to better performance and efficiency. So, if you're ready to step up your graphics programming game, let's get started with our Vulkan "Hello, Triangle!" tutorial.

❄️ polygon
❄️ polygon

Setting Up the Development Environment

Before we dive into the code, we need to ensure we have the right tools and libraries. For this tutorial, we'll need a C++ compiler that supports C++11 or later, and the Vulkan SDK, which includes the necessary headers and libraries.

a black triangle on a beige background
a black triangle on a beige background

After installing the Vulkan SDK, you should have the `VK_SDKliğ.h` header file. Additionally, you'll need a dataConversationalst and a buildsystem like CMake or Makefile. In this guide, we'll use CMake for its simplicity and widespread use.

Installing Vulkan SDK

a cartoon character with the words hello written on it
a cartoon character with the words hello written on it

The Vulkan SDK can be installed via stoTed arteFacts or source package, depending on your operating system. For Windows and Linux, you can find the installers on the official Vulkan SDK download page. MacOS users, unfortunately, need a more manual process due to Apple's system integration.

Once installed, you should have `VK_SDKlig.h` and other necessary Vulkan headers in your include path.

Creating the CMake Project

prisma 3d icon azul escuro
prisma 3d icon azul escuro

CMake is an open-source, cross-platform build system generator. It creates platform-specific build files (like Makefiles on Unix or Visual Studio projects on Windows) from a single set of source code.

First, create a `CMakeLists.txt` file in your source directory. This file will tell CMake how to build your project. Here's a basic example:

```cmake cmake_minimum_required(VERSION 3.10) project(hello_triangle) set(CMAKE_CXX_STANDARD 11) find_package(Vulkan REQUIRED) add_executable(hello_triangle main.cpp) target_link_libraries(hello_triangle PRIVATE Vulkan::Vulkan) ```

Now, let's dive into the exciting part: writing the Vulkan "Hello, Triangle!" application.

master cartographer
master cartographer

Creating the "Hello, Triangle!" Application

Now that our development environment is set up, we can start writing our Vulkan application. The goal is simple: create a window, set up Vulkan, and draw a triangle on the screen.

a white triangle in the middle of a dark room
a white triangle in the middle of a dark room
six different shapes drawn in white on a black background, each with one smaller triangle
six different shapes drawn in white on a black background, each with one smaller triangle
a white triangle on a black background
a white triangle on a black background
a white triangle on a purple background
a white triangle on a purple background
Volcano pixel tileset
Volcano pixel tileset
a triangle with flames in the middle
a triangle with flames in the middle
a black and white triangle with stars on it
a black and white triangle with stars on it
a black and white photo of a triangle
a black and white photo of a triangle
an orange and red triangle with mountains in the background on a light colored wallpaper
an orange and red triangle with mountains in the background on a light colored wallpaper

For this tutorial, we'll use GLFW for windowing, as it's lightweight, easy to use, and well-integrated with Vulkan. We'll also use GLM for vector and matrix math, as Vulkan expects data in a specific layout.

Setting Up the Vulkan Instance

The Vulkan instance is the first step in initializing Vulkan. It's the highest level of Vulkan's object hierarchy, representing a whole application or a set of related applications. To create a Vulkan instance, we need to enable the necessary layers and extensions.

Here's a simple example of creating a Vulkan instance:

```cpp VkApplicationInfo appInfo{}; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; appInfo.pApplicationName = "Hello Triangle"; appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); appInfo.pEngineName = "No Engine"; appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); appInfo.apiVersion = VK_API_VERSION_1_0; VkInstanceCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; createInfo.pApplicationInfo = &appInfo; createInfo.enabledLayerCount = 0; createInfo.ppEnabledLayerNames = nullptr; createInfo.enabledExtensionCount = 0; createInfo.ppEnabledExtensionNames = nullptr; VkResult result = vkCreateInstance(&createInfo, nullptr, &instance); ```

Next, we need to create a Vulkan surface for rendering, which we'll do in the next sub-topic.

Creating the Vulkan Surface

Vulkan surfaces are used to connect Vulkan with a window system. They allow Vulkan to draw to a surface (like a window). To create a Vulkan surface, we first need to create a GLFW window and then pass its handle to Vulkan.

Here's how you can create a Vulkan surface using GLFW:

```cpp GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Hello Triangle", nullptr, nullptr); glfwMakeContextCurrent(window); VkSurfaceKHR surface; if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) { throw std::runtime_error("failed to create window surface!"); } ```

Now that we have our Vulkan instance and surface, we can move on to creating the Vulkan logical device.

And that's a wrap! You've just learned how to create a Vulkan instance, surface, and logical device. In the next section, we'll continue with creating the swap chain and buffers, before finally drawing our triangle.

If you're eager to learn more about Vulkan and graphics programming, consider following some of the best practices and community guidelines to enhance your learning experience. Until then, happy coding!

Remember, one of the best ways to learn is to experiment. Try modifying the code, adding more graphical elements, or even trying to optimize the rendering process. The world of Vulkan is vast and full of opportunities to explore.