平台

September 8, 2025 · View on GitHub

Turbo

English

Turbo 是基于 Vulkan 开发的跨平台渲染引擎

LICENSE repo size QQ Group Email 爱发电

TurboImage

平台

Linux Windows IOS Android HarmonyOS Web

文档

模块

Core

说明
命名空间Turbo::Core
文档./docs/TurboDesign.drawio:CoreCore.md
目录./engine/core
依赖独立模块,无依赖。
说明Core作为核心模块直接与Vulkan沟通,是上层与Vulkan底层最直接的桥梁,Turbo中所有的GPU相关工作最终都会从上层回到Core层。

FrameGraph

说明
命名空间Turbo::FrameGraph
文档./docs/TurboDesign.drawio:FrameGraphFrameGraph.md
目录./engine/framegraph
依赖独立模块,无依赖。
说明FrameGraph用于描述一帧中的资源、渲染配置和渲染指令

Render

说明
命名空间Turbo::Render
文档FrameGraphAdvance.md
目录./engine/render
依赖CoreFrameGraph
说明由于直接使用Core层进行渲染相对来说还是会比较繁琐吃力一些,Render模块的出现就是将CoreFrameGraph结合起来,提供更加方便的工作流,将开发者从繁杂的Core层脱离出来,提供更加简单易用的设计架构

Note

目前主要使用和维护 Core 模块

克隆

git clone --recursive https://github.com/FuXiii/Turbo.git

Note

第三方库目前使用 gitsubmodule 进行维护,所以 克隆 时指定 --recursive 即可自动下载第三方库。

Note

如果您克隆时没有指定 --recursive 参数,则在克隆完成之后,Turbo 目录下执行如下指令:

git submodule init
git submodule update

编译

