{"id":19862006,"url":"https://github.com/edgomez/vulkan_tutorial","last_synced_at":"2026-05-25T16:32:41.325Z","repository":{"id":146114357,"uuid":"562302383","full_name":"edgomez/vulkan_tutorial","owner":"edgomez","description":"Following the vulkan-tutorial.com","archived":false,"fork":false,"pushed_at":"2026-02-19T01:00:21.000Z","size":81,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-02-19T05:15:44.006Z","etag":null,"topics":["tutorial","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/edgomez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-05T22:58:07.000Z","updated_at":"2026-02-19T01:00:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"4d3722f3-5660-4eeb-8faf-4929f510f6ea","html_url":"https://github.com/edgomez/vulkan_tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/edgomez/vulkan_tutorial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edgomez%2Fvulkan_tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edgomez%2Fvulkan_tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edgomez%2Fvulkan_tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edgomez%2Fvulkan_tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edgomez","download_url":"https://codeload.github.com/edgomez/vulkan_tutorial/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edgomez%2Fvulkan_tutorial/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33483877,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T14:31:05.219Z","status":"ssl_error","status_checked_at":"2026-05-25T14:31:02.878Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tutorial","vulkan"],"created_at":"2024-11-12T15:10:29.189Z","updated_at":"2026-05-25T16:32:41.315Z","avatar_url":"https://github.com/edgomez.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# Vulkan Tutorial\n\n- [Vulkan Tutorial](#vulkan-tutorial)\n  - [Description](#description)\n  - [Tutorials](#tutorials)\n  - [Requirements](#requirements)\n  - [How to build](#how-to-build)\n  - [Running tutorials](#running-tutorials)\n  - [Running tests](#running-tests)\n  - [Code structure](#code-structure)\n  - [Code style](#code-style)\n  - [Editing the code with Visual Studio Code](#editing-the-code-with-visual-studio-code)\n  - [License](#license)\n\n## Description\n\nThis is my attempt at following the [Vulkan Tutorial](https://vulkan-tutorial.com/) by implementing each step from scratch rather than copying existing code.\n\n## Tutorials\n\n- **00_common** - Common library with RAII helpers for SDL and scope guards\n- **01_instance** - [Creating a Vulkan instance and selecting a physical device](tutorial/01_instance/README.md)\n- **01_instance_nothrow** - [Same as 01_instance but without exceptions](tutorial/01_instance_nothrow/README.md)\n\n## Requirements\n\nI won't assume much about your development environment, but the code\ncontained in this repository expects the following software to be\ninstalled:\n\n1. SDL3 development package (can be installed system-wide, or bootstrapped locally by running `git submodule update --init external/SDL` to fetch SDL3 into the `external/` directory)\n2. Vulkan development package (must be installed system-wide)\n3. Validation layer development package (optional, but highly recommended for debug messages and error checking)\n4. CMake \u003e= 3.21 (not a hard requirement, but I know this version will work for sure)\n5. A C++11 compiler (clang, g++ are fine, msvc may work)\n6. Google Test (optional, for running unit tests; can be installed system-wide or bootstrapped locally by running `git submodule update --init external/googletest`)\n\n## How to build\n\n```sh\ncmake -B build/host -S . -G \"Ninja Multi-Config\"\ncmake --build build/host --config RelWithDebInfo --target all\n```\n\nYou can choose any generator that fits your development environment.\n\nDependency provider selection can be overridden explicitly:\n\n```sh\n# Force system packages\ncmake -B build/host -S . -G \"Ninja Multi-Config\" \\\n  -DVULKAN_TUTORIAL_SDL3_PROVIDER=SYSTEM \\\n  -DVULKAN_TUTORIAL_GTEST_PROVIDER=SYSTEM\n\n# Force bundled submodules from external/\ncmake -B build/host -S . -G \"Ninja Multi-Config\" \\\n  -DVULKAN_TUTORIAL_SDL3_PROVIDER=EXTERNAL \\\n  -DVULKAN_TUTORIAL_GTEST_PROVIDER=EXTERNAL\n```\n\nAccepted values are `AUTO` (default), `SYSTEM`, and `EXTERNAL`.\n\n## Running tutorials\n\nAfter building, executables are located in `build/host/tutorial/\u003cchapter\u003e/\u003cconfig\u003e/`:\n\n```sh\n# Run tutorial 01 with debug validation layers\n./build/host/tutorial/01_instance/RelWithDebInfo/vulkan-tutorial-01-instance --debug\n\n# Run with specific device\n./build/host/tutorial/01_instance/RelWithDebInfo/vulkan-tutorial-01-instance --device \"NVIDIA GeForce RTX 3080\"\n\n# Custom window size\n./build/host/tutorial/01_instance/RelWithDebInfo/vulkan-tutorial-01-instance --width 1920 --height 1080\n\n# Run the nothrow variant\n./build/host/tutorial/01_instance_nothrow/RelWithDebInfo/vulkan-tutorial-01-instance-nothrow --debug\n```\n\n## Running tests\n\nTests are built by default when building this project directly (as top-level). Google Test must be available either system-wide or via submodule:\n\n```sh\n# Initialize Google Test submodule if not using system package\ngit submodule update --init external/googletest\n\n# Build (tests included by default)\ncmake -B build/host -S . -G \"Ninja Multi-Config\"\ncmake --build build/host --config RelWithDebInfo --target all\n\n# Run all tests\n./build/host/tests/RelWithDebInfo/vulkan-tutorial-tests\n\n# Run tests with verbose output\n./build/host/tests/RelWithDebInfo/vulkan-tutorial-tests --gtest_verbose\n```\n\nTo disable tests:\n\n```sh\ncmake -B build/host -S . -G \"Ninja Multi-Config\" -DVULKAN_TUTORIAL_BUILD_TESTS=OFF\n```\n\nIf using this project via `add_subdirectory()`, tests are disabled by default. Enable them with `-DVULKAN_TUTORIAL_BUILD_TESTS=ON`.\n\nIf `VULKAN_TUTORIAL_GTEST_PROVIDER=SYSTEM` is set, CMake requires a system Google Test package.\nIf `VULKAN_TUTORIAL_GTEST_PROVIDER=EXTERNAL` is set, CMake requires `external/googletest` to exist.\n\n## Code structure\n\n```text\n.\n├── CMakeLists.txt              # Top-level build configuration\n├── external/                   # Third-party dependencies (SDL3, Google Test)\n├── tests/                      # Unit tests (built if Google Test is available)\n├── tutorial/\n│   ├── 00_common/              # VulkanTutorialCommon library\n│   ├── 01_instance/            # Tutorial 01: Instance and device\n│   └── 01_instance_nothrow/    # Tutorial 01 (nothrow variant)\n└── script/                     # Utility scripts (formatting, etc.)\n```\n\nEach tutorial's `CMakeLists.txt` is standalone except for its dependency on `VulkanTutorialCommon`. The code is written in C++11, following modern CMake guidelines. Headers are self-sufficient - each has a corresponding `.cpp` file that includes it first to verify independence.\n\n## Code style\n\nThis project uses clang-format for consistent code styling. Apply formatting using the `.clang-format` file at the repository root.\n\n## Editing the code with Visual Studio Code\n\nRecommended extensions for VS Code:\n\n- **C/C++** (`ms-vscode.cpptools`) - Microsoft\n- **Better C++ Syntax** (`jeff-hykin.better-cpp-syntax`) - Jeff Hykin\n- **CMake Tools** (`ms-vscode.cmake-tools`) - Microsoft\n- **CMake Language Support** (`twxs.cmake`) - twxs\n\nThese provide code completion, browsing, formatting, and build integration.\n\n## License\n\nThe code found in this repository is licensed under the terms of the\nMIT license. See the [LICENSE.md](./LICENSE.md) file for the exact terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedgomez%2Fvulkan_tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedgomez%2Fvulkan_tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedgomez%2Fvulkan_tutorial/lists"}