Skip to content

Latest commit

 

History

History
371 lines (294 loc) · 15.5 KB

File metadata and controls

371 lines (294 loc) · 15.5 KB

Turbo

简体中文

Turbo is rendering engine base Vulkan

LICENSE repo size QQ Group Email 爱发电

TurboImage

Platform

Linux Windows IOS Android HarmonyOS Web

Document

Modular

Core

item info
namespace Turbo::Core
doc ./docs/TurboDesign.drawio:Core and Core.md
path ./engine/core
dependency discrete
describe Core as kernel modular communicate with Vulkan. It is the most important bridge between Core and Vulkan. All the calling in upper strecuture will return to Core

FrameGraph

item info
namespace Turbo::FrameGraph
doc ./docs/TurboDesign.drawio:FrameGraphFrameGraph.md
path ./engine/framegraph
dependency discrete
describe FrameGraph used to record the resource, rendering configure and command in a frame

Render

item info
namespace Turbo::Render
doc FrameGraphAdvance.md
path ./engine/render
dependency CoreFrameGraph
describe Due to the complexity of directly using CoreRender modular will combine Core and FrameGraph for a more clearly work pass for get free from Core.

Note

for now mainly developing Core

Clone

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

Note

Third party maintained by submodule in git, so need --recursive to automatically download third party.

Build

Note

  • For now Turbo have two main branches : master and dev. The master is default branch, it ensure that compilation and develope passed without deadly bug. The dev usually develope new feature, if you want know what changed in develope forward, please check dev branch, this branch not promise can compile smoothly.

  • Turbo engine kernel in ./engine/core is a discrete modular and can be islanded compile. You can directly copy them to yourself project. Will output lib file which named TCore .

  • Turbo engine will use kernel to develope new feature, about how to use them can reference codes under ./main.cpp and ./samples which supply many demo.

  • Core modular used thirdparty:

    lib info
    glslang Compile Shader code string to SPIR-V
    SPIRV-Cross Parse SPIR-V,fetch declare interface in Shader.(Maybe consider to use SPIRV-Reflect forsake SPIRV-Cross
    SPIRV-Reflect Parse SPIR-V,fetch declare interface in Shader.
    VulkanMemoryAllocator Manage Vulkan memory resource
  • Non-Core modular used thirdparty:

    lib info
    glfw Window lib
    glm Use for vector and matrix calculate
    imgui Use for draw UI
    KTX-Software Khronos Texture uniform texture standard
    tinygltf Read gltf

Important

Vulkan SDK is not necessity for Turbo (Not dependent Vulkan SDK)

Windows
  1. Need check the bin path under the git had been add in system enironment(KTX-Sofware compile dependent bash.exe, normaly it will under git/bin).

  2. Please install Python (Many thirdparty use Python script ,after install please make sure ${Python install path}/Python{Version}/目录和${Python install path}/Python{Version}/Scripts had been add in system enironment)

  3. use ./CMakeLists.txt

  4. related CMake variable:

    TCORE_SHARED_LIBS=ON // Turbo core will output dynamic lib,if you want output static lib set to OFF (default is OFF)
cd ${Custome path}
git clone --recursive https://github.com/FuXiii/Turbo.git
cd ./Turbo
mkdir build
cd ./build
cmake ..
cmake --build . --config Release
Linux
  1. Config environment
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. use ./CMakeLists.txt

  2. related CMake variable:

    TCORE_SHARED_LIBS=ON // Turbo core will output dynamic lib,if you want output static lib set to OFF (default is 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 ${Custome path}
git clone --recursive https://github.com/FuXiii/Turbo.git
cd ./Turbo
mkdir build
cd ./build
cmake ..
make

Note

If you meet some annoying question please check FAQ first, if it still can't fixed your problem please create an Issue.

Sample

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

In samples folder there has many demo for developer.

Among which HelloTriangle(HelloTriangle.cpp) is the demo which recommend to beginner(major code about 400 lines)。By drawing a triangle to show the core usage, it is relatively simple and friendly to beginners.

Vulkan Map

Core Vulkan
Turbo::Core::TLayerInfo Vulkan info about Layer
Turbo::Core::TExtensionInfo Vulkan info about extension
Turbo::Core::TVersion Common version
Turbo::Core::TInstance VkInstance encapsulation
Turbo::Core::TPhysicalDevice VkPhysicalDevice encapsulation
Turbo::Core::TDevice VkDevice encapsulation
Turbo::Core::TDeviceQueue VkQueue encapsulation
Turbo::Core::TImage VkImage encapsulation
Turbo::Core::TImageView VkImageView encapsulation
Turbo::Core::TCommandBufferPool VkCommandPool encapsulation
Turbo::Core::TCommandBuffer VkCommandBuffer encapsulation
Turbo::Core::TBuffer VkBuffer encapsulation
Turbo::Core::TShader VkShaderModule encapsulation
Turbo::Core::TDescriptorPool VkDescriptorPool encapsulation
Turbo::Core::TSampler VkSampler encapsulation
Turbo::Core::TSubpass Subpass abstruct
Turbo::Core::TAttachment Attachment abstruct
Turbo::Core::TRenderPass VkRenderPass encapsulation
Turbo::Core::TVertexBinding Vulkan vertex attribute abstruct
Turbo::Core::TViewport Viewport abstruct
Turbo::Core::TScissor Scissor abstruct
Turbo::Core::TDescriptor Descriptor abstruct
Turbo::Core::TDescriptorSetLayout VkDescriptorSetLayoutencapsulation
Turbo::Core::TPipelineLayout VkPipelineLayoutencapsulation
Turbo::Core::TPipeline TPipelineLayoutencapsulation,internal have VkPipeline vkPipeline member variable,but create in child class
Turbo::Core::TGraphicsPipeline Inherited from Turbo::Core::TPipeline, graphic pipeline VkPipeline encapsulation,will create Turbo::Core::TPipeline::vkPipeline which in it's parent
Turbo::Core::TDescriptorSet VkDescriptorSetencapsulation
Turbo::Core::TPipelineDescriptorSet Manage all the Descriptor Set and abstruct,corresponding to multiple Turbo::Core::TDescriptorSet
Turbo::Core::TFramebuffer VkFramebuffer encapsulation
Turbo::Core::TSemaphore VkSemaphore encapsulation
Turbo::Core::TFence VkFence encapsulation
Turbo::Extension::TSurface VkSurfaceKHR encapsulation
Turbo::Extension::TSwapchain VkSwapchainKHR encapsulation

Log

Note

Log file move to Daily updates

Sponsor

If you want sponsor, welcome use 爱发电.

Warning

Minors are prohibited for sponsor

Give india logo

Sponsored Project

Essentials.of.Vulkan