Note

  • Turbo目前主要有两个分支:masterdev。其中master是主分支,确保可以正常编译和使用,而dev分支会经常开发新功能,想看开发推进的可以查看dev分支,但不保证能够正常编译。

  • Turbo引擎的核心位于./engine/core,这是一个单独的模块,可以单独编译,您可以直接将他拷贝出来放到自己的工程中。将会输出名为TCore的库文件。

  • Turbo引擎会使用核心进行开发,有关如何使用该核心,目前可以参考./main.cpp./samples文件夹下各个示例。该文件中有最新的核心实例代码,同时也是引擎的一部分。

  • Turbo核心 模块使用如下第三方库:

    说明
    glslang用于将Shader代码字符串编译成Spir-V
    SPIRV-Cross用于解析Spir-V,获取Shader中相关声明。(可能考虑使用 SPIRV-Reflect ,不再使用 SPIRV-Cross
    SPIRV-Reflect用于解析Spir-V,获取Shader中相关声明
    VulkanMemoryAllocator用于分配Vulkan资源内存
  • Turbo非核心 模块(也就是目前除了./engine/core之外)使用如下第三方库:

    说明
    glfw窗口库
    glm用于向量矩阵等运算
    imgui用于绘制界面UI
    KTX-SoftwareKhronos Texture通用纹理标准
    tinygltf读取gltf文件库

Important


Vulkan SDK 不是 Turbo 的必需品( Turbo 不依赖 Vulkan SDK

Windows
  1. 首先请查看环境变量中是否已经加入了gitbin目录(KTX-Sofware编译依赖bash.exe,正常该程序位于gitbin目录下)

  2. 请安装 Python (第三方库很多使用Python脚本运行,安装完后请确保Python{Python的安装目录}/Python{版本号}/目录和{Python的安装目录}/Python{版本号}/Scripts目录加入到了环境变量中)

  3. 之后使用./CMakeLists.txt即可

  4. 设置相关CMake参数如下:

    TCORE_SHARED_LIBS=ON // Turbo 的核心库输出为动态库,如果想输出为静态库请设置为 OFF (默认情况下为 OFF)
    
cd ${自定义目录}
git clone --recursive https://github.com/FuXiii/Turbo.git
cd ./Turbo
mkdir build
cd ./build
cmake ..
cmake --build . --config Release
Linux
  1. 安装如下环境
sudo apt install libx11-dev       //cmake
sudo apt install libxrandr-dev    //glfw 
sudo apt install libxinerama-dev  //glfw 
sudo apt install libxcursor-dev   //glfw 
sudo apt install libxi-dev        //glfw 
sudo apt install libwayland-dev   //build 
sudo apt install build-essential  //build 
sudo apt install freeglut3-dev    //build 
  1. 之后使用./CMakeLists.txt即可

  2. 设置相关CMake参数如下:

    TCORE_SHARED_LIBS=ON // Turbo 的核心库输出为动态库,如果想输出为静态库请设置为 OFF (默认情况下为 OFF)
    
sudo apt install libx11-dev      
sudo apt install libxrandr-dev   
sudo apt install libxinerama-dev 
sudo apt install libxcursor-dev  
sudo apt install libxi-dev       
sudo apt install libwayland-dev  
sudo apt install build-essential 
sudo apt install freeglut3-dev   

cd ${自定义目录}
git clone --recursive https://github.com/FuXiii/Turbo.git
cd ./Turbo
mkdir build
cd ./build
cmake ..
make

Note

如果编译有遇到问题请查看常见问题文档如果还是没有解决方法请提Issue*

示例

samples 下有很多示例供开发者查阅。

其中 HelloTriangle(HelloTriangle.cpp) 是推荐的入门示例(主体代码400行左右)。通过渲染一个三角形,把基本核心用法过了遍,相对来说较简单,好上手。

Vulkan 映射

CoreVulkan
Turbo::Core::TLayerInfoVulkan相关验证层信息
Turbo::Core::TExtensionInfoVulkan相关扩展信息
Turbo::Core::TVersion通用版本
Turbo::Core::TInstanceVkInstance的相关封装
Turbo::Core::TPhysicalDeviceVkPhysicalDevice相关封装
Turbo::Core::TDeviceVkDevice相关封装
Turbo::Core::TDeviceQueueVkQueue相关封装
Turbo::Core::TImageVkImage相关封装
Turbo::Core::TImageViewVkImageView相关封装
Turbo::Core::TCommandBufferPoolVkCommandPool相关封装
Turbo::Core::TCommandBufferVkCommandBuffer相关封装
Turbo::Core::TBufferVkBuffer相关封装
Turbo::Core::TShaderVkShaderModule相关封装
Turbo::Core::TDescriptorPoolVkDescriptorPool相关封装
Turbo::Core::TSamplerVkSampler相关封装
Turbo::Core::TSubpassVulkanSubpass抽象
Turbo::Core::TAttachmentVulkanAttachment抽象
Turbo::Core::TRenderPassVkRenderPass相关封装
Turbo::Core::TVertexBindingVulkan中顶点属性抽象
Turbo::Core::TViewportVulkanViewport抽象
Turbo::Core::TScissorVulkanScissor抽象
Turbo::Core::TDescriptorVulkan中各种描述符抽象
Turbo::Core::TDescriptorSetLayoutVkDescriptorSetLayout的相关封装
Turbo::Core::TPipelineLayoutVkPipelineLayout的相关封装
Turbo::Core::TPipelineTPipelineLayout的相关封装,内部有VkPipeline vkPipeline成员变量,但创建是在其子类中创建
Turbo::Core::TGraphicsPipeline继承自Turbo::Core::TPipeline,图形渲染管线VkPipeline的相关封装,会去创建父类中的Turbo::Core::TPipeline::vkPipeline
Turbo::Core::TDescriptorSetVkDescriptorSet的相关封装
Turbo::Core::TPipelineDescriptorSet管线所有有关描述符集的总和抽象,对应多个Turbo::Core::TDescriptorSet
Turbo::Core::TFramebufferVkFramebuffer相关封装
Turbo::Core::TSemaphoreVkSemaphore相关封装
Turbo::Core::TFenceVkFence相关封装
Turbo::Extension::TSurfaceVkSurfaceKHR相关封装
Turbo::Extension::TSwapchainVkSwapchainKHR相关封装

日志

Note

日志文件转移到了 更新日志

赞助

想赞助的小伙伴,欢迎使用爱发电赞助,请量力而为。

Warning

未成年人禁止投喂

Give india logo

赞助项目

Vulkan 入门精要