Skip to content

Latest commit

 

History

History
executable file
·
363 lines (290 loc) · 15.6 KB

README.md

File metadata and controls

executable file
·
363 lines (290 loc) · 15.6 KB

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

  • 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-Software Khronos 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*

Vulkan 映射

Core Vulkan
Turbo::Core::TLayerInfo Vulkan相关验证层信息
Turbo::Core::TExtensionInfo Vulkan相关扩展信息
Turbo::Core::TVersion 通用版本
Turbo::Core::TInstance VkInstance的相关封装
Turbo::Core::TPhysicalDevice VkPhysicalDevice相关封装
Turbo::Core::TDevice VkDevice相关封装
Turbo::Core::TDeviceQueue VkQueue相关封装
Turbo::Core::TImage VkImage相关封装
Turbo::Core::TImageView VkImageView相关封装
Turbo::Core::TCommandBufferPool VkCommandPool相关封装
Turbo::Core::TCommandBuffer VkCommandBuffer相关封装
Turbo::Core::TBuffer VkBuffer相关封装
Turbo::Core::TShader VkShaderModule相关封装
Turbo::Core::TDescriptorPool VkDescriptorPool相关封装
Turbo::Core::TSampler VkSampler相关封装
Turbo::Core::TSubpass VulkanSubpass抽象
Turbo::Core::TAttachment VulkanAttachment抽象
Turbo::Core::TRenderPass VkRenderPass相关封装
Turbo::Core::TVertexBinding Vulkan中顶点属性抽象
Turbo::Core::TViewport VulkanViewport抽象
Turbo::Core::TScissor VulkanScissor抽象
Turbo::Core::TDescriptor Vulkan中各种描述符抽象
Turbo::Core::TDescriptorSetLayout VkDescriptorSetLayout的相关封装
Turbo::Core::TPipelineLayout VkPipelineLayout的相关封装
Turbo::Core::TPipeline TPipelineLayout的相关封装,内部有VkPipeline vkPipeline成员变量,但创建是在其子类中创建
Turbo::Core::TGraphicsPipeline 继承自Turbo::Core::TPipeline,图形渲染管线VkPipeline的相关封装,会去创建父类中的Turbo::Core::TPipeline::vkPipeline
Turbo::Core::TDescriptorSet VkDescriptorSet的相关封装
Turbo::Core::TPipelineDescriptorSet 管线所有有关描述符集的总和抽象,对应多个Turbo::Core::TDescriptorSet
Turbo::Core::TFramebuffer VkFramebuffer相关封装
Turbo::Core::TSemaphore VkSemaphore相关封装
Turbo::Core::TFence VkFence相关封装
Turbo::Extension::TSurface VkSurfaceKHR相关封装
Turbo::Extension::TSwapchain VkSwapchainKHR相关封装

日志

Note

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

赞助

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

Warning

未成年人禁止投喂

Give india logo

赞助项目

Vulkan 入门精要