msnh2012 / VK_PROJ_Turbo

Turbo is rendering engine base Vulkan

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Turbo

LICENSE repo size QQ Group Email 爱发电

Turbo是渲染引擎

 _____               _            
/__   \ _   _  _ __ | |__    ___  
  / /\/| | | || '__|| '_ \  / _ \ 
 / /   | |_| || |   | |_) || (_) |
 \/     \__,_||_|   |_.__/  \___/ 

Platform

Platform Linux
Platform Windows
Platform IOS
Platform HarmonyOS
Platform Web

Version

当前版本 0.0.0.12

State

  • 开发中

Sponsor

想赞助的小伙伴,欢迎使用爱发电赞助,请量力而为,如果赞助完真有困难可以退回,未成年人禁止投喂!!!
爱发电 爱发电Turbo引擎

赞助项目

Document

  • 使用MarkDown书写,使用docsify部署(之前是使用MkDocs)
  • 使用MarkDown书写文字和文档,使用drawio绘制设计图表
  • 详细设计文档请参考docs/TurboDesign.drawio(需要安装drawwio)
  • 目前存在的问题待解决,请查看docs/Issue.md
  • 开发记录录像请浏览 Turbo引擎开发记录

Modular

目前Turbo中有以下模块

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层脱离出来,提供更加简单易用的设计架构

Build

  • 首先您需要知道的:

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

    • Turbo引擎被设计成各种模块,有Core核心模块, 有FrameGraph模块等。

    • 目前Turbo的核心模块基本完成(未完成部分和相关问题请参考下面的RoadMap章节和docs/Issue.md文档)

    • Turbo引擎的核心位于./engine/core,这是一个单独的模块,您可以直接将他拷贝出来放到自己的工程中

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

    • 核心会用到的第三方库为:

      • glslang : 用于将Shader代码字符串编译成Spir-V
      • SPIRV-Cross : 用于解析Spir-V,获取Shader中相关声明
      • VulkanMemoryAllocator : 用于分配Vulkan资源内存
    • 本人对于CMake并不是非常精通,有关核心是如何寻找Vulkan库的,我直接配置的绝对路径,请修改engine/core/CMakeLists.txt中的此行代码:

      #已遗弃
      ##set_target_properties(vulkan PROPERTIES IMPORTED_LOCATION F:/VulkanSDK/1.3.204.1/Lib/vulkan-1.lib)

      请将该行修改成您电脑上的Vulkan库目录。 该问题将会在不远的未来通过动态加载库文件得到解决。

      ┗|`O′|┛oO 2022/7/27 该问题已修改完成,详情请参考下面的如何编译Turbo章节的

    • Turbo非核心模块,也就是目前除了./engine/core之外,基本上就是Turbo的非核心了,之后将在核心之外,基于核心开发高级模块,比如FrameGraph之类的,目前非核心模块已有核心模块使用案例,位于./main.cpp./samples文件夹下,就像前面说的,用例使用如下第三方库:

      • glfw :窗口库
      • glm : 用于向量矩阵等运算
      • imgui : 用于绘制界面UI
      • KTX-Software : Khronos Texture通用纹理标准
      • tinygltf : 读取gltf文件库
  • 如何编译Turbo

    • 请安装Vulkan SDK
      • ( *:2022/7/27 对于Windows系统,目前Turbo已经完成了动态加载Vulkan函数,Vulkan SDK目前对于Turbo不是必需品(有些第三方依赖需要Vulkan SDK,比如VulkanMemoryAllocator),VulkanRuntimeTurbo的必须品,正常Windows都会自带该运行时库,如果没有请安装Vulkan Latest Runtime即可,Linux系统等有空适配一下(2022/11/14适配完成))

        Vulkan Loader 文档有这么一句: In previous versions of the loader, it was possible to statically link the loader. This was removed and is no longer possible. The decision to remove static linking was because of changes to the driver which made older applications that statically linked unable to find newer drivers.

    • Turbo的核心可以单独编译,编译相关的CMakeLists.txt位于./engine/core/CMakeLists.txt。将会输出名为TCore的库文件。
    • 如果您想直接编译Turbo
      1. 首先请查看环境变量中是否已经加入了gitbin目录,KTX-Sofware编译依赖bash.exe,正常该程序位于gitbin目录下

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

      3. 请修改engine/core/CMakeLists.txt中的Vulkan库目录为您自己的目录

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

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

        KTX_FEATURE_LOADTEST_APPS=OFF//如果您想加载KTX测试,请设置ON
        KTX_FEATURE_DOC=OFF//如果您想生成KTX文档,请设置ON
        KTX_FEATURE_STATIC_LIBRARY=ON //目前Turbo按照静态库使用KTX
        
        //2022/7/30 关于解决Turbo核心库的依赖库问题解决,核心库对于VulkanMemoryAllocator使用动态加载Vulkan API方式,这也是Turbo引擎加载Vulkan API的方式
        VMA_STATIC_VULKAN_FUNCTIONS=0
        VMA_DYNAMIC_VULKAN_FUNCTIONS=1

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

  • 如何运行

    1. 由于每个用户输出的目录都不一样,所以./main.cpp的示例程序使用的资源文件使用的是相对路径,所有的资源文件都指向./asset/目录,请在./main.cpp中全局搜索asset字符,替换成自己的目录即可。

    注:如果运行有遇到问题请查看常见问题文档如果还是没有解决方法请提Issue

Trifles

  • 整理一下头文件,有点乱,去掉不必要的头文件

RoadMap

注:该RoadMap章节信息有滞后性,引擎具体细节和开发计划请查看后面的开发Log章节(更新的比较频繁)

2022/5/15

  • Turbo 引擎对于 Vulkan 1.0 的相关核心功能已初步成型,由于Vulkan本身的复杂性还有很多特性没有实现,在此做一下记录,记录该引擎以实现的特性和未来计划实现特性,该特性记录将会和docs/Issue.md文档配合使用。
  • Core核心层将会作为单独完整的库发布,位于./engine/core中, 现在核心库已分离成单独的库,将会输出TCore.libTCore.a库文件
  • Turbo将使用该Core核心继续开发高级特性
  • 未来有时间录制Vulkan教程引擎开发教程视频

2022/5/28

  • 实现完Vulkaninput attachment也就是完成了延迟渲染相关工作,Turbo核心现在对于图形的核心封装设计基本上接近尾声,延迟渲染之后将会开展FrameGraph相关设计实现工作。有关几何着色器,细分着色器,光线追踪等将会在Turbo的核心继续展开
  • FrameGraph将会是Turbo引擎实现高级特性的重点,ECS(Entity Component System)或者EC(Entity Component)之类管理场景的相关技术不是Turbo引擎的重点,Turbo引擎目前的重点目标是不依赖任何窗口库(用户自定义),不依赖任何场景结构技术(用户自己实现自己的场景结构),Turbo可以很轻松的嵌入其中。

2022/5/30

  • Turbo核心基本实现完成,接下来开始FrameGraph的设计开发。敬请期待。

2022/6/7

  • 已开始写系列的使用示例。

2022/8/10

  • 开始设计实现engine

已完成示例

  • HelloTriangle - 将会使用核心绘制IMGUI和三角形
  • PureHelloTriangle - 将会使用核心绘制三角形
  • PureCombinedImageSampler - 将会使用核心绘制三角形,在此基础上使用纹理采样器一体式对纹理采样
  • PureSeparateImageSampler - 将会使用核心绘制三角形,在此基础上使用纹理采样器分离式对纹理采样
  • PureIndexDraw - 将会使用核心,基于索引渲染绘制一个方形面片,并在此基础上使用纹理采样器分离式对纹理采样
  • FrameGraphSample - FrameGraph的示例,目前该示例仅供测试(FrameGraph未实现完成),您可以通过该示例了解FrameGraph的基本流程

已完成特性

1.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相关封装

计划完成特性

  • Turbo引擎目前以Core核心层为主(优先级不分先后)

    • [ ✓ ] 生成mipmap
    • [ ✓ ] 混合渲染
    • [ ✓ ] 天空盒
    • HDR(应该算是延迟渲染的一部分)
    • [ ✓ ] 实例化渲染
    • 间接渲染
    • 细分着色器
    • 几何着色器
    • Vulkan光追标准
    • 多线程
    • [ ✓ ] 计算着色器
    • [ ✓ ] 计算管线
    • [ ✓ ] 延迟渲染
  • Core:跨平台窗口层抽象

  • CoreIMGUI

  • CoreKTXglTF

  • CoreFrameGraph

  • CoreFrameGraph层实现PBR

  • CoreECS

  • 2022/7/13 搞了个鸿蒙OS(Harmony OS)系统的手机,有时间适配一下鸿蒙设备。

Log

  • 2020/10/29

    • 完成TInstance TLayer TObject的文档,创建TExtension文档。目前跳转链接没有全部测试,有些页面还没有创建。
  • 2020/10/29

    • 完成TExtension文档。页内跳转还没写。TExtensionType值和描述还没写
  • 2022/3/17 基本调通了Turbo在VSCodes上的部署。

    • 注意TApplication::InitVulkan对于验证层的修改。
    • 搞清Turbo中一些函数返回局部变量,之后没有拷贝一份而直接传给Vulkan API后会卡住的问题
    • 将TApplication改成TEngine,作为Turbo最高层抽象
  • 2022/3/18

    • 继承自TInfo的类用于实现Vulkan相关Info功能,其中的GetVkXXXInfo等相关信息函数是返回局部变量,需要函数返回立刻保存数据,可能会有问题,先暂时这样。
  • 2022/3/19 设计架构

    • 重构TAllcator,创建TVulkanAllocator类专门用于Vulkan内存分配,并作为引擎的默认内存分配器
    • 重写TInstance::IsSupportVulkan()函数,原先有隐藏的Bug
    • Turbo::Core::TPhysicalDeviceProxy下的static VkResult EnumeratePhysicalDevices(TInstance *instance)改成私有
    • Turbo::Core::TEngine::InitVulkan()函数中不应开启任何layer或extension,该函数仅仅是为用户提供收集Vulkan相关信息功能。
    • TEngine中增加如下
      • uint32_t GetPhysicalDeviceCount();
      • std::vector\<TPhysicalDevice\> GetPhysicalDevices();
      • TPhysicalDevice GetBestPhysicalDevice();
    • TInfo下的TInfoType没用,去掉
    • TVendor修改成TVendorInfo
    • 创建TPhysicalDeviceInfo(完成,待完善)
    • TQueueFamily修改成TQueueFamilyInfo
    • 仍需修改,未完成如下:
      • TExtension
      • TLayer
      • TFormat
  • 2022/3/20 设计架构

    • 完成如下:

      • TExtension转成TExtensionInfo
      • TLayer转成TLayerInfos
      • TFormat转成TFormatInfo
      • TMemoryHeap转成TMemoryHeapInfo
      • TMemoryType转成TMemoryTypeInfo
      • 完成TPhysicalDeviceInfoTPhysicalDevice相结合
    • TPhysicalDeviceProxy::Instance(this->instance)的调用转移到了TInstance的构造函数中,TInstance中增加了TPhysicalDevice数组,接下来的所有对于TInstance用法都是指针连接(防止拷贝浪费内存)

    • 如下函数从TEngine转移到了Tinstance中,除了GetPhysicalDevice()函数如下函数将会从TPhysicalDeviceProxy中移除

      • uint32_t GetPhysicalDeviceCount();
      • TPhysicalDevice GetPhysicalDevice(uint32_t index);
      • std::vector<TPhysicalDevice> GetPhysicalDevices();
      • TPhysicalDevice GetBestPhysicalDevice();
  • 2022/3/21 设计架构

    • 完成如下:
      • TPhysicalDevice中增加std::map<TQueueFamilyInfo, uint32_t *> availableQueueCountMap,用于存储当前QueueFamily还有多少队列可用,用于DeviceQueue的创建,每成功创建一个DeviceQueue,相应的可用队列数减一,每销毁一个Queue相应的队列数加一。

      • TPhysicalDevice::availableQueueCountMapTPhysicalDevice::InitDeviceQueueParameter函数中分配动态内存,在TInstance的构造函数中释放动态内存

      • TPhysicalDevice中增加uint32_t GetAvailableQueueCount(TQueueFamilyInfo& queueFamily)函数,用于获取可用队列个数,如果返回0说明没有可用队列,如果大于0说明存在可用队列

      • 将TPhysicalDevice如下

        TQueueFamilyInfo* bestGraphysicsQueueFamily = nullptr;
        TQueueFamilyInfo* bestComputeQueueFamily = nullptr;
        TQueueFamilyInfo* bestTransferQueueFamily = nullptr;
        TQueueFamilyInfo* bestSparseQueueFamily = nullptr;
        TQueueFamilyInfo* bestProtectedQueueFamily = nullptr;

        修改成索引。指针指向成员vector变量是临时地址,会出现Bug

         uint32_t bestGraphysicsQueueFamilyIndex = UINT32_MAX;
         uint32_t bestComputeQueueFamilyIndex = UINT32_MAX;
         uint32_t bestTransferQueueFamilyIndex = UINT32_MAX;
         uint32_t bestSparseQueueFamilyIndex = UINT32_MAX;
         uint32_t bestProtectedQueueFamilyIndex = UINT32_MAX;

        并修改相关函数 TPhysicalDevice::GetBestXXX()对于这类函数,如果Turbo找到了性能最好的队列族将会正常返回,如果没找到,将会返回一个全0,索引为UINT32_MAX的无效TQueueFamilyInfo

      • 重构TDeviceTDeviceQueueTDeviceCreateInfoTDeviceQueueCreateInfo

        • std::vector<TDeviceQueueCreateInfo> deviceQueueCreateInfosTDeviceCreateInfo中移除
        • 移除TDeviceQueueCreateInfo::count默认为 1
  • 2022/3/22 设计架构

    • TResult增加RESOURCE_STARVATION,当发生可用资源匮乏,资源分配失败时会返回该结果
    • TPhysicalDevice中增加uint32_t Turbo::Core::TPhysicalDevice::GetAvailableQueueCount(uint32_t queueFamilyIndex)函数,用于快速获取特定队列族的可用队列数
    • TPhysicalDevice中增加void Turbo::Core::TPhysicalDevice::AvailableQueueCountMinusOneByQueueFamily(uint32_t queueFamilyIndex)私有函数,TDeviceQueue构造函数中使用,用于将对应可用队列族数量减一
    • TPhysicalDevice中增加void Turbo::Core::TPhysicalDevice::ResetQueueCountMap()私有函数,TDevice析构构函数中使用,用于将之前可用的队列数量还原。
    • TDeviceQueue基本完成,还要接下来的测试。
  • 2022/3/29 设计架构

    • 增加 TPool
    • 增加 TCommandBufferPool 继承自 TPool
    • 未增加需增加 TCommandBuffer 继承自 TObject
  • 2022/3/30 设计架构

    • TDeviceQueue增加 VkQueue GetVkQueue()函数
    • TDeviceQueue增加 TDevice *device成员变量
    • TDeviceQueue增加 TDevice *GetDevice()函数
    • 修改TPool实现至头文件 TCommandBufferPool编译通过
  • 2022/3/31 设计架构

    • TDevice增加 void Create() InternalCreate()函数(参考2022/4/1), 未完待续
    • TDevice增加 void Destroy() InternalDestroy()函数(参考2022/4/1), 未完待续
    • TDevice增加 std::vector<TQueueFamilyInfo> GetDeviceQueueFamilyInfos()函数
    • 增加TCommandBuffer类, 基本完完成
    • 修改TPool::Allocate()函数到template <typename... Args> T *Allocate(Args &&...args)
  • 2022/4/1 设计架构

    • TCommandBufferPool增加 VkCommandPool GetVkCommandPool()函数
    • TCommandBuffer构造函数实现完成
    • 增加TVulkanHandle类开始重构Vulkan句柄封装类,首先是TInstance
    • TVulkanHandle增加virtual void InternalDestroy() = 0函数
    • TVulkanHandle增加virtual void InternalCreate() = 0函数
    • TVulkanHandle增加virtual void InternalRebuild()函数 > * TVulkanHandle::InternalRebuild()内部会依次调用TVulkanHandle::InternalDestroy()TVulkanHandle::InternalCreate()
  • 2022/4/2 设计架构

    • TPhysicalDevice设计不合理,将值存储TPhysicalDevice改成指针存储。继承自TVulkanHandle。修改TInstanceTPhysicalDeviceTPhysicalDeviceProxy之间的关系,遗弃TPhysicalDeviceProxy 未完待续
    • 初步完成TInstance创建TPhysicalDevice,使用TPhysicalDevice::InternalRebuild()很方便的创建,遗弃TPhysicalDeviceProxy
    • TPhysicalDeviceProxy的功能转移到了TPhysicalDevice
  • 2022/4/3 设计架构

    • TInstanceTPhysicalDevice基于数据驱动,基本重构完成,遗弃TInstanceCreateInfoVkAllocationCallbacks,Turbo现在完全使用内置内存分配器TVulkanAllcator
  • 2022/4/4 设计架构

    • 优化了TInstanceTPhysicalDevice的重构
    • TDevice基本重构完成,遗弃了TDeviceCreateInfoVkAllocationCallbacks,Turbo现在完全使用内置内存分配器TVulkanAllcator
    • TDeviceQueue重构进行中
  • 2022/4/5 设计架构

    • TPhysicalDevice中增加void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)函数
    • TDeviceQueue基于数据驱动,基本重构完成,遗弃了TDeviceQueueCreateInfoVkAllocationCallbacks,Turbo现在完全使用内置内存分配器TVulkanAllcator
    • TCommandBufferPool基于数据驱动,基本重构完成
    • TCommandBuffer基于数据驱动,基本重构完成
    • TurboTVulkanHandle派生类,现在拥有了内存自动回收能力,在delete掉某些TVulkanHandle派生类对现时,会自动回收与其有关的子对象(前提是所有对象均分布在堆上)。 也许Turbo不应该回收与其有关的对象内存,对于这部分内存回收应该由用户承担(除非是Turbo对象内部new出的内存,需要Turbo自己管理,Turboo只会负责回收Vulkan相关对象内存)。
  • 2022/4/6 设计架构

    • TVulkanHandle中增加(不允许拷贝或赋值)
      TVulkanHandle(TVulkanHandle const &) = delete;
      TVulkanHandle(TVulkanHandle &&) = delete;
      TVulkanHandle &operator=(TVulkanHandle const &) = delete;
      TVulkanHandle &operator=(TVulkanHandle &&) = delete;
    • 增加TVmaAllocator类,用于VulkanMemoryAllocator(VMA)内存分配 未完待续
    • TDevice中增加对TVmaAllocator对象的创建和销毁
  • 2022/4/7 设计架构

    • TVmaAllocator类,初步完成
    • TBuffer类,初步完成
    • 遗弃TDeviceMemory
    • 遗弃TBufferCreateInfo
    • 遗弃TImageCreateInfo
    • 遗弃TDeviceMemoryAllocateInfo
    • TImage类,初步完成
    • 遗弃TImageViewCreateInfo
    • TImageView类,初步完成
  • 2022/4/8 设计架构

    • 遗弃原先自定义创建TDeviceQueue类对象,现在该类对象由TDevice统一管理,用户只需要调用如下函数即可获得
    TDeviceQueue* GetBestGraphicsQueue();
    TDeviceQueue* GetBestComputeQueue();
    TDeviceQueue* GetBestTransferQueue();
    TDeviceQueue* GetBestSparseBindingQueue();
    TDeviceQueue* GetBestProtectedQueue();
    • 部分重构TDevice用于管理TDeviceQueue
  • 2022/4/9 设计架构

    • 创建TShader
    • 原本想在TShader类中使用glslang来动态编译字符串shaderspirv的,但是llvm-mingw32编译完的库,无论如何都找不到glslang的库函数,有可能是CMakeLists.txt库配置有问题,暂时先去除该动态编译功能~~(也许该功能不应位于Core层面,或许应该有个Shader编译器之类的)~~
    • TShader.h中提供std::vector<char> ReadSpirVFile(const std::string &file)函数用于读取spirv文件
  • 2022/4/10 设计架构

    • 解决glslang库找不到的问题,在Turbo根目录下创建thirdpart文件夹,用于存放第三方库文件项目
  • 2022/4/11 设计架构

    • 添加SPIRV-Cross库用于实现反射Shader描述符信息
    • 添加TDescriptor类,于TDescriptor.h中,用于描述VkDescriptorSetLayoutBinding
    • 添加TOutputTInput类,于TShader.h中,用于描述Shaderlayout (location=n) in/out [type](vec3...) name;
    • 未完待续
  • 2022/4/12 设计架构

    • TOutputTInput类,没有必要定义两份,修改成TInterface

    • TShader增加virtual void InternalParseSpirV()成员变量,用于内部构造解析SpirV用于Vulkan相应创建数据使用 未完待续

    • TShader增加std::vector<TInterface> outputs成员变量,表示layout (location=n) in [type](vec3...) name;

    • TShader增加std::vector<TInterface> inputs成员变量,表示layout (location=n) out [type](vec3...) name;

    • TDescriptor.h中增加TShaderDataType枚举,用于标明Shader中的数据类型

    • TInterface中增加如下:

      uint32_t location;//(location=n)
      TShaderDataType dataType;
      uint32_t size;//vec2 vec3 vec4
    • TShadervirtual void InternalParseSpirV()完成spirv_cross::SPIRTypeVkDescriptorType的映射

    • 未完待续

  • 2022/4/13 设计架构

    • 解决了TShader中使用spirv-cross运行时的崩溃
    • TShader 未完待续
  • 2022/4/14 设计架构

    • 继续TShader中使用spirv-cross对于Shader的解析,在TShader中应提供类似如下成员变量:
    //根据TDescriptorType中的定义声明不同类型的描述符成员变量
    std::vector<TUniformBufferDescriptor> uniforBuffers;
    std::vector<TSamplerDescriptor> samplers;
    std::vector<TImageSamplerDescriptor> imageSamplers;
    ...//等等描述符类型

    这需要Turbo中声明TUniformBufferDescriptor等类。

  • 2022/4/15 设计架构

    • 解决了TDescriptor.h中增加了TUniformBufferDescriptorTStructMember

      • TUniformBufferDescriptor中包含TStructMember
      • TUniformBufferDescriptor用于表示UniformBuffer描述符,
      • TStructMember用于表示TUniformBufferDescriptor中的数据结构
  • 2022/4/16 设计架构

    • 继续TUniformBufferDescriptor
  • 2022/4/17 设计架构

    • TShader.cpp中增加Turbo::Core::TShaderDataType SpirvCrossSPIRTypeBaseTypeToTShaderDataType(spirv_cross::SPIRType::BaseType baseType)函数,将spirv_cross::SPIRType::BaseType类型转换成Turbo::Core::TShaderDataType类型
    • TShader.cpp中对UniformBuffer的解析基本完成
    • TShader.cpp中对TInterface将改成继承自Turbo::Core::TStructMember
  • 2022/4/18 设计架构

    • TShader.cpp中对TInterfaceinputoutput的解析基本完成
    • Turbo::Core::TDescriptor代表VulkanVkDescriptorSetLayoutBinding
    • Turbo::Core::TUniformBufferDescriptor代表VulkanVkDescriptorSetLayoutBinding::descriptorType = VkDescriptorType::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
    • 需要创建TDescriptorSet类继承自Turbo::Core::TVulkanHandle用于涵盖多个Turbo::Core::TDescriptor并创建VkDescriptorSetLayout(考虑是否创建VkDescriptorSet
  • 2022/4/19 设计架构

    • 创建TDescriptorSet类,构造函数为Turbo::Core::TDescriptorSet::TDescriptorSet(TShader *shader, std::vector<TDescriptor *> &descriptors),其中的std::vector<TDescriptor *> &descriptors需要在外部new完传进来,该任务属于Turbo范畴(处理好TDescriptorSetTDescriptor之间的联系)

    • 对于throw Turbo::Core::TException(TResult,std::string);对于std::string变量,Turbo没有使用上,需补上

  • 2022/4/20 设计架构

    • 开始将std::vector<T[XXX]Descriptor *>std::vector<TDescriptorSet *> descriptorSets中写入,TShader维护std::vector<T[XXX]Descriptor *>中的内存,当TShader销毁时std::vector<T[XXX]Descriptor *>数组中T[XXX]Descriptor *所指向的指针也会销毁。 未完待续
    • TShader中增加void AddDescriptorToDescriptorSets(TDescriptor *descriptor)内部函数,当每次new一个TDescriptor之后,会将刚newTDescriptor通过AddDescriptorToDescriptorSets函数加入std::vector<TDescriptorSet *> descriptorSets中 未完待续 遗弃(不符合Turbo统一设计**)
  • 2022/4/21 设计架构

    *目前TShader中只实现了TUniformBufferDescriptor,将来待实现如下:

    TSamplerDescriptor;
    TCombinedImageSamplerDescriptor;
    TSampledImageDescriptor;
    TStorageBufferDescriptor;
    TInputAttachmentDescriptor;
    ...
    • 创建TPipeline类,内部完成了VkPipelineLayout的创建。 未完待续
    • Turbo中应该提供如下类 未完待续
    TGraphicsPipeline
    TComputePipeline
  • 2022/4/22 设计架构

    • 新增TViewport
    • 新增TScissor
    • 新增TAttachment
    • 新增TSubpass
    • 新增TRenderPass
    • 修改了TPipeline类,新增成员变量,内部的TScissorTViewport目前是按值存的,将来改成按照指针存,节省内存。
    • 以上只是初步完成,还有Bug需要修缮。 未完待续
  • 2022/4/23 设计架构

    • 修缮了TRenderPass中的Bug
    • TCommandBuffer中添加对于Vulkan中的VkCmd[...]的相关指令声明,未实现,待实现。
    • TCommandBuffer中已实现完成如下:
    bool Turbo::Core::TCommandBuffer::Begin()
    bool Turbo::Core::TCommandBuffer::End()
    bool Turbo::Core::TCommandBuffer::Reset()
    • TCommandBuffer中正在实现如下:
    void Turbo::Core::TCommandBuffer::BeginRenderPass(TRenderPass *renderPass)
    void Turbo::Core::TCommandBuffer::EndRenderPass()
    • 创建TFrameBuffer
    • TCommandBuffer中添加TFrameBuffer成员变量,当用户调用Turbo::Core::TCommandBuffer::BeginRenderPass()时会new出一个TFrameBuffer对象,当用户调用Turbo::Core::TCommandBuffer::EndRenderPass()时会delete销毁该对象。所以BeginRenderPass()EndRenderPass()两个函数必须配合使用
  • 2022/4/24 设计架构

    • TFrameBuffer修改成TFramebuffer
    • TShader,TDescriptor,TDescriptorSet,TPipeline,TSubpass,TAttachemt,TRenderPassTFramebuffer之间设计不合理,需要重构。尝试是否能够按照Vulkan标准规范设计
  • 2022/4/25 设计架构

    • 将原先TShader中的TDescriptorSet改成了TDescriptorSetLayout
    • 创建TDescriptorSet用于表示VkDescriptorSet,现在就不会出现TDescriptorSetLayoutTDescriptorSet命名歧义了
    • 遗弃老的TPipelineTSubpassTAttachemtTRenderPassTFramebuffer相关设计,回归到Vulkan标准规范设计思路
    • TPipeline,TSubpass,TAttachemt,TRenderPassTFramebuffer重构中
    • TAttachemtTSubpass重构完成
    • TSubpass新增TAttachmentReference
    • 创建TDescriptorPoolTDescriptorSize
  • 2022/4/26 设计架构

    • TSubpass移除TAttachmentReference类,用起来不方便
    • TPipeline,TSubpass,TAttachemt,TRenderPassTFramebuffer基本重构完成,但还不完善。需进一步完善
    • TCommandBuffer实现基础命令,还不完善。需进一步完善
    • TDescriptorSet::BindData(...)仅用于测试,须修改完善。
    • TBuffer新增void *Map()void Unmap();函数,用于映射内存
    • 新增TFence
    • TFence中新增TResult Wait()如果超时将返回TResult::TIMEOUT否则返回TResult::SUCCESS
    • TFence中新增void WaitUntil()将会一直等待,直到指令运行结束
    • 新增TSemaphore
    • TDeviceQueue中新增bool Submit(std::vector<TSemaphore *> &waitSemaphores, std::vector<TSemaphore *> &signalSemaphores, TCommandBuffer *commandBuffer, TFence *fence)函数,用于提交指令。
  • 2022/4/27 设计架构

    • 发布至GitHubGitee
    • 提炼issue
  • 2022/4/28 设计架构

    • TBuffer中增加typedef enum TBufferUsageBits枚举,与Vulkan标准一致
    • TBuffer中增加typedef VkFlags TBufferUsages声明,用于声明TBufferuage,与Vulkan标准一致
    • Turbo.h中增加typedef VkDeviceSize TDeviceSize用于TBuffer的构造函数中,与Vulkan标准一致
    • TImage中增加typedef enum TImageType枚举,用于声明TImagetype,与Vulkan标准一致
    • TImage中增加typedef enum TSampleCountBits枚举,与Vulkan标准一致
    • TImage中增加typedef VkFlags TSampleCounts声明,用于TImage的构造函数中,与Vulkan标准一致
    • TImage中增加typedef enum TImageTiling枚举,用于TImage的构造函数中,与Vulkan标准一致
    • TImage中增加typedef enum TImageUsageBits枚举,与Vulkan标准一致
    • TImage中增加typedef VkFlags TImageUsages声明,用于TImage的构造函数中,与Vulkan标准一致
    • TImage中增加typedef enum TImageLayout枚举,用于TImage的构造函数中,与Vulkan标准一致
    • TImageView中增加typedef enum TImageViewType枚举,用于TImageView的构造函数中,与Vulkan标准一致
    • TImageView中增加typedef enum TImageAspectBits枚举,与Vulkan标准一致
    • TImageView中增加typedef VkFlags TImageAspects声明,用于TImageView的构造函数中,与Vulkan标准一致
    • TAttachment中增加typedef enum TLoadOp声明,用于TAttachment的构造函数中,与Vulkan标准一致
    • TAttachment中增加typedef enum TStoreOp声明,用于TAttachment的构造函数中,与Vulkan标准一致
  • 2022/4/29 设计架构

    • TAttachment中重命名typedef enum TStoreOp声明,成typedef enum class TStoreOp,优化枚举内命名
    • TAttachment中重命名typedef enum TLoadOp声明,成typedef enum class TLoadOp,优化枚举内命名
    • TImageLayout中重命名typedef enum TImageLayout声明,成typedef enum class TImageLayout,优化枚举内命名
    • TFormatInfo进一步设计优化,完善了如下:
      • typedef enum TFormatContentType
      • typedef enum class TFormatDataType
      • typedef enum class TFormatCompression
      • typedef enum class TFormatReduceFactor
    • TFormatInfo实现了uint32_t GetTexelBlockSize()函数,用于返回该格式下数据占用的字节数
    • TAttachment构造函数中VKFormat替换成了TFormatInfo
    • TImage增加TSampleCountBits GetSampleCountBits()函数,用于获取采样数
    • VkVertexInputBindingDescriptionVkVertexInputAttributeDescription基本描述框图TurboDesign.drawwio整理完成
  • 2022/4/30 设计架构

    • TPipeline.h中增加TVertexAttributeTVertexBinding类,分别用于表示VkVertexInputAttributeDescriptionVkVertexInputBindingDescription
    • TPipeline.h中增加typedef enum class TVertexRate类,用于表示VkVertexInputRate
    • TPipeline.h中剔除VkVertexInputBindingDescriptionVkVertexInputAttributeDescription的使用,改为使用TVertexAttributeTVertexBinding
  • 2022/5/1 设计架构

    • TFormatInfo.h中,构造函数声明去掉explicit,使得可直接使用TFormatType进行隐示类型转换到TFormatInfo
    • TPipeline.h中增加typedef enum class TTopologyType用于对应VkPrimitiveTopology
    • TPipeline.h中对于VkPrimitiveTopology替换成使用TTopologyType
    • TPipeline.h中增加typedef enum class TPolygonMode用于对应VkPolygonMode
    • TPipeline.h中对于VkPolygonMode替换成使用TPolygonMode
    • TPipeline.h中增加typedef enum TCullModeBits用于对应VkCullModeFlagBits
    • TPipeline.h中增加typedef VkFlags TCullModes用于对应VkCullModeFlags
    • TPipeline.h中对于VkCullModeFlags替换成使用TCullModes
    • TPipeline.h中增加typedef enum class TFrontFace用于对应VkFrontFace
    • TPipeline.h中对于VkFrontFace替换成使用TFrontFace
    • 创建TGraphicsPipeline继承自TPipeline,将原先TPipeline中有关图形管线的内容搬到了TGraphicsPipeline
  • 2022/5/2 设计架构

    • TGraphicsPipeline中增加bool multisampleEnableTSampleCountBits sample的成员变量,提供对Multisample特性的支持
    • TCommandBuffer中增加TRenderPass *currentRenderPassTPipeline *currentPipeline的成员变量,提供对当前使用的RenderPassPipeline的引用
  • 2022/5/3 设计架构

    • TCommandBuffer中实现了void Turbo::Core::TCommandBuffer::NextSubpass()的成员函数,提供对vkCmdNextSubpass(...)特性的支持
    • Turbo核心现已支持多Subpass渲染
    • TRenderPassTPipelineType转移到了TSubpass中,符合Vulkan标准
    • TPipeline.h中新增typedef enum TPipelineStageBitstypedef VkFlags TPipelineStages,对应VulkanVkPipelineStageFlagBitsVkPipelineStageFlags
    • Turbo.h中新增typedef enum TAccessBitstypedef VkFlags TAccess,对应VulkanVkAccessFlagBitsVkAccessFlags
    • 新增TBarrier.hTBarrier.cpp,用于实现VkMemoryBarrierVkBufferMemoryBarrierVkImageMemoryBarrier 未完待续
  • 2022/5/4 设计架构

    • TBarrier.h中增加了TBarrierTMemoryBarrierTBufferMemoryBarrierTImageMemoryBarrier的成员函数,提供对VkMemoryBarrierVkBufferMemoryBarrierVkImageMemoryBarrier特性的支持
    • TImageView中增加了获取成员变量的方法
    • TCommandBuffer中增加并实现如下函数
    void PipelineBarrier(TPipelineStages srcStages, TPipelineStages dstStages, std::vector<TMemoryBarrier> &memoryBarriers, std::vector<TBufferMemoryBarrier> &bufferBarriers, std::vector<TImageMemoryBarrier> &imageBarriers);
    void PipelineMemoryBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TMemoryBarrier &memoryBarrier);
    void PipelineBufferBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TBufferMemoryBarrier &bufferBarrier);
    void PipelineImageBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TImageMemoryBarrier &imageBarrier);
    void TransformImageLayout(TPipelineStages srcStages, TPipelineStages dstStages, TAccess srcAccess, TAccess dstAccess, TImageLayout oldLayout, TImageLayout newLayout, TImage *image, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount);
    void TransformImageLayout(TPipelineStages srcStages, TPipelineStages dstStages, TAccess srcAccess, TAccess dstAccess,TImageLayout oldLayout, TImageLayout newLayout, TImageView *imageView);
  • 2022/5/5 设计架构

    • TCommandBuffer中增加并实现如下
    void FillBuffer(TBuffer *buffer, TDeviceSize offset = 0, TDeviceSize size = VK_WHOLE_SIZE, uint32_t data = 0);
    void FillBuffer(TBuffer *buffer, TDeviceSize offset = 0, TDeviceSize size = VK_WHOLE_SIZE, float data = 0.0f);
    void UpdateBuffer(TBuffer *buffer, TDeviceSize offset, TDeviceSize size, const void *data);
    void CopyBuffer(TBuffer *srcBuffer, TBuffer *dstBuffer, TDeviceSize srcOffset, TDeviceSize dstOffset, TDeviceSize size);
    void ClearColorImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount);
    void ClearColorImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, TImageAspects aspects);
    void ClearColorImage(TImageView *imageView, TImageLayout layout, float r = 0, float g = 0, float b = 0, float a = 0);
    void ClearDepthStencilImage(TImage *image, TImageLayout layout, float depth, uint32_t stencil, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount);
    void ClearDepthStencilImage(TImage *image, TImageLayout layout, float depth, uint32_t stencil, TImageAspects aspects);
    void ClearDepthStencilImage(TImageView *imageView, TImageLayout layout, float depth = 0, uint32_t stencil = 0);
    void ClearImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, float depth, uint32_t stencil, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount);
    void ClearImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, float depth, uint32_t stencil, TImageAspects aspects);
    void ClearImage(TImageView *imageView, TImageLayout layout, float r = 0, float g = 0, float b = 0, float a = 0, float depth = 0, uint32_t stencil = 0);
    • TDeviceQueue增加void WaitIdle()成员函数
    • TDevice增加void WaitIdle()成员函数
    • TImage增加TImageUsages GetUsages()uint32_t GetMipLevels()uint32_t GetArrayLayers(); 成员函数
    • TFormatInfo.h中将typedef enum TFormatDataType修改成typedef enum TFormatDataTypeBits、增加typedef VkFlags TFormatDataTypes声明
    • TFormatInfo中增加TFormatDataTypes GetFormatDataType()成员函数,用于获取格式所对应的的数据类型(主要用于ClearColor中)
  • 2022/5/6 设计架构

    • TFormatInfo增加typedef enum TFormatFeatureBitstypedef VkFlags TFormatFeatures用于对应VkFormatFeatureFlagBitsVkFormatFeatureFlags
    • TFormatInfo增加如下函数:
    TFormatFeatures GetlLinearFeatures(TPhysicalDevice *physicalDevice);
    TFormatFeatures GetOptimalFeatures(TPhysicalDevice *physicalDevice);
    TFormatFeatures GetlBufferFeatures(TPhysicalDevice *physicalDevice);

    用于获取VkFormatProperties对应的数据

    • 解决了TCommandBuffer::BeginRenderPass(...)ClearColor不生效的问题(考虑ClearColor的颜色声明放到TAttachment中,或者BeginRenderPass(...)提供颜色设置接口)
    • TCommandBuffer中实现了如下指令函数:
    void CopyBufferToImage(TBuffer *srcBuffer, TImage *dstImage, TImageLayout layout, TDeviceSize bufferOffset, uint32_t bufferRowLength, uint32_t bufferImageHeight, TImageAspects aspects, uint32_t mipLevel, uint32_t baseArrayLayer, uint32_t layerCount, int32_t imageOffsetX, int32_t imageOffsetY, int32_t imageOffsetZ, uint32_t imageWidth, uint32_t imageHeight, uint32_t imageDepth);
    void CopyImageToBuffer(TImage *srcImage, TImageLayout layout, TBuffer *dstBuffer, TDeviceSize bufferOffset, uint32_t bufferRowLength, uint32_t bufferImageHeight, TImageAspects aspects, uint32_t mipLevel, uint32_t baseArrayLayer, uint32_t layerCount, int32_t imageOffsetX, int32_t imageOffsetY, int32_t imageOffsetZ, uint32_t imageWidth, uint32_t imageHeight, uint32_t imageDepth);
    void CopyImage(TImage *srcImage, TImageLayout srcLayout, TImage *dstImage, TImageLayout dstLayout, TImageAspects srcAspects, uint32_t srcMipLevel, uint32_t srcBaseArrayLayer, uint32_t srcLayerCount, int32_t srcImageOffsetX, int32_t srcImageOffsetY, int32_t srcImageOffsetZ, TImageAspects dstAspects, uint32_t dstMipLevel, uint32_t dstBaseArrayLayer, uint32_t dstLayerCount, int32_t dstImageOffsetX, int32_t dstImageOffsetY, int32_t dstImageOffsetZ, uint32_t width, uint32_t height, uint32_t depth);
    • Turbo.h中增加如下声明:
    #if defined(_WIN16) || defined(_WIN32) || defined(_WIN64)
    #define TURBO_PLATFORM_WINDOWS
    #elif defined(__APPLE__)
    #define TURBO_PLATFORM_APPLE
    #elif defined(ANDROID) || defined(__ANDROID__)
    #define TURBO_PLATFORM_ANDROID
    #elif defined(__linux) || defined(__linux__)
    #define TURBO_PLATFORM_LINUX
    #elif defined(__unix) || defined(__unix__)
    #define TURBO_PLATFORM_UNIX
    #else
    #define TURBO_PLATFORM_UNDEFINED
    #endif
    • TDescriptor.h中的typedef enum class TShaderDataType内容重命名。声明有冲突
    • Turbo中新增Turbo::Extension命名空间
    • 开始修缮TSurface.h将其加入Turbo::Extension命名空间中 未完待续
  • 2022/5/7 设计架构

    • TSurface.hTurbo::Core::TImageUsageFlags TSurface::GetSupportedUsageFlags()修改成Turbo::Core::TImageUsages GetSupportedUsages()
    • TSurface.h中增加如下:
    typedef enum TSurfaceTransformBits;
    typedef VkFlags TSurfaceTransforms;
    typedef enum TCompositeAlphaBits;
    typedef VkFlags TCompositeAlphas;
    typedef enum class TPresentMode;
    uint32_t GetCurrentWidth();
    uint32_t GetCurrentHeight();
    uint32_t GetMinWidth();
    uint32_t GetMinHeight();
    uint32_t GetMaxWidth();
    uint32_t GetMaxHeight();
    • TColorSpace类和TSurfaceFormat转移到TSurface.h中,并将TColorSpace.h/.cppTSurfaceFormat.h/.cpp移除

    • TSurface.h修缮完成

    • 开始修缮TSwapchain.h将其加入Turbo::Extension命名空间中 未完待续

    • TImage.h中加入void *Map()void Unmap()成员函数,用于映射host可访问内存

    • TImage.h中加入Turbo::Extension::TSwapchain的声明和TImage()默认无参构造函数,用于Turbo::Extension::TSwapchain构建TSwaphainImage,其为TImage的友元类

    • main.cpp中将GPU图片拷贝到CPU的纯Vulkan代码改成Turbo规范

    • 有些窗口库创建完窗口直接返回VkSurfaceKHR,所以TSwapchain需要对外提供一个接口构造函数TSwapchain(TDevice* device, VkSurfaceKHR)用于接收外部创建好的VkSurfaceKHR 未完待续

  • 2022/5/8 设计架构

    • 之前 TSwapchain对外部提供的VkSurfaceKHR的接口改成由TSurface提供,TSwapchain统一使用TSurface
    • TSwapchain修缮完毕
    • TSwapchain中增加VkSwapchainKHR GetVkSwapchainKHR()成员函数
    • TResult新增TResult::NOT_READYTResult::SUBOPTIMAL用于Turbo::Extension::TSwapchain::AcquireNextImage(...)的返回结果
    • ./thirdparty新增SDL2库用于创建窗口
    • TDeviceInternalCreate()中有Bug,已修复
    • TCommandBufferBeginRenderPass()中有Bug,已修复
    • TSemaphore中的VkPipelineStageFlags改成TPipelineStages,统一Turbo标准
    • TDeviceQueue中增加TResult Present(Turbo::Extension::TSwapchain *swapchain, uint32_t imageIndex)函数用于调用vkQueuePresentKHR
    • TDeviceQueue中增加bool IsSupportSurface(Turbo::Extension::TSurface *surface)判断该队列是否支持该TSurface
  • 2022/5/9 设计架构

    • 进入调整阶段
    • TCommandBuffer中有关VkCmd...的成员函数前面加上Cmd...的前缀,与CommandBuffer::Begin()CommandBuffer::End()等非命令成员函数分开,直接告诉用户哪些会是VkCmd...哪些不是
    • TFormatInfo中删除有关TFormatFeatureFlags的成员变量,没用
  • 2022/5/10 设计架构

    • TBuffer中增加typedef enum class TIndexType表明索引缓存的数据类型
    • TCommandBuffer中增加如下函数:
    void CmdBindIndexBuffer(TBuffer *buffer, TDeviceSize offset = 0, TIndexType indexType = TIndexType::UINT32);
    void CmdDrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);

    用于索引渲染

    • TAllocator平台相关使用Turbo.h中定义的宏
    • 开始整理TException的输出信息,和优化TException
    • TFormatInfo增加Get...Features(TDevice* device)版本成员函数
  • 2022/5/11 设计架构

    • 开始实现纹理特性
    • TDescriptor.h中增加TCombinedImageSamplerDescriptor类,用于表示VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
    • TShader.h中增加std::vector<TCombinedImageSamplerDescriptor *> combinedImageSamplerDescriptors成员变量
    • 新增TSampler.h中增加TSampler类并增加如下枚举定义:
    typedef enum class TFilter;//对应VkFilter
    typedef enum class TMipmapMode;//对应VkSamplerMipmapMode
    typedef enum class TAddressMode;//对应VkSamplerAddressMode
    typedef enum class TBorderColor;//对应VkBorderColor
    • 新增TDescriptorSet中增加void BindData(uint32_t binding, uint32_t arrayElement, TImageView *imageView, TSampler *sampler),仅用于测试
    • 将原先的SDL2窗口库换成GLFW窗口库,使用SDL2会有main入口函数重定向,并且终端的输出信息不显示等很奇怪的问题。
    • 纹理特性初步完成
    • Descriptor设计有重大逻辑漏洞,需要重构
  • 2022/5/12 设计架构

    • 开始重构Descriptor
    • TShader中移除有关TDescriptorSetLayout创建相关,相关任务转移到TPipeline中进行,TShader仅用于创建VkShaderModule和收集Descriptor数据
    • TDescriptorSetLayout中移除有关TShader成员
    • TDescriptorSetLayout中增加uint32_t GetSet()成员函数
    • TDescriptor中增加TShader*成员变量,用于指代该描述符所属哪个TShader
    • TShader中增加如下函数:
    const std::vector<TUniformBufferDescriptor *> &GetUniformBufferDescriptors;
    const std::vector<TCombinedImageSamplerDescriptor *> &GetCombinedImageSamplerDescriptors;

    目前Turbo只实现了这两个,更多待以后实现

    • (转移到TPipelineLayout中) 目前TPipeline中增加了std::vector<TDescriptorSetLayout *> descriptorSetLayouts成员变量,用于存储当前管线的描述符集合布局
    • 新增TPipelineLayout
    • 新增TPipeline中开始使用TPipelineLayout
    • 新增TPipelineDescriptorSet
    • TDescriptorPool适配TPipelineDescriptorSet
    • TDescriptorSet中增加uint32_t GetSet()成员函数
    • TCommandBuffer中增加void CmdBindPipelineDescriptorSet(TPipelineDescriptorSet* pipelineDescriptorSet)成员函数,用于适配TPipelineDescriptorSet
    • Descriptor目前初步重构完成
  • 2022/5/13 设计架构

    • TResult::SUBOPTIMAL更改成TResult::MISMATCH
    • TSurface中有关获取当前大小的函数可以动态获取当前大小了,不需要delete之后重新new
    • TSwapchain中增加TSwapchain(TSwapchain *oldSwapchain)构造函数,用于重新创建TSwapchain
  • 2022/5/14 设计架构

    • TDescriptor.h中的typedef enum class TShaderDataType更改成typedef enum class TDescriptorDataType
    • TDescriptor.h中增加class TSampledImageDescriptorTSamplerDescriptor,用于对应VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGEVkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLER
    • TShader中增加std::vector<TSampledImageDescriptor *> sampledImageDescriptorsstd::vector<TSamplerDescriptor *> samplerDescriptors
    • 开始修缮TDescriptorSet中的void BindData(...);使其规范化,TPipelineDescriptorSet同理:
    void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TBuffer *> buffers);//for uniform buffer
    void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<std::pair<TImageView *, TSampler *>> &combinedImageSamplers);//combined image sampler
    void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TImageView *> &imageViews);//sampled image
    void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TSampler *> &sampler);//sampler
  • 2022/5/16 设计架构

    • TCommandBuffer实现CmdBlitImage等价于vkCmdBlitImage
    • engine/下新建core文件夹用于存放Turbo核心
    • engine/core/include/Turbo.h更改成TCore.h
    • engine/core/include/Turbo.cpp更改成TCore.cpp
    • 现在engine/core将会输出单独的库文件作为Turbo的核心
    • TFormatInfo中的TFormatFeatures Get...Features(TPhysicalDevice *physicalDevice)转移到了TPhysicalDevice
  • 2022/5/17 设计架构

    • TPhysicalDevice中增加如下函数(用于获取某一特定纹理格式的图片的限制属性):
    TExtent3D GetMaxImageExtent(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    TExtent3D GetMaxImageExtent(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    uint32_t GetMaxImageMipLevels(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    uint32_t GetMaxImageMipLevels(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    uint32_t GetMaxImageArrayLayers(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    uint32_t GetMaxImageArrayLayers(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    TSampleCounts GetSupportImageSampleCounts(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); 
    TSampleCounts GetSupportImageSampleCounts(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    TDeviceSize GetMaxImageResourceSize(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    TDeviceSize GetMaxImageResourceSize(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
    • TCommandBuffer实现如下函数
    void CmdResolveImage(TImage *srcImage, TImageLayout srcLayout, TImage*dstImage, TImageLayout dstLayout, TImageAspects srcAspects, uint32_t srcMipLevel, uint32_t srcBaseArrayLayer, uint32_t srcLayerCount, int32_t srcOffsetX, int32_t srcOffsety, int32_t srcOffsetZ, TImageAspects dstAspects, uint32_t dstMipLevel, uint32_t dstBaseArrayLayer, uint32_t dstLayerCount, int32_t dstOffsetX, int32_t dstOffsety, int32_t dstOffsetZ, uint32_t width, uint32_t height, uint32_t depth);
    void CmdSetLineWidth(float lineWidth);
    • TCommandBuffer中的void CmdBindPipelineDescriptorSet(uint32_t firstSet, TPipelineDescriptorSet *pipelineDescriptorSet);修改成void CmdBindPipelineDescriptorSet(TPipelineDescriptorSet *pipelineDescriptorSet);
  • 2022/5/18 设计架构

    • TDescriptor.h中增加class TNaNDescriptor,用于表示无效占位描述符。
    • TDeviceQueue.h:TDeviceQueue::Submit(...)函数中有关TSemaphore数组引用改成数组指针
    • tinygltf库中拷贝stb_image.h, stb_image_write.h, json.hpptiny_gltf.h./engine/include
  • 2022/5/19 设计架构

    • TGraphicsPipeline::InternalCreate()中增加对于多个fragment output interface state(片元着色器的输出)应该对应相同个数的VkPipelineColorBlendStateCreateInfo::attachmentCount的适配。(也许这不是最优解,blend目前未想好如何设计)
    • TShader中增加如下函数:
    std::vector<TInterface> GetInputs();
    std::vector<TInterface> GetOutputs();
    TShaderType GetType();
  • 2022/5/20 设计架构

    • TRenderPass中增加TSubpass GetSubpass(uint32_t subpass)成员函数
    • 增加glm第三方库
  • 2022/5/21 设计架构

    • 移除原先拷贝的tinygltf头文件,将tinygltf库加到./thirdparty文件夹下
    • 成功渲染Suzanne
  • 2022/5/22 设计架构

    • imgui库加到./thirdparty文件夹下
    • KTX-Software库加到./thirdparty文件夹下
    • TDescriptor增加TPushConstantDescriptor用于描述VulkanPush Constant
    • TShader增加std::vector<TPushConstantDescriptor *> pushConstantDescriptors和相应的获取函数。
    • TPipelineLayoutTPipeline中适配TPushConstantDescriptors
    • TUniformBufferDescriptorTPipeline中增加uint32_t size成员属性和相应的获取函数,用于表示数据块大小
    • TCommandBuffer中增加void CmdPushConstants(...)成员函数,对应vkCmdPushConstants(...)
  • 2022/5/23 设计架构

    • TBuffer中增加void Flush(...)成员函数,用于刷新数据到GPU domain
    • TSubpassGetDepthStencilAttachmentReference()Bug,现已修改完毕
  • 2022/5/24 设计架构

    • TGraphicsPipeline中移除std::vector<TViewport> &viewportsstd::vector<TScissor> &scissors成员,由于核心创建的PipelineViewportScissor都是动态状态,Vulkan会忽略VkPipelineViewportStateCreateInfo::pViewportsVkPipelineViewportStateCreateInfo::pScissors
    • TGraphicsPipeline中增加typedef enum class TCompareOp声明,对应VkCompareOp
    • TGraphicsPipeline中增加typedef enum class TStencilOp声明,对应VkStencilOp
    • TGraphicsPipeline中增加对深度测试和模板测试支持
    • 调整TGraphicsPipeline构造函数的参数顺序,填入默认值
  • 2022/5/25 设计架构

    • 成功渲染KTX纹理
  • 2022/5/27 设计架构

    • 成功渲染KTXCubemap纹理
    • 开始适配几何管线的Blend
    • TGraphicsPipeline中增加typedef enum class TLogicOp 声明,对应VkLogicOp
    • TGraphicsPipeline中增加typedef enum class TBlendFactor 声明,对应VkBlendFactor
    • TGraphicsPipeline中增加typedef enum class TBlendOp 声明,对应VkBlendOp
    • TGraphicsPipeline构造函数中增加混合相关参数
  • 2022/5/28 设计架构

    • 使用Turbo核心成功渲染IMGUI
  • 2022/5/29 设计架构

    • 开始适配input attachment
  • 2022/5/30 设计架构

    • TDescriptor中增加class TInputAttachmentDescriptor 对应VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
    • TShader中增加std::vector<TInputAttachmentDescriptor *> inputAttachmentDescriptors; 用于存input attachment,并增加const std::vector<TInputAttachmentDescriptor *> &GetInputAttachmentDescriptors();成员函数用于获取相关数据
    • TShader中增加对于input attachment的解析
    • TPipeline中增加对于input attachment的解析
    • TPipelineDescriptorSet::BindData(...)中增加对于input attachment的适配
    • TDescriptorSetLayout中增加TDescriptorType GetDescriptorType(uint32_t binding)成员函数,用于获取特性binding对应的描述符类型
    • input attachment基本适配完成
  • 2022/6/1 设计架构

    • 开始FrameGraph的设计,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
  • 2022/6/2 设计架构

    • 设计FrameGraph,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
  • 2022/6/3 设计架构

    • 设计FrameGraph,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
  • 2022/6/4 设计架构

    • 设计FrameGraph,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
  • 2022/6/5 设计架构

    • 设计FrameGraph,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
    • 最基本的FrameGraph初步设计完成,具体请参看./docs/TurboDesign.drawio:FrameGraph章节
  • 2022/6/6 设计架构

    • 开始实现FrameGraph,详细设计请参看./docs/TurboDesign.drawio:FrameGraph章节
    • FrameGraph,将会是一个独立的模块,不会依赖任何第三方库,甚至是Turbo,按照常见的标准容器实现。将会输出名为TFrameGraph的静态库文件
    • engine文件夹下创建/framegraph文件夹,FrameGraph相关代码将会在这里实现
    • FrameGraph将会在Turbo::FrameGraph命名空间下实现
    • 增加TFrameGraph.hTFrameGraph.cpp
  • 2022/6/7 设计架构

    • 将第三方库配置成Submodule,glm库好像有问题,MVP矩阵好像不对导致渲染结果有问题,应该不是核心的问题,该问题先忽略,等到FrameGraph写完,开始写例子的时候再统一解决,加入Issue
    • 创建./Turbo/samples文件夹,用于存放示例代码。
    • FrameGraphvoid Turbo::FrameGraph::TFrameGraph::Compile()未实现待实现
    • FrameGraphvoid Turbo::FrameGraph::TFrameGraph::Execute()未实现待实现
    • ./Turbo/samples种增加HelloTriangle示例
    • ./Turbo/samples种增加PureHelloTriangle示例
    • ./Turbo/samples种增加FrameGraph测试示例
  • 2022/6/13 设计架构

    • 适配Linux系统(基于Deepin
    • Turbo::Core::TAllocator::Allocate(...)中增加对于Linux的内存分配支持
    • TSurface中增加对于Linux的支持:
    //for wayland
    #include <wayland-client.h>
    #include <vulkan/vulkan_wayland.h>
    
    //for xcb
    #include <xcb/xcb.h>
    #include <vulkan/vulkan_xcb.h>
    
    //for xlib
    #include <X11/Xlib.h>
    #include <vulkan/vulkan_xlib.h>

    TSurface中增加TSurface(Turbo::Core::TDevice *device, wl_display *display, wl_surface *surface)构造函数,用于适配wayland TSurfaceInternalCreate()适配Linuxwayland TSurfaceGetSurfaceSupportQueueFamilys()适配Linuxwayland

  • 2022/6/15 设计架构

    • 适配TSurface基于xcb
    • TSurface中增加xcb_connection_t *connectionxcb_window_t window成员变量,用于适配xcb
    • TSurface中增加适配xcb相应的构造函数
    • TSurfaceInternalCreate(...)中通过vkCreateXcbSurfaceKHR(...)适配xcb
    • 适配TSurface基于xlib
    • TSurface中增加Display *xlibDpy = nullptrWindow xlibWindow成员变量,用于适配xlib
    • TSurface中增加适配xlib相应的构造函数
    • TSurfaceInternalCreate(...)中通过vkCreateXlibSurfaceKHR(...)适配xlib
    • TSwapchainInternalCreate(...)中会去判断当前给的图片数量是否合法(判断数量是否在[最小值,最大值]之间),但是有些显卡设备返回的最小值为有效数据,最大值为0,比如Intel(R) HD Graphics 6000 (BDW GT3)集显设备就是出现最小值为3,最大值为0的情况,由此适配修改Turbo::Extension::TSurface::GetSurfaceCapabilities()函数
    • 适配修改Turbo::Extension::TSurface::GetSurfaceCapabilities()函数,对应修改maxImageCount
    • 修改Turbo中对于物理设备的计分算法,最好的图形设备没有返回预计的显卡,而返回了一个CPU,void Turbo::Core::TPhysicalDevice::CalculatePerformanceScore()中对于CPU的分值给的太高了,减小
  • 2022/6/16 设计架构

    • 修改./samples下的示例,使其适配Linux
    • ./samples中增加PureCombinedImageSampler.cpp例子,用于演示带有纹理图片的采样器
  • 2022/6/29 设计架构

    • FrameGraph将会转至c++20标准,将会尝试使用conceptmetaTemplate方式编写
    • samples中添加PureSeparateImageSampler示例,用于展示分离式纹理采样器的使用
    • 对于资源的读写将会改用相对路径
    • samples中添加PureIndexDraw示例,用于展示索引渲染
  • 2022/6/30 设计架构

    • TFrameGraph中的拷贝构造/赋值移动构造/赋值的相关函数使用delete声明去掉
    • TFrameGraph::AdddPass(...)中对于模板形参Setup,Execute做出限制,限制为可调用实体,对Execute的大小作出限制,最大为EXECUTE_MAX_LOAD
    • TFrameGraph::TPassAgency(...)中对于形参和模板形参Execute,由于是右值万能引用,所以使用std::forward(...)来完美转发
    • TFrameGraph::CreatePassNode(...)TAgency*模板参数修改为std::unique_ptr<TAgency>&& agency
    • TPassNodeTAgency*相成员修改为std::unique_ptr<TAgency>
    • 去掉TPassNode中析构函数的实现,使用编译器默认生成的
    • TFrameGraph::AddPass(...)中增加如下代码,调用初始化入口函数:
    std::invoke(setup, builder, pass_agency->GetData())
    • 增加TAgency的构造/析构函数
  • 2022/7/4 设计架构

    • FrameGraph设计参考Filement做出的修改意见目前写在各行的注释中(//*...),考虑是否采纳,之后需要同步修改FrameGraph的设计文档
    • FilamentFrameGraph结构分析加入FrameGraph文档,作为参考,与c++新标准的模板元编程和concept结合设计
  • 2022/7/5 设计架构

    • 开始解析Filament 1.9.9FrameGraph(截止2022/7/5 filament的最新版本为1.24对于FrameGraph做了很多更新,但总体思路没变),请在./docs/TurboDesign.drawio::FrameGraph的右侧查看(注:重点过程被标注为橘黄色)
  • 2022/7/6 设计架构

    • 开始解析FilamentFrameGraph::compile()阶段,请在./docs/TurboDesign.drawio::FrameGraph的右侧查看
  • 2022/7/7 设计架构

    • 开始解析FilamentFrameGraph::execute()阶段,请在./docs/TurboDesign.drawio::FrameGraph的右侧查看
  • 2022/7/8 设计架构

    • 解析FilamentFrameGraph::execute()阶段,reset()函数调用位置标错了,修改回来。
    • 开始解析FilamentFrameGraph::execute()阶段的resources.get(data.rt);,请在./docs/TurboDesign.drawio::FrameGraph的右侧查看
    • 至此FilamentFrameGraph核心解析完毕,请在./docs/TurboDesign.drawio::FrameGraph的右侧查看
    • TFrameGraph.hpp中增加如下,用于表示无效ID,并用该值初始化所有ID:
    constexpr uint32_t TURBO_NVALID_ID = std::numeric_limits<uint32_t>::max();
    • TFrameGraph::AddPass(name, setup, execute)中的execute回调中TResources使用const声明,对应的TBuilder::Get(...)等函数需要适配,碰到再改
    • TFrameGraph::TBuilder::Create(...)中的Virtualizable模板形参改回T
    • TFrameGraph::Create(...)中的Virtualizable模板形参改回T
  • 2022/7/9 设计架构

    • 修缮TFrameGraph::TBuilder::Create(...)函数
    • TFrameGraph::TResourceAgency(...)中的Virtualizable模板形参改回T
    • TFrameGraph::TResourceAgency(...)中增加std::string name属性,用于存储资源名称
    • TFrameGraph::TResourceAgency中的T *resource改为T resource
    • 新增TVirtualResourceAgency类继承自TAgency,将TResourceAgency改为继承自T TVirtualResourceAgency
    • TFrameGraph::std::vector<TAgency *> *agencys成员变量改成TFrameGraph::std::vector<TVirtualResourceAgency *> *agencys
    • TNode中的name成员变量移动到TPassNode中,TResourceNoded的名称位于其资源代理中
    • TResourceNode中的TAgencyID agencyID成员变量换成TVirtualResourceAgency*指向对应的资源代理
    • TResourceNode中的TAgencyID agencyID成员变量换成TVirtualResourceAgency*指向对应的资源代理
    • TFrameGraph::TBuilder::Create(...)函数基本修缮完成
    • 修缮TFrameGraph::TBuilder::Write(...)函数
    • TFrameGraph中增加TResourceNode &GetResourceNode(TResource resource)函数
    • TVirtualResourceAgency中增加TVersion version成员变量,并增加相应的Set/Get函数
    • TResourceNode中增加TVirtualResourceAgency *GetResourceAgency()函数
    • 遗弃TFrameGraph中的CloneResourceNode(...)函数
    • 遗弃TFrameGraph中的GetResourceAgency(...)函数
    • TFrameGraph中增加bool IsValid(TPass pass)函数
    • TFrameGraph::TBuilder::Write(...)函数基本修缮完成
    • 修缮TResources::Get(TResource resource)函数
    • TResourceNode中增加TPass writer成员变量,用与表示资源的写入者
  • 2022/7/10 设计架构

    • TVirtualResourceAgency类中增加TPass firstUserTPass lastUser用于表示第一次和最后一次使用该资源的使用者
    • TVirtualResourceAgency类中增加如下,用于表示该PassNode运行时需要创建和销毁的资源:
    std::vector<TVirtualResourceAgency*> devirtualizes;
    std::vector<TVirtualResourceAgency*> destroies;
    • TVirtualResourceAgency增加如下成员函数:
    virtual void Create() = 0;
    virtual void Destroy() = 0;
    • TResourceAgency增加如下成员函数:
    virtual void Create() override;
    virtual void Destroy() override;
    • 增加class TPassExecutorAgency类,用于定义pass代理的Executor(...)的虚函数回调
    • 修改class TPassAgency类,继承自TPassExecutorAgency,并实现Executor(...)虚函数回调
    • TPassNode类中的std::unique_ptr<TAgency> agency修改成std::unique_ptr<TPassExecutorAgency> agency;
    • TFrameGraph类中的void Execute();成员函数修改成void Execute(void *context);
    • 修改TFrameGraph::CreatePassNode(...)适配新的TPassExecutorAgency
    • 修改TPassNode构造函数,适配新的TPassExecutorAgency
    • TFrameGraph大框架基本上写完了,剩下的就是ResourcePassNode等特化和引擎提供的特性资源类,比如PresentNode(PassNode的特化,有PresentData)Texture(纹理资源),DepthTexture(深度纹理),ColorTexture(颜色纹理)
    • 接下来需要实现TFrameGraphBlackboard特性
  • 2022/7/11 设计架构

    • 实现FrameGraphBlackboard特性
    • 实现TFrameGraph中增加TBlackboard
    • TFrameGraph中增加TBlackboard类成员变量
    • TFrameGraph中增加TBlackboard &GetBlackboard()成员函数
    • 需要特化PresentPassNode,显示节点一般作为结束节点,但是FrameGraph演讲中并没有显示的给出显示阶段往哪个资源身上写入,所以目前显示节点没有写入,也就是没有出度,没有出度在FrameGraph::Compile()阶段就会被剔除,这也许会造成一连串的剔除,所以需要专门特化一个PresentPassNode或是采用SideEffect解决(目前TFrameGraph并没有引入SideEffect特性) 当前的算法正常并不会剔除PresentPassFrameGraph目前的剔除算法首先基于资源引用数进行的剔除,目前显示节点不向任何资源写入,只是读取资源,正常不会发生递归性的一连串剔除
    • TFrameGraph还需要经过测试,目前还没有严格测试
  • 2022/7/12 设计架构

    • 修复Bug:TFrameGraph::Compile()中计算资源的创建者和销毁者时,FrameGraph的所有资源可能会被全部剔除,造成空图,这会导致资源的创建者和销毁者为无效节点(比如强制PresentPass往资源中写入,由于PresentPass为结束节点,正常不应该再写入资源,这时该写入的资源没有出度,也就是没有人使用该节点,这时Compile()阶段会发生资源剔除,导致一连串的资源剔除,最坏的情况会剔除成空图,这时资源的创建者和销毁者不会被赋值,从而导致创建者和销毁者的节点id无效非法)

    • 有关TFrameGraph如何使用和测试,请参考./samples/FrameGraphSample.cpp

    • TFrameGraph::Execute(...)中增加对PassNode的引用数的判断,如果引用数大于零,说明该节点有使用者,运行节点的Executor回调,否则没有使用,不去调用回调。(注意:这将会导致PresentNode的运行回调不会被调用,考虑使用SideEffect特性强制驱动,如果一个PassNodeSideEffect特性,说明在节点不会被剔除)

    • TPassNode中增加bool sideEffect成员变量

    • TFrameGraph::TBuilder中增加TBuilder &SideEffect();成员函数,用于设置PassNodesideEffect成员

    • TFrameGraph::Execute()中增加对于sideEffect的判断

  • 2022/7/13 设计架构

    • 修改SideEffect强制不剔除PassNode,应该修改其refCount
    • 移除TVirtualResourceAgency::SetVersion(...)函数,通过直接修改成员变量完成
    • 至此最基础的FrameGraph实现完成,接下来将会于./engine/include./engine/src中实现更高级的资源和特性(比如Surface,Material和各种Resource等)
  • 2022/7/16 设计架构

    • 修改./main.cpp中的绝对路径修改到相对路径
    • 开始尝试动态加载Vulkan库来获取函数
    • 核心中添加TVulkanLoader类用于实现VulkanLoader
    • 核心中添加TCore::TResult中增加UNIMPLEMENTED用于表示引擎未实现先关定义,请实现
  • 2022/7/17 设计架构

    • TVulkanLoader中增加如下私有函数,用于加载Vulkan API的函数:
    template <TLoaderType type, typename Function>
    Function LoadAll(void *context, const char*name);
    • TVulkanLoader中增加如下函数:
    void Load(TInstance *instance);
    void LoadAllInstanceFunctions(TInstance *instance);
    void LoadAllDeviceFunctions(TInstance *instance);
    
    template <typename Function>
    Function LoadInstanceFunction(TInstance *instance, const char *name);
    template <typename Function>
    Function LoadInstanceFunction(VkInstance instance, const char *name);
    template <typename Function>
    Function LoadDeviceFunction(TInstance*instance, const char*name);
    template <typename Function>
    Function LoadDeviceFunction(VkInstance instance, const char*name);
    TVersion GetVulkanVersion();
    • TInstance::InternalCreate()中增加对于TVulkanLoader的相关调用,用于加载Vulkan API函数
    • TInstance::InternalCreate()中对于vkCreateInstance的相关调用,更改成Turbo::Core::vkCreateInstance调用,并在之后调用TVulkanLoader::Instance()->LoadAll(this);用于获取所有Vulkan API函数
    • TInstance::IsSupportVulkan()中对于vkCreateInstance的相关调用,更改成使用TVulkanLoader调用
    • TInstance::GetVulkanInstanceVersion()中对于vkEnumerateInstanceVersion的相关调用,更改成使用TVulkanLoader调用
  • 2022/7/18 设计架构

    • TLayerInfo中使用TVulkanLoader调用相应函数
    • TExtensionInfo中使用TVulkanLoader调用相应函数
  • 2022/7/20 设计架构

    • TVulkanLoader加载vkEnumeratePhysicalDevices函数
    • TVulkanLoader加载vkGetPhysicalDeviceProperties函数
    • TVulkanLoader加载vkEnumerateDeviceLayerProperties函数
    • TVulkanLoader加载vkEnumerateDeviceExtensionProperties函数
    • TVulkanLoader加载vkGetPhysicalDeviceQueueFamilyProperties函数
    • TVulkanLoader加载vkGetPhysicalDeviceFeatures函数
    • TVulkanLoader加载vkGetPhysicalDeviceMemoryProperties函数
    • TPhysicalDevice::InternalCreate()使用Turbo::Core::vkEnumeratePhysicalDevices(...)函数
    • TFormatInfo::GetSupportFormats使用TVulkanLoader获取函数
    • TVulkanLoader加载vkCreateDevice函数
    • TVulkanLoader加载vkGetPhysicalDeviceFormatProperties函数
    • TVulkanLoader加载vkGetPhysicalDeviceImageFormatProperties函数
    • TDevice::InternalCreate()使用TVulkanLoader获取函数
    • TVulkanLoader增加如下成员函数:
    template <typename Function>
    Function LoadDeviceFunction(TDevice *device, const char *name);
    template <typename Function>
    Function LoadDeviceFunction(VkDevice device, const char *name);
    • TVulkanLoader提供专门TDevice/VkDevice设备的特定实现函数版本获取
    • TVulkanLoader加载vkDestroyDevice函数
    • TVulkanLoader加载vkGetPhysicalDeviceSparseImageFormatProperties函数
    • TVulkanLoader加载如下设备函数:
    extern VULKAN_DEVICE_API PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
    extern VULKAN_DEVICE_API PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
    extern VULKAN_DEVICE_API PFN_vkAllocateMemory vkAllocateMemory;
    extern VULKAN_DEVICE_API PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
    extern VULKAN_DEVICE_API PFN_vkBindBufferMemory vkBindBufferMemory;
    extern VULKAN_DEVICE_API PFN_vkBindImageMemory vkBindImageMemory;
    extern VULKAN_DEVICE_API PFN_vkCmdBeginQuery vkCmdBeginQuery;
    extern VULKAN_DEVICE_API PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
    extern VULKAN_DEVICE_API PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
    extern VULKAN_DEVICE_API PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
    extern VULKAN_DEVICE_API PFN_vkCmdBindPipeline vkCmdBindPipeline;
    extern VULKAN_DEVICE_API PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
    extern VULKAN_DEVICE_API PFN_vkCmdBlitImage vkCmdBlitImage;
    extern VULKAN_DEVICE_API PFN_vkCmdClearAttachments vkCmdClearAttachments;
    extern VULKAN_DEVICE_API PFN_vkCmdClearColorImage vkCmdClearColorImage;
    extern VULKAN_DEVICE_API PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
    extern VULKAN_DEVICE_API PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
    extern VULKAN_DEVICE_API PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
    extern VULKAN_DEVICE_API PFN_vkCmdCopyImage vkCmdCopyImage;
    extern VULKAN_DEVICE_API PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
    extern VULKAN_DEVICE_API PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
    extern VULKAN_DEVICE_API PFN_vkCmdDispatch vkCmdDispatch;
    extern VULKAN_DEVICE_API PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
    extern VULKAN_DEVICE_API PFN_vkCmdDraw vkCmdDraw;
    extern VULKAN_DEVICE_API PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
    extern VULKAN_DEVICE_API PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
    extern VULKAN_DEVICE_API PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
    extern VULKAN_DEVICE_API PFN_vkCmdEndQuery vkCmdEndQuery;
    extern VULKAN_DEVICE_API PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
    extern VULKAN_DEVICE_API PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
    extern VULKAN_DEVICE_API PFN_vkCmdFillBuffer vkCmdFillBuffer;
    extern VULKAN_DEVICE_API PFN_vkCmdNextSubpass vkCmdNextSubpass;
    extern VULKAN_DEVICE_API PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
    extern VULKAN_DEVICE_API PFN_vkCmdPushConstants vkCmdPushConstants;
    extern VULKAN_DEVICE_API PFN_vkCmdResetEvent vkCmdResetEvent;
    extern VULKAN_DEVICE_API PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
    extern VULKAN_DEVICE_API PFN_vkCmdResolveImage vkCmdResolveImage;
    extern VULKAN_DEVICE_API PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
    extern VULKAN_DEVICE_API PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
    extern VULKAN_DEVICE_API PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
    extern VULKAN_DEVICE_API PFN_vkCmdSetEvent vkCmdSetEvent;
    extern VULKAN_DEVICE_API PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
    extern VULKAN_DEVICE_API PFN_vkCmdSetScissor vkCmdSetScissor;
    extern VULKAN_DEVICE_API PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
    extern VULKAN_DEVICE_API PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
    extern VULKAN_DEVICE_API PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
    extern VULKAN_DEVICE_API PFN_vkCmdSetViewport vkCmdSetViewport;
    extern VULKAN_DEVICE_API PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
    extern VULKAN_DEVICE_API PFN_vkCmdWaitEvents vkCmdWaitEvents;
    extern VULKAN_DEVICE_API PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
    extern VULKAN_DEVICE_API PFN_vkCreateBuffer vkCreateBuffer;
    extern VULKAN_DEVICE_API PFN_vkCreateBufferView vkCreateBufferView;
    extern VULKAN_DEVICE_API PFN_vkCreateCommandPool vkCreateCommandPool;
    extern VULKAN_DEVICE_API PFN_vkCreateComputePipelines vkCreateComputePipelines;
    extern VULKAN_DEVICE_API PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
    extern VULKAN_DEVICE_API PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
    extern VULKAN_DEVICE_API PFN_vkCreateEvent vkCreateEvent;
    extern VULKAN_DEVICE_API PFN_vkCreateFence vkCreateFence;
    extern VULKAN_DEVICE_API PFN_vkCreateFramebuffer vkCreateFramebuffer;
    extern VULKAN_DEVICE_API PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
    extern VULKAN_DEVICE_API PFN_vkCreateImage vkCreateImage;
    extern VULKAN_DEVICE_API PFN_vkCreateImageView vkCreateImageView;
    extern VULKAN_DEVICE_API PFN_vkCreatePipelineCache vkCreatePipelineCache;
    extern VULKAN_DEVICE_API PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
    extern VULKAN_DEVICE_API PFN_vkCreateQueryPool vkCreateQueryPool;
    extern VULKAN_DEVICE_API PFN_vkCreateRenderPass vkCreateRenderPass;
    extern VULKAN_DEVICE_API PFN_vkCreateSampler vkCreateSampler;
    extern VULKAN_DEVICE_API PFN_vkCreateSemaphore vkCreateSemaphore;
    extern VULKAN_DEVICE_API PFN_vkCreateShaderModule vkCreateShaderModule;
    extern VULKAN_DEVICE_API PFN_vkDestroyBuffer vkDestroyBuffer;
    extern VULKAN_DEVICE_API PFN_vkDestroyBufferView vkDestroyBufferView;
    extern VULKAN_DEVICE_API PFN_vkDestroyCommandPool vkDestroyCommandPool;
    extern VULKAN_DEVICE_API PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
    extern VULKAN_DEVICE_API PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
    extern VULKAN_DEVICE_API PFN_vkDestroyDevice vkDestroyDevice;
    extern VULKAN_DEVICE_API PFN_vkDestroyEvent vkDestroyEvent;
    extern VULKAN_DEVICE_API PFN_vkDestroyFence vkDestroyFence;
    extern VULKAN_DEVICE_API PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
    extern VULKAN_DEVICE_API PFN_vkDestroyImage vkDestroyImage;
    extern VULKAN_DEVICE_API PFN_vkDestroyImageView vkDestroyImageView;
    extern VULKAN_DEVICE_API PFN_vkDestroyPipeline vkDestroyPipeline;
    extern VULKAN_DEVICE_API PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
    extern VULKAN_DEVICE_API PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
    extern VULKAN_DEVICE_API PFN_vkDestroyQueryPool vkDestroyQueryPool;
    extern VULKAN_DEVICE_API PFN_vkDestroyRenderPass vkDestroyRenderPass;
    extern VULKAN_DEVICE_API PFN_vkDestroySampler vkDestroySampler;
    extern VULKAN_DEVICE_API PFN_vkDestroySemaphore vkDestroySemaphore;
    extern VULKAN_DEVICE_API PFN_vkDestroyShaderModule vkDestroyShaderModule;
    extern VULKAN_DEVICE_API PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
    extern VULKAN_DEVICE_API PFN_vkEndCommandBuffer vkEndCommandBuffer;
    extern VULKAN_DEVICE_API PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
    extern VULKAN_DEVICE_API PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
    extern VULKAN_DEVICE_API PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
    extern VULKAN_DEVICE_API PFN_vkFreeMemory vkFreeMemory;
    extern VULKAN_DEVICE_API PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
    extern VULKAN_DEVICE_API PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
    extern VULKAN_DEVICE_API PFN_vkGetDeviceQueue vkGetDeviceQueue;
    extern VULKAN_DEVICE_API PFN_vkGetEventStatus vkGetEventStatus;
    extern VULKAN_DEVICE_API PFN_vkGetFenceStatus vkGetFenceStatus;
    extern VULKAN_DEVICE_API PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
    extern VULKAN_DEVICE_API PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
    extern VULKAN_DEVICE_API PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
    extern VULKAN_DEVICE_API PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
    extern VULKAN_DEVICE_API PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
    extern VULKAN_DEVICE_API PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
    extern VULKAN_DEVICE_API PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
    extern VULKAN_DEVICE_API PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
    extern VULKAN_DEVICE_API PFN_vkMapMemory vkMapMemory;
    extern VULKAN_DEVICE_API PFN_vkMergePipelineCaches vkMergePipelineCaches;
    extern VULKAN_DEVICE_API PFN_vkQueueBindSparse vkQueueBindSparse;
    extern VULKAN_DEVICE_API PFN_vkQueueSubmit vkQueueSubmit;
    extern VULKAN_DEVICE_API PFN_vkQueueWaitIdle vkQueueWaitIdle;
    extern VULKAN_DEVICE_API PFN_vkResetCommandBuffer vkResetCommandBuffer;
    extern VULKAN_DEVICE_API PFN_vkResetCommandPool vkResetCommandPool;
    extern VULKAN_DEVICE_API PFN_vkResetDescriptorPool vkResetDescriptorPool;
    extern VULKAN_DEVICE_API PFN_vkResetEvent vkResetEvent;
    extern VULKAN_DEVICE_API PFN_vkResetFences vkResetFences;
    extern VULKAN_DEVICE_API PFN_vkSetEvent vkSetEvent;
    extern VULKAN_DEVICE_API PFN_vkUnmapMemory vkUnmapMemory;
    extern VULKAN_DEVICE_API PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
    extern VULKAN_DEVICE_API PFN_vkWaitForFences vkWaitForFences;
  • 2022/7/22 设计架构

    • TVulkanLoader中只提供Vulkan_Core的函数函数声明和获取,也就是说TVulkanLoader.h中只存在Vulkan核心函数声明和获取,有关Vulkan的属于扩展范围的函数,需要在相应的扩展模块使用TVulkanLoader自定义加载相应的函数
    • TVulkanLoader.h中增加如下声明用来标识函数是Vulkan的核心函数还是扩展函数
    #define VULKAN_CORE
    #define VULKAN_EXTENSION
  • 2022/7/23 设计架构

    • TVulkanLoader中增加struct TDeviceFunctionTable内部有设备相关函数声明,并用TDeviceDriver重命名
    • TVulkanLoader中增加TDeviceDriver LoadDeviceDriver(TDevice *device)用于返回特定设备函数实现版本
    • TDevice中增加TDeviceDriver *deviceDriver;用于创建设备函数表
    • TDevice::InternalCreate()中增加对TDeviceDriver *deviceDriver;的初始化
    • TDevice中增加const TDeviceDriver *GetDeviceDriver();函数,用于返回设备指定实现函数表(驱动)
    • ~TDevice中增加vkDeviceWaitIdle(...)调用使用driver替换调用
    • 开始将TVmaAllocator中使用TDeviceDriver调用使适配
  • 2022/7/24 设计架构

    • 开始将TDeviceQueue中使用TDeviceDriver调用使适配
    • 开始将TCommandBuffer中使用TDeviceDriver调用使适配
    • TPipeline中增加TDevice* GetDevice()成员函数
    • 开始将TCommandBufferPool中使用TDeviceDriver调用使适配
    • 开始将TDescriptorPool中使用TDeviceDriver调用使适配
    • 开始将TDescriptorSet中使用TDeviceDriver调用使适配
    • 开始将TDescriptorSetLayout中使用TDeviceDriver调用使适配
    • 开始将TFence中使用TDeviceDriver调用使适配
    • 开始将TFramebuffer中使用TDeviceDriver调用使适配
    • 开始将TGraphicsPipeline中使用TDeviceDriver调用使适配
    • 开始将TImageView中使用TDeviceDriver调用使适配
    • 开始将TPipelineLayout中使用TDeviceDriver调用使适配
    • 开始将TRenderPass中使用TDeviceDriver调用使适配
    • 开始将TSampler中使用TDeviceDriver调用使适配
    • 开始将TSemaphore中使用TDeviceDriver调用使适配
    • 开始将TShader中使用TDeviceDriver调用使适配
  • 2022/7/25 设计架构

    • TDeviceQueue::InternalCreate()中使用TVulkanLoader加载vkQueuePresentKHR函数
    • TDeviceQueue::Present(...)中使用TVulkanLoader加载的vkQueuePresentKHR函数进行调用
    • 将如下定义从TVulkanLoader.h中移动到TCore.h中:
    #define VULKAN_GLOBAL_API
    #define VULKAN_INSTANCE_API
    #define VULKAN_DEVICE_API
    #define VULKAN_CORE
    # efine VULKAN_EXTENSION
    • 开始将TSurface中使用TDeviceDriver调用使适配
  • 2022/7/27 设计架构

    • 开始将TSwapchain中使用TDeviceDriver调用使适配
    • 有小伙伴提出在单独使用TurboTCore核心库的时候,需要手动链接TCore库的依赖库,经过检验确实如此,这不是TCore库发布的初衷,有关该问题的细节请参阅./docs/issue.md::Turbo核心生成的TCore库...,由于本人CMake并不是很精通,目前正在研究中...
    • TCore中有关Vulkan函数的动态加载目前基本结束,接下来陆续撤走CMake中需要硬编码指定vulkan-1.lib目录的配置,计划将vulkan/vulkan.h头文件加入TCore
    • Vulkan SDK 1.3.204.1中的Include文件夹下的内容拷贝到了./engine/core/include/vulkan目录下
    • 修改TCore.h中对于#include <vulkan/vulkan.h>的引用,修改成#include "vulkan/vulkan.h"
    • 修改TSurface.h中对于Vulkan头文件的引用,修改成本地vulkan头文件
    • 移除TCoreCMake中对于Vulkan目录配置的硬编码
  • 2022/7/28 设计架构

    • 调整Turbo核心的CMakeLists.txt
    • 移除Turbo核心的vk_mem_alloc.h,使用第三方库中的头文件
    • 尝试解决TCore的依赖库问题
    • 修改PureIndexDraw例子中的IndexBuffer大小的bug,感谢会翔提供的反馈
  • 2022/7/30 设计架构

    • 调整./engine/core/CMakeLists.txt,尝试解决TCore的依赖库问题
    • 调整TShader.cpp中对于glslangGlslangToSpv.h头文件引用层级
    • 调整./main.cpp中对于vkGetImageSubresourceLayout(...)的调用,改成Turbo::Core::vkGetImageSubresourceLayout(...)
    • 调整./main.cpp中对于vkDestroySurfaceKHR(...)的调用,改成使用TVulkanLoader获取调用
    • ./CMakeLists.txt中对于imgui_impl_glfw.cppimgui_impl_vulkan.cpp的引用去掉,用不上
    • 同理将./samples/CMakeLists.txt中对于imgui_impl_glfw.cppimgui_impl_vulkan.cpp的引用去掉,用不上
    • ./samples中的示例将适配TVulkanLoader
    • 注:[VulkanMemoryAllocator]:If you fetch pointers to all Vulkan functions in a custom way, e.g. using some loader likeVolk
      • Define VMA_STATIC_VULKAN_FUNCTIONS and VMA_DYNAMIC_VULKAN_FUNCTIONS to 0.
      • Pass these pointers via structure #VmaVulkanFunctions.
    • 考虑是否将外部引入的VkSurfaceKHR中在TSurface析构时顺便销毁,目前外部引入的VkSurfaceKHR,需要在外部自己销毁
    • TVmaAllocator目前对于Vulkan API的获取,使用VulkanMemoryAllocator内部自动获取。
      • If you want VMA to fetch pointers to Vulkan functions dynamically using vkGetInstanceProcAddr, vkGetDeviceProcAddr (this is the option presented in the example below):
        1. Define VMA_STATIC_VULKAN_FUNCTIONS to 0, VMA_DYNAMIC_VULKAN_FUNCTIONS to 1.
        2. Provide pointers to these two functions via VmaVulkanFunctions::vkGetInstanceProcAddr, VmaVulkanFunctions::vkGetDeviceProcAddr.
        3. The library will fetch pointers to all other functions it needs internally.
    • 至此Turbo核心库TCore依赖库问题已解决,感谢会翔提供的问题反馈
  • 2022/8/4 设计架构

    • ./samples中增加PBRTest.cpp,用于physically based renderingBSDF研究
  • 2022/8/7 设计架构

    • ./samplesPBRTest.cpp,对于physically based renderingBSDF初步调试成功。看样子渲染结果应该是对的(○` 3′○)
  • 2022/8/10 设计架构

    • 开始engine层面的设计和实现,engine层的相关设计将会位于./docs/TurboDesign.drawio::Engine章节中,engine层的相关实现将会放入./engine/include./engine/src
  • 2022/8/11 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中创建纲要
    • 修正./docs/TurboDesign.drawio::Engine章节中Subapss的问题
  • 2022/8/13 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中创建概要设计
  • 2022/8/15 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中完善概要设计设计思路
  • 2022/8/16 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中概要设计设计增加对于FrameGraph结合的设计思路
  • 2022/8/17 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中概要设计设计增加对于CommandBuffer相关的设计思路
    • ./docs/TurboDesign.drawio::Engine章节中增加详细设计
    • Turbo核心TCommandBuffer中新增TSecondaryCommandBuffer类,用于表示二级指令缓冲
    • Turbo核心TCommandBuffer中新增TCommandBufferBase类,用于表示指令缓冲的基类,用于实现指令。该类为虚基类
    • Turbo核心TCommandBufferTCommandBufferBase类,增加TCommandBufferLevel GetLevel();函数,用于获取指令缓冲等级
    • Turbo核心TCommandBuffer中新增TCommandBufferLevel枚举,用于表示指令缓冲的的级别
    • Turbo核心TCommandBuffer中将TCommandBuffer修改成继承自TCommandBufferBase
    • Turbo核心修改TCommandBufferPool中将取消继承自Turbo::Core::TPool<TCommandBuffer>
    • Turbo核心TCommandBufferPool中增加void Free(TCommandBufferBase *commandBufferBase);用于统一回收一级、二级指令缓冲
    • Turbo核心TCommandBufferPool中增加TSecondaryCommandBuffer *AllocateSecondary();void Free(TSecondaryCommandBuffer *secondaryCommandBuffer);用于创建和回收二级指令缓冲
    • Turbo核心TCommandBuffer中应该实现void CmdExecuteCommand(...);函数,用于一级指令缓冲调度二级指令缓冲。今天太晚了,明天再弄。
  • 2022/8/18 设计架构

    • Turbo核心TCommandBuffer中增加TCommandBufferPool* GetCommandBufferPool();函数
    • Turbo核心TCommandBuffer中实现void CmdExecuteCommand(...);函数
    • Turbo核心TCommandBufferBase中增加VkCommandBufferInheritanceInfo *vkCommandBufferInheritanceInfo = nullptr成员变量,用于二级指令缓冲的继承信息
    • Turbo核心TCommandBufferBase中增加uint32_t currentSubpass = 0;成员变量,表示当前的Subpass
    • Turbo核心TCommandBufferBase中增加TFramebuffer *currentFramebuffer = nullptr;成员变量,表示当前的Framebuffer
    • Turbo核心TSecondaryCommandBuffer中删除void Begin() = delete成员函数调用,转而使用void Begin(TRenderPass *renderPass, TFramebuffer *framebuffer, uint32_t subpass);成员函数
    • Turbo核心TCommandBuffer.h中增加typedef enum class TSubpassContents枚举,用于对应VkSubpassContents
    • Turbo核心TCommandBufferBase中将void CmdBeginRenderPass(...)的形参增加一个TSubpassContents参数
    • Turbo核心TCommandBufferBase::Begin()中将vk_command_buffer_begin_info.flags设置成VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT为适应二级指令缓冲
    • ./samples中增加SecondaryCommandBufferTest例子,用于测试二级指令缓冲
  • 2022/8/18 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中详细设计设计,细化具体资源
  • 2022/8/19 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中系统设计中增加文件加载层相关
    • ./asset/models/增加material_sphere.gltf文件
    • ./samples/PBRTest.cpp例子中将读取的模型改为material_sphere.gltf文件
  • 2022/8/20 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中详细设计中增加Material设计思路
    • ./samples中增加MultiDrawTest.cpp文件,用于探究SubpassMutilDraw之间的联系
    • ./samples中增加SubpassTest.cpp文件,用于探究SubpassMutilDraw之间的联系
  • 2022/8/21 设计架构

    • ./docs/TurboDesign.drawio::Engine章节中详细设计::Material设计思路,有设计问题,进一步设计完善
  • 2022/8/25 知会

    • 现在Turbo::Engine层面的设计多少都有些问题,比如:如果用户想要调配使用FrameGraph就需要对渲染有过硬的理解,目前看了FilamentLegitEngine,FrameGraph-Example等相关引擎对于FrameGraph亦或是RenderGraph的封装设计,这些引擎都会提供一套固定的FrameGraph,用于一套已经定义好了的渲染流程,这些流程多是GBuffer流程,用户提供Renderable结构数据,引擎将其塞入特定的PassNode中,这个塞入工作并不是用户自定义的,而是引擎完成的,这就会导致用户(对图形学不是很熟悉)需要按照引擎先前定好的流程渲染,渲染出有限的效果(大部分情况下这个有限的效果是够用的),除非用户对于图形学和FrameGraph有比较深刻的理解,则可自己使用FrameGraph配置自定义渲染流程。
    • 从现在开始要全力备考了,再写代码我妈要打死我了,不管考得上,还是考不上,明年引擎都将继续,回见~
  • 2022/9/4 设计架构

    • 感谢会翔提供的反馈。修复TCommandBufferBase::CmdSetLineWidth(...)时程序报错的问题,原因是TGraphicsPipeline::InternalCreate()在创建管线时VkPipelineDynamicStateCreateInfo::dynamicStateCount给个固定数值2,导致VkDynamicState::VK_DYNAMIC_STATE_LINE_WIDTH并不会加入动态状态中。
  • 2022/10/16 设计架构

    • ./samples中增加InstancedDrawTest示例,用于示例实例化渲染
  • 2022/11/7 设计架构

    • ./samples中增加PerlinWorleyNoiseTest示例,用于尝试生成Perlin-Woley噪音
  • 2022/11/9 设计架构

    • core中创建TComputerPipeline
  • 2022/11/10 设计架构

    • TurboDesignCore章节增加Pipeline与Shader分支箭头(非常大的黄色箭头)
    • TShader中增加TVertexShaderTFragmentShaderTComputeShader并在TShader.cpp中实现(目前先实现这几个,剩下等有时间的)
    • TPipeline中增加图形管线的构造函数TPipeline(TDevice *device, TVertexShader* vertexShader,TFragmentShader* fragmentShader);和计算管线的构造函数TPipeline(TDevice *device, TComputeShader *computeShader);。老的构造函数将会声明置成弃用函数。
    • TGraphicsPipeline中增加使用TVertxShaderTFragmentShader的构造函数。老的构造函数将会声明置成弃用函数。
    • 实现TComputerPipeline中并在其中调用vkCreateComputePipelines创建计算管线的VkPipeline
    • ./samples中增加CineShaderLava示例,在ShaderToy上看到的,感觉挺有意思,想试试使用Turbo渲染,就搬过来了。
  • 2022/11/11 设计架构

    • ./samples中增加Octagrams示例,在ShaderToy上看到的,感觉挺有意思,就搬过来了。
    • ./samples中增加ProteanClouds示例,在ShaderToy上看到的,感觉挺有意思,就搬过来了。
    • 开始实现CoreTCommandBufferBase中的void CmdDispatch(...)函数,用于调用执行计算着色器的计算管线
    • ./samples中增加ComputePipelineTest测试示例,用于测试计算着色器和计算管线是否正确有效
    • 引擎中目前没有storage image相关的解析,现进行实现。
    • TDescriptor中增加TStorageImageDescriptor类,继承自TDescriptor,并实现
    • TShader中增加TStorageImageDescriptor类的数组使用:声明std::vector<TStorageImageDescriptor *> storageImageDescriptors成员变量。
    • TShader中增加const std::vector<TStorageImageDescriptor *> &GetStorageImageDescriptors()成员函数。
    • TShaderInternalParseSpirV()成员函数中对storage image进行解析构建,并在TShader析构时销毁。
    • TPipelineInternalCreate()成员函数中对storage image进行解析添加。
    • TDescriptorSetBindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TImageView *> &imageViews)成员函数中增加对storage image的支持。
  • 2022/11/12 设计架构

    • 加了个爱发电赞助,感谢投喂。
    • ./samples中增加Auroras示例,在ShaderToy上看到的,太漂亮了没忍住,又搬过来了。
    • ./samplesProteanClouds示例中增加对应的鼠标位置数据
  • 2022/11/13 设计架构

    • ./samples中增加ComputerPipelineGeneratePerlinWorley示例。用于使用计算着色器生成128×128×128的3维PerlinWorley噪音,之后再使用图形管线显示。
    • ./samples中增加ComputerPipelineGenerateWorley示例。用于使用计算着色器生成32×32×32的3维Worley噪音,之后使用图形管线显示。
    • ./samples中增加IspGlassball11Mix示例。在ShaderToy上看到的,进行了一些魔改,没有进行降噪,原版代码好像是用的前一帧的数据进行降噪的,具体没咋看(主要是懒的写代码)。
    • 接下来计划重点实现Volumetric Cloud,之前一直想尝试实现体积云,该体积云将会写较为详细的实现文档,敬请期待。
  • 2022/11/14 设计架构

    • ./samples中增加VolumetricCloud示例。用于尝试实现体积云
    • ./asset/shaders中增加imgui.vert顶点着色器文件
    • ./asset/shaders中增加imgui.frag片元着色器文件
    • ./asset/shaders中增加perlin-worley.comp计算着色器文件
    • ./asset/shaders中增加worley.comp计算着色器文件
    • ./asset/shaders中增加post_processing.vert顶点着色器文件
    • ./asset/shaders中增加post_processing_voulmetric_cloud.frag片元着色器文件
    • ./docs中增加VolumetricCloud.md用于书写体积云的实现说明文档
    • TVulkanLoader中增加Linux平台的支持
    • Deepin环境好像不支持C++20c++17,现已退回到c++11版本
    • 由于退回到c++11版本,TFrameGraph中的一些c++新特性将会退回老版本,目前TFrameGraph不成熟,有待完善或重构,目前不是非常重要。
  • 2022/11/15 设计架构

    • 修改TVulkanLoader中增加Linux头文件dlfcn.h忘添加平台宏限制的Bug
    • 修改CppStandardTest.cpp中代码,由于退回到了C++11
    • PerlinWorleyNoiseTest.cpp中向着色器传递增加一个float h数据,用于控制噪音算法的赫斯特指数(Hurst Exponent)
    • README赞助栏目增加体积云项目
    • 修改TSwapchain.cppInternalCreate()vk_swapchain_create_info_khr.oldSwapchain=nullptr改成vk_swapchain_create_info_khr.oldSwapchain=VK_NULL_HANDLEVisual Studio 2017中赋nullptr报错
    • 修改TFrameGraph.hppExecute的相关声明,声明成TExecute,在使用Visual Studio 2017编译Turbo时会有报error C2244 无法将函数定义与现有的声明匹配,估计是名称和微软的库冲突了,换了名。TFrameGraph有时间要大修
    • 修改所有示例中有关寻找是否支持VK_LAYER_KHRONOS_VALIDATION验证层相关代码。如果设备支持将该验证层加入TInstance的激活数组中,有个Bug是当电脑不支持时或engine.GetInstance().GetSupportLayers()返回数据有问题,将会造成不应该添加Turbo::Core::TLayerInfo khronos_validation(此时khronos_validation还是未赋值状态,内部类型为TLayerType::UNDEFINED)到最后还是会调用enable_layer.push_back(khronos_validation)增加这个内部类型为TLayerType::UNDEFINED的验证层,导致在创建TInstance时不识别该验证层,返回异常。
    • 增加一个Issue:在Windows11下,英伟达驱动472.91,显卡型号RTX3070std::vector<Turbo::Core::TLayerInfo> Turbo::Core::TLayerInfo::GetInstanceLayers()将会返回空数组,Vulkan运行时此时找不到支持的验证层。
    • ./docs中增加images文件夹,用于存放文档图片
  • 2022/11/16 设计架构

    • ./doc/images增加Hurst_Exponent.gif文件,用于体积云说明
    • 更新./docs/VolumetricCloud.md文件
    • ./docs/images增加base_cloud.png文件和detail_cloud.png文件
    • ./samples增加RayMarchingTest示例,展示一个基本的光线步进示例,该示例未完成。
    • ./asset/shaders增加base_ray_marching.frag着色器,用于基本光线步进。
  • 2022/11/17 设计架构

    • 修改main.cpp使其输出的Turbo.exe。在当运行时按下键盘WASD后可以移动相机,按住鼠标右键可以俯仰相机。
    • 修改main.cpp中的eye变量名称,起错名了。
  • 2022/11/18 设计架构

    • 完成./sample下的RayMarchingTest示例
    • ./docs下增加compile_env.png,此为Windows环境下编译Turbo的环境对照表。KTX-Software很早之前的Issue,一直存在,可能GNU标准的clang/clang++不是这么用的吧。
    • 增加README.txt中第三方库的链接。glm有个历史遗留库,我下错好几次了。
    • 更新VolumetricCloud文章
  • 2022/11/19 设计架构

    • ./docs增加camera_coordinate.png。用于VolumetricCloud.md文章说明
    • ./docs增加camera_relative_pos.png。用于VolumetricCloud.md文章说明
    • ./docs增加camera_pixel_pos.png.png。用于VolumetricCloud.md文章说明
    • ./docs增加ndc.png。用于VolumetricCloud.md文章说明
    • ./docs增加base_ray_marching.gif。用于VolumetricCloud.md文章说明
    • 更新VolumetricCloud文章
    • ./asset/shaders增加volumetric_cloud.frag并对应修改VolumetricCloud示例。计划用于实现体积云,将会随着VolumetricCloud.md文章的进度完善
  • 2022/11/20 设计架构

    • ./samples增加RayMarchingBoundingBoxTest。用于VolumetricCloud的碰撞包围盒(为什么会有一圈圈的、类似摩尔纹的东西?光追噪音吗?)。
    • ./asset/shaders增加ray_marching_bounding_box.frag着色器。
    • RayMarchingTest实例增加界面文字操作提示。
  • 2022/11/21 设计架构

    • ./asset/shaders中将ray_marching_bounding_box.fragBoudingBoxOrthogonalBasis GetBoundingBoxForwardDir(...)函数修改成GetBoundingBoxOrthogonalBasis(...),之前名字起错了
    • ./asset/shaders中通过修改ray_marching_bounding_box.fragbool IsPointInBoundingBox(vec3 point, BoundingBox boundingBox)函数,增加一小点包围盒长宽高,用于补偿浮点数计算精度,进而改善了噪点,之前的精度太高了,导致生成了噪点
  • 2022/11/22 设计架构

    • ./docs增加compiler_env_version.png用于标识编译环境,Windows系统中,该环境在LLVM新版本下编译不了,需要导成Visual Studio能够顺利编译,Linux不变
    • ./docs增加raymarching.png。用于VolumetricCloud.md文章说明
    • ./docs增加ray_surface_intersect.png。用于VolumetricCloud.md文章说明
    • 更新VolumetricCloud文章
  • 2022/11/23 设计架构

    • 修改TFrameGraph.hpp中的Execute命名,在Visual Studio编译器下会冲突,改成TExecute
    • 修改TFrameGraph.hppC++17[[nodiscard]]目前Turbo使用C++11
    • /.gitignore中增加忽略install/文件夹
  • 2022/11/24 设计架构

    • 更新VolumetricCloud文章
    • 更改./samples下的VolumetricCloud,使其将ComputerPipelineGeneratePerlinWorleyRayMarchingBoundingBoxTest相结合
  • 2022/11/25 设计架构

    • ./docs/images增加intersect_case_out_box_forward.png用于VolumetricCloud.md文章说明
    • ./docs/images增加intersect_case_in_box.png用于VolumetricCloud.md文章说明
    • ./docs/images增加intersect_case_out_box_backward.png用于VolumetricCloud.md文章说明
    • ./docs/images增加ray_marching_bounding_box.gif用于VolumetricCloud.md文章说明
    • 更新VolumetricCloud文章
  • 2022/11/26 设计架构

    • ./docs/images增加bounding_box_sample_space.png用于VolumetricCloud.md文章说明
    • ./docs/images增加ray_marching_bounding_box_sample_space.gif用于VolumetricCloud.md文章说明
    • ./samples下的VolumetricCloud实例中增加delete my_computer_shader
    • 更新VolumetricCloud文章
    • ./samples下增加RayMarchingPerlinWorleyNoise实例,用于展示光线步进中基于包围盒对柏林沃利噪音的采样。
    • ./asset/shaders下增加ray_marching_perlin_worley_noise.frag片元着色器,并使用于RayMarchingPerlinWorleyNoise实例中
  • 2022/11/29 设计架构

    • ./samplesVolumetricCloud中增加powerabsorptionoutScattering传输变量,用于体积云渲染
    • ./samplesVolumetricCloud中增加对高频沃利纹理的采样
  • 2022/12/1 设计架构

    • 目前VolumetricCloud体积云渲染正在研究光照散射传输,研究周期可能会较长,先重构FrameGraph
    • 对于Deepin环境下C++17/20的支持一直没有很好的解决方式,有可能LLVM环境没有配对,研究研究。
    • TFrameGraph下的*Agency重命名成*Proxy
  • 2022/12/2 设计架构

    • TFrameGraph下的TURBO_NVALID_ID重命名成TURBO_INVALID_ID
    • TFrameGraph下的Data重命名成TData
    • TFrameGraph下的Setup重命名成TSetup
    • 修缮TFrameGraph
    • ./docs下增加Desgin文件夹
    • ./docs/Desgin/images下增加fg1~18文件,记录平日的FrameGraph的琐碎设计
    • ./docs下增加linux_env文件,记录linux上的依赖库(随便扯了张纸,有点脏,噗哈哈)
    • ./docs/Desgin下增加FrameGraphAdvance.md文件,用于整理位于Turbo教上层的FrameGraphTurbo引擎衔接设计,相关设计源头位于./docs/Desgin/images下的一些琐碎设计
  • 2022/12/4 设计架构

    • ./docs/DesginFrameGraphAdvance.md基本完成,之后新的设计都会在此文档中增加
    • ./docs/TurboDesign中的Engine模块重命名成Render(考虑到将来可能会集成实现ECS)
    • ./engine下新建render文件夹,并在render文件夹下创建includesrc文件夹
    • ./engine/render下创建TImage
  • 2022/12/5 设计架构

    • FrameGraph下对于资源的创建和销毁需要一个分配器或上下文
    • ./docs/DesginFrameGraphAdvance.md更新设计
  • 2022/12/6 设计架构

    • ./engine/render下新建TContext类,用于引擎上下文
    • ./samples下新建RenderDesignTest示例,用于Turbo::Render架构的测试
  • 2022/12/7 设计架构

    • ./docs/DesginFrameGraphAdvance.md更新设计
    • ./engine/renderTContext中增加TInstance初始化构建
    • ./engine/renderTContext中增加TDevice初始化构建
  • 2022/12/8 设计架构

    • ./docs/DesginFrameGraphAdvance.md更新设计
  • 2022/12/9 设计架构

    • ./docs/DesginFrameGraphAdvance.md更新设计
    • ./engine/render下新建TSurface
    • 重命名Turbo中所有的头文件定义宏,防止冲突
  • 2022/12/10 设计架构

    • ./engine/renderTContext增加Turbo::Core::TImage *CreateImage(...)函数
    • ./engine/renderTImage增加typedef enum TImageCreateFlagBits用于创建TImage的描述的位域标示
    • ./engine/renderTImage增加using TImageCreateFlags = uint32_t用于创建TImage的描述的位域标示集
    • ./engine/renderTImageDescriptor增加TImageCreateFlags flags成员
    • ./engine/renderTImage增加typedef enum TImageUsageBits用于创建TImage的描述的usage位域标示
    • ./engine/renderTImage增加using TImageUsages = uint32_t;用于创建TImage的描述的usage位域标示集
    • ./engine/renderTImageDescriptor增加TImageUsages usages成员
    • 更新./engine/renderTImage及其子类的Descriptor成员
    • 更新./engine/renderTImage其子类的Create()Destroy()成员函数,增加allocator
    • 更新./engine/renderTContextCreateImage()函数
    • ./engine/render下新建TResourceAllocator类,用于资源创建的分配器
  • 2022/12/11 设计架构

    • 更新./docs/DesginFrameGraphAdvance.md设计
    • ./engine/render下增加TDomain.h,用于定义资源分配的所有者端域
    • ./engine/renderTImageDescriptor增加TDomain domain成员
    • 更新./engine/renderTContextCreateImage()函数
  • 2022/12/12 设计架构

    • 更新./docs/DesginFrameGraphAdvance.md设计
    • ./samples下创建VulkanTest示例,用于纯Vulkan代码测试
  • 2022/12/13 设计架构

    • 更新./engine/renderTContextCreateImage()函数
    • 更新./engine/renderTImageTImageUsageBits枚举成员命名增加..._ATTACHMENT明确用意
  • 2022/12/14 设计架构

    • 更新./docs/DesginFrameGraphAdvance.md设计
    • 更新readme文档开头的QQ群链接,一开始链接放错了,放成爱发电赞助链接的交流群了
  • 2022/12/15 设计架构

    • ./engine/coreTImage内增加void *vmaAllocationInfo成员变量,用于存储vma内存分配信息,并在构造函数中初始化,并赋值析构函数中释放
    • ./engine/coreTImage构造函数中获取VmaAllocationInfovma内存分配信息
    • ./engine/coreTBuffer内增加void *vmaAllocationInfo成员变量,用于存储vma内存分配信息,并在构造函数中初始化,并赋值析构函数中释放
    • ./engine/coreTBuffer构造函数中获取VmaAllocationInfovma内存分配信息
    • ./engine/coreTImage中增加TMemoryTypeInfo GetMemoryTypeInfo()成员函数,用于获取底层数据的内存属性
    • ./engine/coreTBuffer中增加TMemoryTypeInfo GetMemoryTypeInfo()成员函数,用于获取底层数据的内存属性
    • ./engine/renderTContext中根据FrameGraphAdvance.md设计文档,更新实现Turbo::Render::TContext::CreateImage(...)成员函数
    • ./engine/renderTDomainBits中增加一个BOTH位标,用于表示CPU+GPU,方便使用
  • 2022/12/16 设计架构

    • ./engine/renderTFormat内增加R8G8B8A8_SRGBB8G8R8A8_UNORMD16_UNORMR8G8B8_SRGBB8G8R8_SRGBR8G8B8_UNORMB8G8R8_UNORM枚举成员
    • ./engine/renderTContext内增加Turbo::Render::TContext::CreateImage(...)增加对新增格式枚举成员的适配
    • ./engine/renderTContextTurbo::Render::TContext::CreateImage(...)中对于Turbo::Core::TImageType的判断逻辑上有问题,修复
    • ./engine/coreTCore增加typedef VkFormatProperties TFormatProperties定义
    • ./engine/coreTFormatInfo增加TFormatProperties formatProperties成员变量
    • ./engine/coreTFormatInfo新增构造函数TFormatInfo(TFormatType formatType = TFormatType::UNDEFINED, TFormatProperties formatProperties)
    • ./engine/coreTFormatInfo构造函数TFormatInfo(TFormatType formatType)设置成遗弃函数
    • ./engine/coreTFormatInfo修改Turbo::Core::TFormatInfo::GetSupportFormats()函数适配TFormatInfo带有TFormatProperties formatProperties参数函数。
    • ./engine/coreTPhysicalDeviceInfo修改std::vector<TFormatInfo> supportFormats成员变量为std::map<TFormatType, TFormatInfo> supportFormats参数函数。
    • ./engine/coreTPhysicalDevice修改void Turbo::Core::TPhysicalDevice::EnumerateFromat()成员函数,为适配std::map<TFormatType, TFormatInfo> TPhysicalDeviceInfo::supportFormats参数函数。
    • ./engine/coreTPhysicalDevice修改Turbo::Core::TPhysicalDevice::GetSupportFormats()成员函数
    • ./engine/coreTPhysicalDevice修改Turbo::Core::TPhysicalDevice::IsSupportFormat()成员函数
  • 2022/12/17 设计架构

    • ./engine/coreTPhysicalDevice修改Turbo::Core::TPhysicalDevice::IsSupportFormat()成员函数

    • ./engine/coreTFormatInfoTFormatInfo(TFormatType formatType = TFormatType::UNDEFINED);构造函数移除

    • ./engine/coreTSwapchain增加TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatType formatType, uint32_t width, uint32_t height, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, TSurfaceTransformBits transform, TCompositeAlphaBits compositeAlpha, TPresentMode presentMode, bool isClipped)构造函数,并实现

    • ./engine/coreTSwapchain增加explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatType formatType, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);构造函数,并实现

    • ./engine/coreTSwapchainexplicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatInfo format, uint32_t width, uint32_t height, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, TSurfaceTransformBits transform, TCompositeAlphaBits compositeAlpha, TPresentMode presentMode, bool isClipped);构造函数标记为遗弃

    • ./engine/coreTSwapchainexplicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatInfo format, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);构造函数标记为遗弃

    • ./engine/coreTPhysicalDevice增加TFormatInfo GetFormatInfo(TFormatType formatType);函数,用于返回更加丰富的格式信息

    • ./engine/coreTImageView增加explicit TImageView(TImage *image, TImageViewType viewType, TFormatType formatType, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)构造函数

    • ./engine/coreTImageViewexplicit TImageView(TImage *image, TImageViewType viewType, TFormatInfo format, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)构造函数标记为遗弃

    • ./engine/coreTImage[[deprecated]] explicit TImage(TDevice *device, VkImageCreateFlags imageFlags, TImageType type, TFormatInfo format, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevels, uint32_t arrayLayers, TSampleCountBits samples, TImageTiling tiling, TImageUsages usages, TMemoryFlags memoryFlags, TImageLayout layout = TImageLayout::UNDEFINED);构造函数标记为遗弃

    • ./engine/coreTImage增加explicit TImage(TDevice *device, VkImageCreateFlags imageFlags, TImageType type, TFormatType formatType, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevels, uint32_t arrayLayers, TSampleCountBits samples, TImageTiling tiling, TImageUsages usages, TMemoryFlags memoryFlags, TImageLayout layout = TImageLayout::UNDEFINED);构造函数

    • ./engine/coreTGraphicsPipelineTVertexBinding增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);成员函数

    • ./engine/coreTGraphicsPipelineTVertexBinding增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);成员函数标记为遗弃

    • ./engine/coreTGraphicsPipelineTVertexAttributeTFormatInfo format成员变量更改为TFormatType formatType

    • ./engine/coreTGraphicsPipelineTVertexAttributeTFormatInfo GetFormat();成员函数更改为TFormatType GetFormatType()并实现

    • ./engine/coreTGraphicsPipelineTVertexAttribute增加TVertexAttribute(uint32_t location, TFormatType formatType, uint32_t offset);构造函数

    • ./engine/coreTGraphicsPipelineTVertexAttributeTVertexAttribute(uint32_t location, TFormatInfo format, uint32_t offset)构造函数移除

    • ./engine/coreTFormatInfo中增加如下成员函数:

      bool IsSupportBuffer();
      bool IsSupportVertexBuffer();
      bool IsSupportLinearTiling();
      bool IsLinearTilingSupportSampledImage();
      bool IsLinearTilingSupportStorageImage();
      bool IsLinearTilingSupportStorageImageAtomic();
      bool IsLinearTilingSupportColorAttachment();
      bool IsLinearTilingSupportColorAttachmentBlend();
      bool IsLinearTilingSupportDepthStencilAttachment();
      bool IsLinearTilingSupportBlitSrc();
      bool IsLinearTilingSupportBlitDst();
      bool IsLinearTilingSupportSampledImageFilterLinear();
      bool IsLinearTilingSupportTransferSrc();
      bool IsLinearTilingSupportTransferDst();
      bool IsSupportOptimalTiling();
      bool IsOptimalTilingSupportSampledImage();
      bool IsOptimalTilingSupportStorageImage();
      bool IsOptimalTilingSupportStorageImageAtomic();
      bool IsOptimalTilingSupportColorAttachment();
      bool IsOptimalTilingSupportColorAttachmentBlend();
      bool IsOptimalTilingSupportDepthStencilAttachment();
      bool IsOptimalTilingSupportBlitSrc();
      bool IsOptimalTilingSupportBlitDst();
      bool IsOptimalTilingSupportSampledImageFilterLinear();
      bool IsOptimalTilingSupportTransferSrc();
      bool IsOptimalTilingSupportTransferDst();
    • 更新./docs/DesginFrameGraphAdvance.md设计

  • 2022/12/18 设计架构

    • 更新./docs/DesginFrameGraphAdvance.md设计

    • ./docs下增加vkspec1.3Core.pdf文件,为Vulkan1.3官方标准文档,国内在线访问Vulkan官网真难受。

    • ./engine/renderTFormat中增加UNDEFINED枚举成员

    • ./engine/render下将TFormat中的枚举成员的值与Vulkan标准一一对应上

    • ./engine/render下将TContext下增加如下函数并实现

      Turbo::Core::TInstance *GetInstance();
      Turbo::Core::TPhysicalDevice*GetPhysicalDevice();
      Turbo::Core::TDevice *GetDevice();
      Turbo::Core::TDeviceQueue *GetDeviceQueue();
    • ./engine/renderTResourceAllocator下增加TContext* GetContext()函数并实现

    • ./engine/renderTColorImageTurbo::Render::TColorImage::Create()函数更新实现

    • ./engine/renderTImage下增加class TDepthStencilImage

    • ./engine/renderTImage下增加class TDepthImage

    • ./engine/renderTImage下增加class TDepthImage2D

  • 2022/12/19 设计架构

    • 更新./docs/DesginFrameGraphAdvance.md设计
    • ./engine/renderTImage下增加class TTexture2D
    • ./engine/renderTImage下增加class TColorImage3D
    • ./engine/renderTImage下增加class TTexture3D
    • readme增加平台支持标签
    • ./docs/Desgin下新增WebGPU_Dawn.md文档,用于记录Google Dawn, a WebGPU implementation学习记录
  • 2022/12/20 设计架构

    • 🐑了,好难受。(눈_눈)
    • ./engine/renderTImage下增加class TDepthTexture2D
    • ./engine/renderTImage下增加TFormat GetFormat()成员函数
    • ./engine/renderTImage下增加uint32_t GetWidth()成员函数
    • ./engine/renderTImage下增加uint32_t GteHeight()成员函数
    • ./engine/renderTImage下增加uint32_t GetDepth()成员函数
    • ./engine/renderTImage下增加uint32_t GetLayers()成员函数
    • ./engine/renderTImage下增加uint32_t GetMipLevels()成员函数
    • ./engine/renderTImage下增加TImageUsages GetUsage()成员函数
    • ./engine/renderTImage下增加TDomain GetDomain()成员函数
  • 2022/12/21 设计架构

    • ./engine/render下增加TBuffer
    • ./engine/renderTContext下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)成员函数
    • ./engine/renderTContext下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)成员函数
    • ./engine/renderTResourceAllocator.h下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)成员函数
    • ./engine/renderResourceAllocator.h下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)成员函数
  • 2022/12/23 设计架构

    • ./docs/Desgin下将WebGPU_Dawn.md重命名为WebGPU_CCPP.md
    • 更新./docs/DesginWebGPU_CCPP
    • ./engine/renderTBuffer::Descriptor::usages类型由原来的TBufferUsageBits改为TBufferUsages
    • ./engine/renderTBuffer中增加TBufferUsages GetUsages()成员函数
    • ./engine/renderTBuffer中增加uint64_t GetSize()成员函数
    • ./engine/renderTBuffer中增加TDomain GetDomain()成员函数
    • ./engine/renderTImageTImageUsages GetUsage()成员函数更名为TImageUsages GetUsages()
  • 2022/12/24 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
  • 2022/12/25 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/renderTBuffer中增加void Copy(void *src, uint64_t size)成员函数
    • ./engine/renderTBuffer中增加void *allocator = nullptr成员变量
  • 2022/12/26 设计架构

    • 更新./docs/DesginWebGPU_CCPP.md
    • ./engine/renderTContext中增加Turbo::Core::TCommandBufferPool *commandBufferPool = nullptr成员变量
    • ./engine/renderTContext中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()成员函数
    • ./engine/renderTContext中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)成员函数
    • ./engine/renderTResourceAllocator中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()成员函数
    • ./engine/renderTResourceAllocator中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)成员函数
    • ./engine/renderTBuffervoid Copy(void *src, uint64_t size)成员函数进行优化
    • ./engine/renderTBuffer中增加void Copy(TBuffer *src, uint64_t srcOffset, uint64_t size)成员函数
  • 2022/12/27 设计架构

    • ./engine/renderTContext中增加Turbo::Core::TCommandBuffer *commandBuffer成员变量
    • ./engine/renderTContext中增加Turbo::Core::TCommandBuffer *GetCommandBuffer()成员变量
    • 更新./docs/Design/下的FrameGraphAdvance.md
  • 2022/12/28 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • 修改./engine/core下的TSwapchain::InternalCreate()中的if (this->surface->GetMaxImageArrayLayers() > this->imageArrayLayers),更改成if (this->surface->GetMaxImageArrayLayers() < this->imageArrayLayers)原先是个Bug
  • 2022/12/29 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
  • 2022/12/30 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/framegraphTFrameGraph中增加struct TRenderPass成员,目前是实验性代码
    • ./engine/renderTContext中增加void BeginRenderPass(Turbo::FrameGraph::TRenderPass &renderPass);成员函数,目前是实验性代码
    • ./docs/Design/下新增FrameGraph.md,用于FrameGraph设计文档
  • 2022/12/31 设计架构

    • 更新./docs/Design/下的FrameGraph.md
  • 2023/1/1 设计架构

    • ./engine/framegraph/include/TFrameGraph.hpp中增加class TSubpass
    • ./engine/framegraphTFrameGraph::TSubpass增加std::vector<TResource> writes成员变量
    • ./engine/framegraphTFrameGraph::TSubpass增加std::vector<TResource> reads成员变量
    • ./engine/framegraphTFrameGraph::TSubpass增加TResource Write(TResource resource)成员函数
    • ./engine/framegraphTFrameGraph::TSubpass增加TResource Read(TResource resource)成员函数
    • ./engine/framegraphTFrameGraph::TRenderPass增加std::vector<TSubpass> subpasses成员变量
    • ./engine/framegraphTFrameGraph::TRenderPass增加void AddSubpass(const TSubpass &subpass)成员变量
  • 2023/1/2 设计架构

    • ./engine/framegraphTFrameGraph::TSubpass增加std::vector<TResource> GetWrites()成员函数
    • ./engine/framegraphTFrameGraph::TSubpass增加std::vector<TResource> GetReads()成员函数
    • ./engine/framegraphTFrameGraph::TSubpass增加std::vector<TSubpass> GetSubpasses()成员函数
    • ./engine/framegraphTFrameGraph::TSubpass增加friend class TFrameGraph友元类
    • ./engine/framegraphTFrameGraph::TRenderPass增加friend class TFrameGraph友元类
    • ./engine/framegraphTFrameGraph::TBuilder增加class TSubpass成员类,其作为TFrameGraph::TSubpass类的前端类或代理
    • ./engine/framegraphTFrameGraph::TBuilder增加TSubpass CreateSubpass()成员函数
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass增加TSubpass(TBuilder *builder, uint32_t index)构造函数
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass增加TTBuilder *builder = nullptr成员变量
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass增加uint32_t index成员变量
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass增加TResource Write(TResource resource)成员函数
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass增加TResource Read(TResource resource)成员函数
    • ./engine/framegraphTFrameGraph::TPassNode增加TRenderPass renderPass成员变量
    • ./engine/framegraphTFrameGraph::TPassNode增加TRenderPass GetRenderPass()成员函数
    • ./engine/framegraphTFrameGraph增加uint32_t TURBO_INVALID_SUBPASS_INDEX全局变量
    • 更新./samplesrameGraphSample增加int test3()对于新FrameGraph标准的测试代码
  • 2023/1/3 设计架构

    • 更新./docs/Design/下的FrameGraph.md
    • ./engine/framegraphTFrameGraph::TBuilder下的TResource Read(TResource resource)成员函数访问域从public改成private
    • ./engine/framegraphTFrameGraph::TBuilder下的TResource Write(TResource resource)成员函数访问域从public改成private
    • 更新./samplesrameGraphSample示例代码,适配到新的FrameGraph标准并移除原先的test2,并将test3改名成test2
    • ./engine/framegraphTFrameGraph::TRenderPass移除uint32_t testValue成员变量
    • ./engine/samplesRenderDesignTest移除TFrameGraph::TRenderPass::testValue有关代码
    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./asset/models/下增加fuxiii-2022.gltf模型
    • ./engine/framegraphTFrameGraph增加std::string ToMermaid()成员函数
  • 2023/1/4 设计架构

    • 更新./docs/Design/下的FrameGraph.md
    • ./engine/framegraphTFrameGraph更新std::string ToMermaid()成员函数
    • ./engine/render下增加TRenderPass.hTRenderPass.cpp文件
    • ./engine/render下增加TRenderPass
    • ./asset/models下增加SciFiHelmet模型
  • 2023/1/5 设计架构

    • ./engine/render下的RenderPass中增加TSubpass
    • ./engine/render下的TSubpass中增加std::vector<Turbo::Render::TColorImage> colors成员变量
    • ./engine/render下的TSubpass中增加std::vector<Turbo::Render::TImage> inputs成员变量
    • ./engine/render下的TSubpass中增加Turbo::Render::TDepthStencilImage depthStencil成员变量
    • ./engine/render下的TSubpass中增加TSubpass &AddColorAttachment(const Turbo::Render::TColorImage &colorImage)成员函数
    • ./engine/render下的TSubpass中增加const std::vector<Turbo::Render::TImage>& GetInputAttachments()成员函数
    • ./engine/render下的TSubpass中增加Turbo::Render::TDepthStencilImage GetDepthStencilAttachment()成员函数
    • ./engine/render下的TRenderPass中去除实验性代码
    • ./engine/render下的TRenderPass中增加std::vector<TSubpass> subpasses成员变量
    • ./engine/render下的TRenderPass中增加TRenderPass &AddSubpass(const Turbo::Render::TSubpass &subpass)成员函数
    • ./engine/render下的TRenderPass中增加const std::vector<Turbo::Render::TSubpass> &GetSubpasses()成员函数
    • ./engine/render下的TContext中增加void BeginRenderPass(Turbo::Render::TRenderPass &renderPass)成员函数
  • 2023/1/6 设计架构

    • ./engine/render下的TImage中增加对于Get*()成员函数的const修饰
    • ./engine/render下的TImage中增加bool IsValid()成员函数
    • ./engine/render下的TSubpass中增加Attachment时增加对于传入Image参数的有效性判断(Turbo::Render::TImage::IsValid()),有效则加入,无效则直接返回异常
    • ./engine/render下增加TPipeline.hTPipeline.cpp
    • ./engine/renderTPipeline中增加class TPipeline
    • ./engine/renderTPipeline中增加class TComputePipeline
    • ./engine/renderTPipeline中增加class TGraphicsPipeline
    • ./engine/render下增加TShader.hTShader.cpp
    • ./engine/renderTShader中增加class TShader
    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/renderTShader中增加class TVertexShader
    • ./engine/renderTShader中增加typedef enum TLanguage成员枚举
    • ./engine/renderTVertexShader中增加TVertexShader(TContext *context, TShader::TLanguage language, const std::string &code)构造函数
    • ./engine/renderTVertexShader中增加TVertexShader(TContext *context, size_t size, uint32_t *code)构造函数
    • ./engine/renderTShader中增加class TFragmentShader
    • ./engine/renderTFragmentShader中增加TFragmentShader(TContext *context, TShader::TLanguage language, const std::string &code)构造函数
    • ./engine/renderTFragmentShader中增加TFragmentShader(TContext *context, size_t size, uint32_t *code)构造函数
    • ./engine/renderTShader中增加class TComputeShader
    • ./engine/renderTComputeShader中增加TComputeShader(TContext *context, TShader::TLanguage language, const std::string &code)构造函数
    • ./engine/renderTComputeShader中增加TComputeShader(TContext *context, size_t size, uint32_t *code)构造函数
    • Turbo::Core层与Turbo::Render有同名头文件,会有冲突,使用Turbo::Core的头文件使用core/include/...,使用Turbo::Render的头文件使用render/include/...,同时修改CMakeList.txt中的相关设置
    • ./engine/renderTShader中增加如下,使得Shader必须通过new创建:
    TShader(TShader const &) = delete;
    TShader(TShader &&) = delete;
    TShader &operator=(TShader const &) = delete;
    TShader &operator=(TShader &&) = delete;
    • ./engine/renderTComputePipeline中增加TComputePipeline(Turbo::Render::TComputeShader *computeShader)构造函数
    • ./engine/renderTComputePipeline中增加Turbo::Render::TComputeShader* computeShader成员变量
  • 2023/1/7 设计架构

    • ./engine/renderTComputePipeline中增加TComputePipeline &SetComputeShader(Turbo::Render::TComputeShader *computeShader)成员函数
    • ./engine/renderTComputePipeline中移除TComputePipeline(Turbo::Render::TComputeShader *computeShader)构造函数
    • ./engine/renderTGraphicsPipeline中增加Turbo::Render::TVertexShader *vertexShader成员变量
    • ./engine/renderTGraphicsPipeline中增加Turbo::Render::TFragmentShader *fragmentShader成员变量
    • ./engine/renderTGraphicsPipeline中增加typedef enum TTopology成员枚举
    • ./engine/renderTGraphicsPipeline中增加TTopology topology成员变量
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetTopology(TTopology topology)成员函数
    • ./engine/renderTGraphicsPipeline中增加typedef enum TCullBits成员枚举
    • ./engine/renderTGraphicsPipeline中增加using TCull = uint32_t成员声明
    • ./engine/renderTGraphicsPipeline中增加bool primitiveRestartEnable成员变量
    • ./engine/renderTGraphicsPipeline中增加bool depthClampEnable成员变量
    • ./engine/renderTGraphicsPipeline中增加bool rasterizerDiscardEnable成员变量
    • ./engine/renderTGraphicsPipeline中增加TPolygon polygon成员变量
    • ./engine/renderTGraphicsPipeline中增加TCull cull成员变量
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetPrimitiveRestartEnable(bool primitiveRestartEnable);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthClampEnable(bool depthClampEnable);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetRasterizerDiscardEnable(bool rasterizerDiscardEnable);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetPolygon(TPolygon polygon);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetCull(TCull cull);成员函数
    • ./engine/renderTGraphicsPipeline中增加typedef enum TFront成员枚举
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetFront(TFront front)成员函数
    • ./engine/renderTGraphicsPipeline中增加bool depthBiasEnable成员变量
    • ./engine/renderTGraphicsPipeline中增加float depthBiasConstantFactor成员变量
    • ./engine/renderTGraphicsPipeline中增加float depthBiasClamp成员变量
    • ./engine/renderTGraphicsPipeline中增加float depthBiasSlopeFactor成员变量
    • ./engine/renderTGraphicsPipeline中增加float lineWidth成员变量
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthBiasEnable(bool depthBiasEnable);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthBiasConstantFactor(float depthBiasConstantFactor);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthBiasClamp(float depthBiasClamp);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthBiasSlopeFactor(float depthBiasSlopeFactor);成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetLineWidth(float lineWidth);成员函数
  • 2023/1/8 设计架构

    • ./engine/renderTGraphicsPipeline中增加typedef enum class TCompareOp成员枚举
    • ./engine/renderTGraphicsPipeline中增加typedef enum class TStencilOp成员枚举
    • ./engine/renderTGraphicsPipeline中增加typedef enum class TLogicOp成员枚举
    • ./engine/renderTGraphicsPipeline中增加typedef enum class TBlendFactor成员枚举
    • ./engine/renderTGraphicsPipeline中增加typedef enum class TBlendOp成员枚举
    • ./engine/renderTGraphicsPipeline中增加bool depthTestEnable = true成员变量
    • ./engine/renderTGraphicsPipeline中增加bool depthWriteEnable = true成员变量
    • ./engine/renderTGraphicsPipeline中增加TCompareOp depthCompareOp = TCompareOp::LESS_OR_EQUAL成员变量
    • ./engine/renderTGraphicsPipeline中增加bool depthBoundsTestEnable = false成员变量
    • ./engine/renderTGraphicsPipeline中增加bool stencilTestEnable = false成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp frontFailOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp frontPassOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp frontDepthFailOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TCompareOp frontCompareOp = TCompareOp::ALWAYS成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t frontCompareMask = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t frontWriteMask = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t frontReference = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp backFailOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp backPassOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TStencilOp backDepthFailOp = TStencilOp::KEEP成员变量
    • ./engine/renderTGraphicsPipeline中增加TCompareOp backCompareOp = TCompareOp::ALWAYS成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t backCompareMask = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t backWriteMask = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t backReference = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加float minDepthBounds = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加float maxDepthBounds = 0成员变量
    • ./engine/renderTGraphicsPipeline中增加bool logicOpEnable = false成员变量
    • ./engine/renderTGraphicsPipeline中增加TLogicOp logicOp = TLogicOp::NO_OP成员变量
    • ./engine/renderTGraphicsPipeline中增加bool blendEnable = false成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendFactor srcColorBlendFactor = TBlendFactor::ZERO成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendFactor dstColorBlendFactor = TBlendFactor::ZERO成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendOp colorBlendOp = TBlendOp::ADD成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendFactor srcAlphaBlendFactor = TBlendFactor::ZERO成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendFactor dstAlphaBlendFactor = TBlendFactor::ZERO成员变量
    • ./engine/renderTGraphicsPipeline中增加TBlendOp alphaBlendOp = TBlendOp::ADD成员变量
    • ./engine/renderTGraphicsPipeline中增加uint32_t patchControlPoints成员变量
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetPatchControlPoints(uint32_t patchControlPoints)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthTestEnable(bool depthTestEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthWriteEnable(bool depthWriteEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthCompareOp(TCompareOp depthCompareOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDepthBoundsTestEnable(bool depthBoundsTestEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilTestEnable(bool stencilTestEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontFailOp(TStencilOp frontFailOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontPassOp(TStencilOp frontPassOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontDepthFailOp(TStencilOp frontDepthFailOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontCompareOp(TCompareOp frontCompareOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontCompareMask(uint32_t frontCompareMask)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontWriteMask(uint32_t frontWriteMask)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilFrontReference(uint32_t frontReference)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackFailOp(TStencilOp backFailOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackPassOp(TStencilOp backPassOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackDepthFailOp(TStencilOp backDepthFailOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackCompareOp(TCompareOp backCompareOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackCompareMask(uint32_t backCompareMask)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackWriteMask(uint32_t backWriteMask)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetStencilBackReference(uint32_t backReference)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetMinDepthBounds(float minDepthBounds)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetMaxDepthBounds(float maxDepthBounds)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetLogicOpEnable(bool logicOpEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetLogicOp(TLogicOp logicOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetBlendEnable(bool blendEnable)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetSrcColorBlendFactor(TBlendFactor srcColorBlendFactor)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDstColorBlendFactor(TBlendFactor dstColorBlendFactor)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetColorBlendOp(TBlendOp colorBlendOp)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetSrcAlphaBlendFactor(TBlendFactor srcAlphaBlendFactor)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetDstAlphaBlendFactor(TBlendFactor dstAlphaBlendFactor)成员函数
    • ./engine/renderTGraphicsPipeline中增加TGraphicsPipeline &SetAlphaBlendOp(TBlendOp alphaBlendOp)成员函数
    • ./docs/Issue.md中增加TGraphicsPipeline对于VkPipelineTessellationStateCreateInfo不支持的待解决问题
  • 2023/1/9 设计架构

    • ./engine/renderTContext中增加void BindPipeline(const TComputePipeline *computePipeline)成员函数
    • ./engine/renderTContext中增加void BindPipeline(const TGraphicsPipeline *graphicsPipeline)成员函数
    • ./README.md下增加Modular章节,用于描述Turbo架构中的各个模块
    • 更新./docs/Design/下的FrameGraphAdvance.md
  • 2023/1/10 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/coreTFence.h中增加class TFences
    • ./engine/coreTFences中增加std::map<TDevice *, std::vector<TFence *>> fenceMap成员变量
    • ./engine/coreTFences中增加void Add(TFence *fence)成员函数
    • ./engine/coreTFences中增加bool Wait(uint64_t timeout)成员函数
    • ./engine/coreTFence中增加TDevice *GetDevice()成员函数
    • ./engine/renderTContext中增加void Flush()成员函数
    • ./engine/renderTContext中增加bool Wait(uint64_t timeout)成员函数
    • ./engine/renderTContext.h中增加typedef struct TCommandBuffer结构体
    • ./engine/renderTContextTurbo::Core::TCommandBuffer *commandBuffer成员变量改为Turbo::Render::TCommandBuffer currentCommandBuffer
    • ./engine/renderTContextTurbo::Core::TCommandBuffer *GetCommandBuffer()成员变量改为Turbo::Render::TCommandBuffer GetCommandBuffer()
    • ./engine/renderTContext中增加std::vector<Turbo::Render::TCommandBuffer> commandBuffers成员变量
    • ./docs/下增加FAQ.md用于记录常见问题
  • 2023/1/11 设计架构

    • ./engine/framegraphTVirtualResourceProxyvirtual void Create()成员函数增加void *allocator函数参数
    • ./engine/framegraphTVirtualResourceProxyvirtual void Destroy()成员函数增加void *allocator参数
    • ./engine/framegraphTResourceProxyvirtual void Create()成员函数增加void *allocator函数参数
    • ./engine/framegraphTResourceProxyvirtual void Destroy()成员函数增加void *allocator参数
    • ./engine/framegraphTFrameGraphvoid Execute(void *context = nullptr)成员函数增加void *allocator参数
    • 更新./docs/Design/下的FrameGraphAdvance.md
    • 更新./docs/Design/下的FrameGraph.md
  • 2023/1/12 设计架构

    • 更新./docs/Design/下的FrameGraph.md
    • ./engine/framegraphTSubpass中增加std::vector<TResource> inputs成员变量
    • ./engine/framegraphTSubpass中增加void Input(TResource resource)成员函数
    • ./engine/framegraphTSubpass中增加std::vector<TResource> GetInputs()成员函数
    • ./engine/framegraphTResource中增加bool isInput成员变量
    • ./engine/framegraphTFrameGraph::TBuilder中增加TResource Input(TResource resource)成员函数
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass::Read(TResource resource)中增加resource.isInput = false设置代码
    • ./engine/framegraphTFrameGraph::TBuilder::TSubpass::Input(TResource resource)中增加resource.isInput = true设置代码
    • ./engine/framegraphTurbo::FrameGraph::TPassNode::IsRead(TResource resource)下增加重复性isInput检测
    • ./engine/framegraphTurbo::FrameGraph::TFrameGraph::ToMermaid()下增加对input资源的解析
    • ./engine/framegraphTurbo::FrameGraph::TFrameGraph::ToMermaid()struct linkStyle下增加enum Type成员枚举,并增加Type type成员变量,移除bool isWrite成员变量
    • ./engine/framegraphTurbo::FrameGraph::TPassNode::AddRead(...)中移除assert(!this->IsCreate(resource) && !this->IsWrite(resource))判断
    • 更新./samplesFrameGraphSample示例
  • 2023/1/13 设计架构

    • 更新./samples下的VulkanTest.cpp
  • 2023/1/14 设计架构

    • ./engine/coreTurbo::Core::TGraphicsPipeline下增加兼容VkPipelineCache的构造函数,目前为测试研发
  • 2023/1/15 设计架构

    • ./engine/core下增加TPipelineCache.hTPipelineCache.cpp
    • ./engine/coreTPipelineCache中增加class Turbo::Core::TPipelineCache
    • ./engine/coreTPipelineCache中增加TDevice *device成员变量
    • ./engine/coreTPipelineCache中增加VkPipelineCache vkPipelineCache成员变量
    • ./engine/coreTPipelineCache中增加size_t size成员变量
    • ./engine/coreTPipelineCache中增加void *data成员变量
    • ./engine/coreTPipelineCache中增加void InternalCreate()成员函数
    • ./engine/coreTPipelineCache中增加void InternalDestroy()成员函数
    • ./engine/coreTPipelineCache中增加TPipelineCache(TDevice *device)构造函数
    • ./engine/coreTPipelineCache中增加TPipelineCache(TDevice *device, size_t size, void *data)构造函数
    • ./engine/coreTPipelineCache中增加~TPipelineCache()析构函数
    • ./engine/coreTPipelineCache中增加VkPipelineCache GetVkPipelineCache()成员函数
    • ./engine/coreTPipelineCache中增加size_t GetSize()成员函数
    • ./engine/coreTPipelineCache中增加TResult GetData(size_t size, void *dst)成员函数
    • ./engine/coreTPipelineCache中增加std::string ToString()成员函数
    • ./engine/coreTPipelineCache中增加uint32_t GetHeaderSize()成员函数
    • ./engine/coreTPipelineCache中增加enum class TPipelineCacheHeaderVersion枚举
    • ./engine/coreTPipelineCache中增加TPipelineCacheHeaderVersion GetHeaderVersion()成员函数
    • ./engine/coreTPipelineCache中增加TVendorInfo GetVendor()成员函数
    • ./engine/coreTPipelineCache中增加uint32_t GetDeviceID()成员函数
    • ./engine/coreTPipelineCache中增加std::vector<uint8_t> GetUUID()成员函数
  • 2023/1/16 设计架构

    • ./engine/coreTPipeline.h中构造函数,增加对TPipelineCache的使用
    • ./engine/coreTPipeline.h中增加TPipelineCache *pipelineCache成员变量
    • ./engine/coreTPipeline.h中增加TPipelineCache *GetPipelineCache()成员函数
    • ./engine/coreTGraphicsPipeline.h中移除VkPipelineCache vkPipelineCache的相关参数和成员,改为使用TPipelineCache
    • ./engine/coreTComputePipeline中增加TComputePipeline(TPipelineCache *pipelineCache, TComputeShader *computeShader)构造函数
    • ./engine/coreTComputePipeline中更新TComputePipeline::InternalCreate()成员函数,适配TPipelineCache来创建TComputePipeline
    • 更新./samples下的VulkanTest.cpp
    • 移除./engine/coreTPipelineCache.cpp中莫名其妙的头文件,应该是clangd的自动头文件补全搞的
    • 移除./engine/coreTPipelineCache.cpp#include <basetsd.h>头文件,应该是clangd的自动头文件补全搞的
    • 移除./engine/coreTFrameGraph.cpp#include <basetsd.h>头文件,应该是clangd的自动头文件补全搞的
    • 移除./samplesVulkanTest.cpp中移除#include <vcruntime.h>#include <vcruntime_string.h>头文件,应该是clangd的自动头文件补全搞的
    • ./engine/coreTObject.h中增加#include <string.h>头文件memcpy,在此头文件声明
  • 2023/1/17 设计架构

    • 更新./docs/Design/下的FrameGraph.md
  • 2023/1/18 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • 更新./.gitmodules下的thirdparty/glm库链接
    • 更新./docs下的FAQ.md
    • ./engine/framegraphTResources中增加Turbo::FrameGraph::TRenderPass GetRenderPass() const成员函数
    • 更新./samples下的RenderDesignTest.cpp
  • 2023/1/19 设计架构

    • ./engine/framegraphTRenderPass中增加Turbo::FrameGraph::TSubpass GetSubpass(size_t index)成员函数
    • ./engine/framegraphTSubpass中增加TResource GetWrite(size_t index)成员函数
    • ./engine/framegraphTSubpass中增加TResource GetRead(size_t index)成员函数
    • ./engine/framegraphTSubpass中增加TResource GetInput(size_t index)成员函数
    • ./engine/framegraphTNodeHandle中增加bool IsValid()成员函数
    • ./engine/renderTImageuint32_t GteHeight() const成员函数,更改成uint32_t GetHeight() const。之前拼写错误
  • 2023/1/21 设计架构

    • ./engine/coreTBufferMap函数中有,当想要映射内存时,目前使用的是用户创建TBuffer时,是否指定了HOST_ACCESS_RANDOM或者HOST_ACCESS_SEQUENTIAL_WRITE标志位,如果设置了该标志位说明内存可以进行映射,但是某些移动设备(手机或笔记本等平台端)上的内存是CPUGPU共存、共享的。换句话说当你在上层创建一个GPU端的内存(此时用户指定的是DEDICATED_MEMORY),在底层也许是CPUGPU共享的内存,所以此时根据用户是否指定了HOST_ACCESS_RANDOMHOST_ACCESS_SEQUENTIAL_WRITE标志位来判断是否可以Map是不合理的,应该查看分配的内存是否有在host端能够访问,能访问将返回映射的内存指针,反之则返回nullptr,但是当前VulkanMemoryAllocator中对于内存分配,如果没有使用Host端的相关标志位(HOST_ACCESS_RANDOM或者HOST_ACCESS_SEQUENTIAL_WRITE),在VulkanMemoryAllocator中都被认为是不能进行内存映射的,所以需要在Turbo::Render::TBuffer::Copy(...)中增加额外判断,判断内存是否支持映射
    • ./engine/coreTBuffer中增加bool IsMappable()成员函数
    • ./engine/coreTBufferCopy函数中增加对this->buffer->IsMappable()的判断
    • ./engine/coreTImage中增加bool IsMappable()成员函数
  • 2023/1/22 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/renderTContext中增加class TRenderPassPool
    • ./engine/renderTContextclass TRenderPassPool下增加class TRenderPassProxy
  • 2023/1/23 设计架构

    • 更新./docs/Design/下的FrameGraphAdvance.md
    • ./engine/renderTRenderPassPoolTRenderPassProxy增加void Create(Turbo::Render::TRenderPass &renderPass)成员函数
    • ./engine/renderTRenderPassPoolTRenderPassProxy增加void Destroy()成员函数
    • ./engine/renderTRenderPassPoolTRenderPassProxy增加friend class TRenderPassPool友元类
    • ./engine/renderTRenderPassPoolFind(...)函数更改成TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)
    • ./engine/renderTRenderPassPool中增加TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)成员函数
    • ./engine/renderTRenderPassPool中增加void Free(Turbo::Render::TRenderPass &renderPass)成员函数
    • ./engine/renderTRenderPassPoolTRenderPassProxy增加bool IsValid()成员函数
  • 2023/1/26 设计架构

    • ./engine/renderTRenderPassPool更新完善Find(...)函数算法
    • ./engine/renderTImage.h中增加typedef enum TSampleCountBits
    • ./engine/renderTImage.h中增加using TSampleCounts = uint32_t
    • ./engine/renderTImage中增加TSampleCountBits GetSampleCountBits() const成员函数,目前只支持Turbo::Render::TSampleCountBits::SAMPLE_1_BIT
    • ./engine/renderTContext.hTRenderPassPool构造函数增加TContext *context参数
    • ./engine/renderTContext.hTRenderPassPool::TRenderPassProxyCreate函数增加TContext *context参数
    • ./engine/renderTContext.hTRenderPassPool::TRenderPassProxy中更新完善Create函数
    • 更新./docs/Design/下的FrameGraphAdvance.md
  • 2023/1/27 设计架构

    • ./engine/renderTImage中增加friend class TRenderPassPool友元类
    • ./engine/renderTContext.hTRenderPassPoolTRenderPassProxy中,更新完善Create(...)函数
    • ./engine/renderTContext.hTRenderPassPool中,更新完善~TRenderPassPool()析构函数
    • 更新./samplesRenderDesignTest示例
  • 2023/1/28 设计架构

    • 更新./samplesVolumetricCloud示例中的对于./asset/shaders/volumetric_cloud.frag中对于高频细节纹理使用的算法
  • 2023/1/31 设计架构

    • 有关./samplesVolumetricCloud示例中对于体积云光照渲染,总是渲染不出满意的效果。国外常见的体积云渲染的论文、文章之类的也零零散散的看了,大部分的文章套路就是,先把一长串光照传输方程列出来,讲讲朗伯-比尔定律,讲讲Phase相函数(米氏散射,H-G散射,瑞利散射,几何散射等等),讲讲内散射、外散射、吸收以及消亡之间的关系,略过了大量的细节,到后文的相关实现,更是略之又略(比如寒霜引擎的那片文章,散射、外散射、吸收以及消亡系数如何计算并没有说明,有的文章直接拿采样密度作为消亡系数,等等很多问题),而且不同文章都有各自的实现(特别是计算采样点到太阳之间的光照,一个人一个写法),很难获得一个统一的、较明确的实现原理和过程(说白了就是,文章的实现和理论有时并不是一一对应的),这就会导致看的越多越迷惑(只能说大致相同,落到细节疑问百出),所以我尝试将Production Volume Rendering SIGGRAPH 2017 Course文章(该文章较理论化,原文放到了./docsvolumePaper.pdf)翻译到./docs/VolumetricCloud.md文档中(光照章节),希望在边学边翻译的过程中能解决之前的疑问吧
    • 更新./docsVolumetricCloud.md文档
  • 2023/2/1 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/2 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/3 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/4 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/6 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/7 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/8 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/9 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/10 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/renderTImage.hTImage中增加virtual void CreateImageView(Turbo::Core::TImage *image)函数
    • ./engine/renderTImage.hTImage::Create(...)中增加对virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)成员函数的调用
    • ./engine/renderTTexture2D中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)函数
    • ./engine/renderTTexture3D中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)函数
    • ./engine/renderTDepthTexture2D中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)函数
    • ./engine/renderTImageDestroy成员函数中进行ImageView的资源回收
    • ./engine/renderTImageIsValid()成员函数中增加对ImageView的判断
    • 更新./docsVolumetricCloud.md文档
  • 2023/2/11 设计架构

    • ./engine/renderTRenderPass.hTRenderPass中增加Turbo::Core::TRenderPass *renderPass = nullptr成员变量
    • ./engine/renderTRenderPass.hTRenderPass中增加friend class TRenderPassPool;友元类
    • ./engine/renderTContext中将TRenderPassProxy移除
    • ./engine/renderTContext中将std::vector<TRenderPassProxy> renderPassProxies更改成std::vector<TRenderPass> renderPasses
    • ./engine/renderTContext中将TRenderPassProxy中的void Create(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)void Destroy()移动到TRenderPassPool中,并重命名为void CreateRenderPass(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)void DestroyRenderPass(Turbo::Render::TRenderPass &renderPass)
    • ./engine/renderTContext中将TRenderPassPool中移除void DestroyRenderPass(Turbo::Render::TRenderPass &renderPass)成员函数
    • ./engine/renderTContext中将TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)更改成bool Find(Turbo::Render::TRenderPass &renderPass)
    • ./engine/renderTContext中将TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)更改成bool Allocate(Turbo::Render::TRenderPass &renderPass)
    • ./engine/renderTRenderPass中增加bool IsValid()函数
  • 2023/2/13 设计架构

    • ./engine/renderTContext.h中增加TFrameBufferPool
    • ./engine/renderTContext.hTRenderPassPool中的成员函数void CreateRenderPass(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)修改成void CreateRenderPass(Turbo::Render::TRenderPass &renderPass),其中的Turbo::Render::TContext *contextTRenderPassPool中存在对应的成员变量
    • ./engine/renderTContext.hTRenderPassPool中的成员变量std::vector<TRenderPass> renderPasses;修改成std::vector<TRenderPass> renderPasses;
    • ./engine/renderTRenderPass.hTRenderPass中增加Turbo::Core::TFramebuffer *framebuffer成员变量
  • 2023/2/14 设计架构

    • 修改./engine/coreTPhysicalDeviceGetMaxImageExtent()中增加当格式不被支持时的判断
    • 修改./engine/coreTPhysicalDeviceGetMaxImageMipLevels()中增加当格式不被支持时的判断
    • 修改./engine/coreTPhysicalDeviceGetMaxImageArrayLayers()中增加当格式不被支持时的判断
    • 修改./engine/coreTPhysicalDeviceGetSupportImageSampleCounts()中增加当格式不被支持时的判断
    • 修改./engine/coreTPhysicalDeviceGetMaxImageResourceSize()中增加当格式不被支持时的判断
    • ./engine/coreTPhysicalDevice中增加bool IsFormatSupportImage(...)成员函数
    • ./engine/coreTImageInternalCreate()中增加对于格式是否支持的判断
    • ./engine/renderTRenderPass中增加friend class TFramebufferPool使得TFramebufferPool在分配之后将结果刷新到TRenderPass
    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/coreTFramebuffer中增加std::vector<TImageView *> GetAttachments()成员函数
    • ./engine/renderTRenderPass下增加std::vector<Turbo::Render::TImage> GetAttachments();成员函数
    • ./engine/renderTImage下增加bool operator ==(const TImage& image)成员函数
    • ./engine/renderTImage下增加bool operator !=(const TImage& image)成员函数
    • ./engine/renderTImage下增加friend class TFramebufferPool友元类
    • ./engine/renderTContext.h下的TFramebufferPool基本完成
  • 2023/2/15 设计架构

    • ./engine/renderTRenderPassIsValid()成员函数,增加对于Turbo::Core::TFramebuffer *framebuffer成员变量的判断
    • ./engine/renderTRenderPassPool中增加TFramebufferPool *framebufferPool;成员变量,增加对于Turbo::Core::TFramebuffer的分配
    • ./engine/renderTRenderPassPool中增加Allocate(...)成员函数,增加对于Turbo::Core::TFramebuffer的分配
    • ./engine/renderTContext中增加TRenderPassPool *renderPassPool成员变量,并在构造函数和析构函数中进行创建和销毁
    • ./engine/renderTRenderPass中增加friend class TContext;友元类
    • ./engine/renderTContext中更新完善BeginRenderPass(...)成员函数
    • ./samples下增加PushConstantTest例子,用于测试VulkanPush Constant
    • ./engine/renderTContext中增加void EndRenderPass();成员函数
    • ./engine/renderTRenderPass中增加bool IsEmpty() const成员函数
    • ./engine/renderTSubpass中增加bool IsEmpty() const成员函数
  • 2023/2/16 设计架构

    • ./engine/renderTContextBeginRenderPass(...)成员函数增加bool返回结果
    • ./engine/renderTImageCreate()成员函数中增加LayoutUNDEFINED转成GENERAL的测试代码
    • ./engine/renderTContext中增加void ClearTexture(Turbo::Render::TTexture2D &texture2D, float r = 0, float g = 0, float b = 0, float a = 0)成员函数
    • ./engine/renderTImage中增加friend class TContext友元类
    • ./engine/renderTContext构造函数中,修改对于Window系统中VK_KHR_WIN32_SURFACES扩展对应错误的Bug
  • 2023/2/17 设计架构

    • ./engine/renderTContext中增加Turbo::Core::TImage *GetTextureImage(Turbo::Render::TTexture2D texture2d)成员函数,该函数仅用于测试,请谨慎调用
    • ./samples下增加RenderAndFrameGraph例子,用于测试使用FrameGraph来驱动Turbo进行绘制。
    • ./samplesVolumetricCloud例子,中用于体积云的着色器文件对应目录被误改了,修正
  • 2023/2/18 设计架构

    • ./samples下增加ClearColorTest例子,用于测试Vulkan清空颜色测试
  • 2023/2/19 设计架构

    • 更新./docsVolumetricCloud.md文档
  • 2023/2/20 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/21 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/22 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/renderTBuffer.h中增加TVertexBuffer
    • ./engine/renderTBuffer.hTVertexBuffer类中声明typedef enum TRate枚举
    • ./engine/renderTBuffer.hTVertexBuffer类中声明class TAttribute
    • ./engine/renderTBuffer.hTVertexBuffer类中声明std::vector<TVertexBuffer::TAttribute> attributes成员变量
    • ./engine/renderTBuffer.hTVertexBuffer类中声明struct Descriptor成员结构
    • ./engine/renderTBuffer.hTVertexBuffer类中声明uint32_t stride成员变量
    • ./engine/renderTBuffer.hTVertexBuffer类中声明TRate rate成员变量
    • ./engine/renderTBuffer.hTVertexBuffer类中声明void Create(const std::string &name, const Descriptor &descriptor, void *allocator)成员函数
    • ./engine/renderTBuffer.hTVertexBuffer类中声明TAttributeID AddAttribute(Turbo::Render::TFormat format, uint32_t offset)成员函数
    • ./engine/renderTBuffer.hTVertexBuffer类中声明TAttribute GetAttribute(TAttributeID id)const成员函数
  • 2023/2/23 设计架构

    • ./engine/renderTBuffer.hTVertexBuffer类中声明uint32_t GetStride() const成员函数
    • ./engine/renderTBuffer.hTVertexBuffer类中声明TRate GetRate()const成员函数
  • 2023/2/24 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/renderTFormat.h中增加R32_SFLOAT成员枚举
    • ./engine/renderTFormat.h中增加R32G32_SFLOAT成员枚举
    • ./engine/renderTFormat.h中增加R32G32B32_SFLOAT成员枚举
    • ./engine/renderTFormat.h中增加R32G32B32A32_SFLOAT成员枚举
    • ./engine/renderTContext.hTContext增加void BindVeretxAttribute(const Turbo::Render::TVertexBuffer &vertexBuffer, Turbo::Render::TAttributeID attributeID, uint32_t location)成员函数
    • ./engine/renderTContext.hTContext增加std::vector<Turbo::Core::TVertexBinding *> vertexBindings成员变量,用于管理和暂存绑定的顶点信息
    • ./engine/renderTBuffer.hTBuffer增加bool IsValid() const成员函数
    • ./engine/renderTBuffer.hTBuffer增加friend class TContext;友元类
    • ./engine/renderTContext.hTContext增加std::vector<Turbo::Core::TBuffer *> vertexBuffers成员变量,用于管理和暂存绑定的顶点缓冲
    • ./engine/renderTBuffer.hTVertexBufferTAttribute增加bool IsValid() const;成员函数
    • 修改./engine/coreTVertexBindingAddAttribute(...)成员函数的算法(防止重复的location,如果有重复的location,将对应的属性覆盖刷新)
    • ./engine/coreTVertexAttribute中增加void SetLocation(uint32_t location)成员函数
    • ./engine/coreTVertexAttribute中增加void SetFormatType(TFormatType formatType)成员函数
    • ./engine/coreTVertexAttribute中增加void SetOffset(uint32_t offset)成员函数
  • 2023/2/25 设计架构

    • 修正./samplesRenderAndFrameGraph.cpp示例中,由于Layout转换Bug导致什么也不显示。
  • 2023/2/26 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/27 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/2/28 设计架构

    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/renderTBuffer.h中新增TIndexBuffer类,继承自Turbo::Render::TBuffer。用于代表索引缓冲
  • 2023/3/1 设计架构

    • ./engine/renderTBuffer.hTIndexBuffer类中增加void Copy(const std::vector<uint32_t>& indexs)成员函数
    • ./engine/renderTBuffer.hTIndexBuffer类中增加void Copy(const std::vector<uint16_t>& indexs)成员函数
    • ./engine/renderTBuffer.h中增加TUniformBuffer
  • 2023/3/2 设计架构

    • ./engine/renderTBuffer.hTUniformBuffer类增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)成员函数
    • ./engine/renderTBuffer.hTUniformBuffer类增加void Copy(const T &uniform)成员函数
  • 2023/3/3 设计架构

    • ./engine/renderTContext.hTContext类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture2D> &texture2Ds)成员函数
    • ./engine/renderTContext.hTContext类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture2D &texture2D)成员函数
    • ./engine/renderTContext.hTContext类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)成员函数
    • ./engine/renderTContext.hTContext类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture3D &texture3D)成员函数
    • ./engine/renderTContext.hTContext类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)成员函数
    • ./engine/renderTContext.hTContext类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)成员函数
    • ./engine/renderTContext.hTContext类中增加using TSetID = uint32_t成员声明
    • ./engine/renderTContext.hTContext类中增加using TBindingID = uint32_t成员声明
    • ./engine/renderTContext.hTContext类中增加typedef enum class TDescriptorMapType成员枚举
    • ./engine/renderTContext.hTContext类中增加typedef struct TDescriptorID成员结构体声明
    • ./engine/renderTContext.hTContext类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TBuffer *>, TDescriptorID> uniformBufferMap成员变量
    • ./engine/renderTContext.hTContext类中增加std::map<TDescriptorID, std::vector<std::pair<Turbo::Core::TImageView *, Turbo::Core::TSampler *>>, TDescriptorID> combinedImageSamplerMap成员变量
    • ./engine/renderTContext.hTContext类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TImageView *>, TDescriptorID> sampledImageMap成员变量
    • ./engine/renderTContext.hTContext类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TSampler *>, TDescriptorID> samplerMap成员变量
    • ./engine/renderTContext.hTContext类中增加std::map<TSetID, std::map<TBindingID, TDescriptorMapType>> descriptorMap成员变量
  • 2023/3/5 设计架构

    • ./engine/renderTContext.hTContext类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture2D &texture2D)成员函数
    • ./engine/renderTContext.hTContext类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)成员函数
    • ./engine/renderTContext.hTContext类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture3D &texture3D)成员函数
    • ./engine/renderTContext.hTContext类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)成员函数
    • ./engine/renderTContext.hTContext类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)成员函数
    • 更新./docs/DesignFrameGraphAdvance.md文档
    • ./engine/render下增加TSampler.hTSampler.cpp用于表示Sampler
    • ./engine/renderTSampler.hTSampler类中增加typedef enum class TFilter成员枚举
    • ./engine/renderTSampler.hTSampler类中增加typedef enum class TMipmapMode成员枚举
    • ./engine/renderTSampler.hTSampler类中增加typedef enum class TAddressMode成员枚举
    • ./engine/renderTSampler.hTSampler类中增加Turbo::Core::TSampler *sampler = nullptr成员变量
    • ./engine/renderTSampler.hTSampler类中增加struct Descriptor成员声明
    • ./engine/renderTSampler.hTSampler类中增加friend class TContext友元类
    • ./engine/renderTSampler.hTSampler类中增加void *allocator = nullptr成员变量
    • ./engine/renderTSampler.hTSampler类中增加Turbo::Core::TSampler *sampler = nullptr成员变量
    • ./engine/renderTSampler.hTSampler类中增加Descriptor descriptor成员变量
    • ./engine/renderTSampler.hTSampler类中增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)成员函数
    • ./engine/renderTSampler.hTSampler类中增加void Destroy(void *allocator)成员函数
    • ./engine/renderTSampler.hTSampler类中增加bool IsValid() const成员函数
  • 2023/3/6 设计架构

    • ./engine/renderTResourceAllocator.hTResourceAllocator类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)成员函数
    • ./engine/renderTResourceAllocator.hTResourceAllocator类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)成员函数
    • ./engine/renderTContext.hTContext类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)成员函数
    • ./engine/renderTContext.hTContext类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)成员函数
    • ./engine/renderTSampler.hTSampler类中更新void Create(const std::string &name, const Descriptor &descriptor, void *allocator)成员函数
    • ./engine/renderTSampler.hTSampler类中更新void Destroy(void *allocator)成员函数
    • 更新./docs/DesignFrameGraphAdvance.md文档
  • 2023/3/7 设计架构

    • ./engine/renderTContext.h中增加TGraphicsPipelinePool
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加std::map<Turbo::Core::TRenderPass *, std::map<uint32_t /*subpass*/, std::vector<Turbo::Core::TGraphicsPipeline *>>> graphicsPipelineMap成员变量
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加bool Allocate(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)成员函数
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加bool Find(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)成员函数
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加void CreateGraphicsPipeline(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)成员函数
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加void Free(Turbo::Render::TGraphicsPipeline &graphicsPipeline)成员函数
    • ./engine/renderTRenderPass.hTRenderPass类中增加friend class TGraphicsPipelinePool友元类
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加friend class TGraphicsPipelinePool友元类
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加Turbo::Core::TGraphicsPipeline *graphicsPipeline = nullptr成员变量
  • 2023/3/8 设计架构

    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加TContext *context成员变量
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加TGraphicsPipelinePool(TContext *context)构造函数
    • ./engine/renderTContext.hTContext类中增加std::vector<Turbo::Core::TVertexBinding *> GetVertexBindings()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加Turbo::Render::TVertexShader *GetVertexShader()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加Turbo::Render::TFragmentShader *GetFragmentShader()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TTopology GetTopology()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetPrimitiveRestartEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetPatchControlPoints()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetDepthClampEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetRasterizerDiscardEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TPolygon GetPolygon()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TCull GetCull()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TFront GetFront()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetDepthBiasEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetDepthBiasConstantFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetDepthBiasClamp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetDepthBiasSlopeFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetLineWidth()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetDepthTestEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetDepthWriteEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TCompareOp GetDepthCompareOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetDepthBoundsTestEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetStencilTestEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilFrontFailOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilFrontPassOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilFrontDepthFailOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TCompareOp GetStencilFrontCompareOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilFrontCompareMask()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilFrontWriteMask()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilFrontReference()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilBackFailOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilBackPassOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TStencilOp GetStencilBackDepthFailOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TCompareOp GetStencilBackCompareOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilBackCompareMask()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilBackWriteMask()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加uint32_t GetStencilBackReference()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetMinDepthBounds()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加float GetMaxDepthBounds()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetLogicOpEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TLogicOp GetLogicOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加bool GetBlendEnable()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendFactor GetSrcColorBlendFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendFactor GetDstColorBlendFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendOp GetColorBlendOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendFactor GetSrcAlphaBlendFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendFactor GetDstAlphaBlendFactor()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TBlendOp GetAlphaBlendOp()成员函数
    • ./engine/renderTPipeline.hTGraphicsPipeline类中增加TGraphicsPipeline友元类
    • ./engine/renderTShader.hTComputeShader类中增加Turbo::Core::TComputeShader * GetComputeShader()成员函数
    • ./engine/renderTShader.hTVertexShader类中增加Turbo::Core::TVertexShader * GetVertexShader()成员函数
    • ./engine/renderTShader.hTFragmentShader类中增加Turbo::Core::TFragmentShader * GetFragmentShader()成员函数
    • ./engine/renderTContext.hTContext类中增加void Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)成员函数
    • ./engine/renderTContext.hTGraphicsPipelinePool类中增加void GC()成员函数
    • ./engine/renderTContext.hTFramebufferPool类中增加void GC()成员函数
    • ./engine/renderTContext.hTRenderPassPool类中增加void GC()成员函数
    • ./engine/renderTContext.h中增加void GC()成员函数
    • ./engine/renderTContext.h中增加TGraphicsPipelinePool *graphicsPipelinePool成员变量
    • ./engine/renderTContext.h中增加Turbo::Render::TGraphicsPipeline currentGraphicsPipeline成员变量
    • ./engine/renderTContext.h中增加Turbo::Render::TRenderPass currentRenderPass成员变量
    • ./engine/renderTContext.h中增加uint32_t currentSubpass成员变量
  • 2023/3/9 设计架构

    • ./engine/coreTShader.hTShader类中增加对于DirStackFileIncluder的使用,使得Turbo支持解析带有#include的着色器代码
    • ./engine/coreTShader.hTVertexShader类构造函数增加const std::vector<std::string>& includePaths形参,用于将着色器#include文件路径传入进行解析
    • ./engine/coreTShader.hTFragmentShader类构造函数增加const std::vector<std::string>& includePaths形参,用于将着色器#include文件路径传入进行解析
    • ./engine/coreTShader.hTComputeShader类构造函数增加const std::vector<std::string>& includePaths形参,用于将着色器#include文件路径传入进行解析
    • ./samples下增加ShaderIncludeTest示例,用于测试着色器的#include特性
  • 2023/3/10 设计架构

    • ./samples下增加GreenFieldDiorama示例,用于测试多通道,颜色附件,纹理采样,着色器#include
  • 2023/3/13 设计架构

    • 修正./engine/renderTRenderPass类中GetAttachments()对于深度模板纹理的信息收集Bug
    • 修正./engine/renderTContext类中BindVeretxAttribute()对于顶点绑定索引的计算错误Bug
    • 修正./engine/renderTRenderPassPool类中Find()对于深度模板附件未对空指针进行检查Bug
    • ./samples下增加PureHelloTriangleAndFrameGraph示例,用于测试基于FrameGraph驱动Turbo绘制一个纯三角形
  • 2023/3/14 设计架构

    • 修正./samplesPureHelloTriangleAndFrameGraph示例,在改变窗口大小时导致的VkImageView无效的Bug,该Bug的原因是一帧结束,并且当窗口大小改变时没有及时回收FrameBuffer的资源
  • 2023/3/15 设计架构

    • ./docs/Design下增加Core.md文档。用于记录Turbo核心的相关设计
    • 尝试解决内存泄漏Bug
  • 2023/3/16 设计架构

    • 尝试解决内存泄漏Bug
    • 经过多次测试和探索,内存泄漏位于vkCreatePipelineLayoutvkDestroyPipelineLayout函数内部,而这一部分属于显卡驱动范畴,大概率是GPU驱动Bug
  • 2023/3/17 设计架构

    • 确定vkCreatePipelineLayoutvkDestroyPipelineLayout发生的内存泄漏是NVIDIA GPU驱动BugGame Ready Driver驱动版本为531.29发布日期为2023/03/14
    • 修正添加./engine/coreTDescriptorSetLayout类中~TDescriptorSetLayout()成员函数对于Turbo::Core::TNaNDescriptor资源内存的释放回收。
  • 2023/3/19 设计架构

    • ./samples下增加VulkanDynamicRenderingTest示例,用于测试VulkanDynamic Rendering特性
    • ./engine/coreTExtensionInfoTExtensionType增加VK_KHR_DYNAMIC_RENDERING扩展
    • ./engine/coreTExtensionInfoTAllExtensionNames增加VK_KHR_dynamic_rendering名称
    • 更新./docs/Design/Core.md文档
  • 2023/3/20 设计架构

    • 更新./docs/Design/Core.md文档
    • ./engine/core下的TPhysicalDeviceInfo类中的TPhysicalDeviceFeatures更改成VkPhysicalDeviceFeatures
    • ./engine/core下的TPhysicalDevice类中的TPhysicalDeviceFeatures GetDeviceFeatures()更改成VkPhysicalDeviceFeatures GetDeviceFeatures()
    • ./engine/core下的TCore.h中移除typedef VkPhysicalDeviceFeatures TPhysicalDeviceFeatures声明
    • ./engine/core下的TPhysicalDevice.h中增加class TPhysicalDeviceFeatures类型,内部增加如下声明:
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool geometryShader成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool tessellationShader成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool sampleRateShading成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool depthClamp成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool depthBiasClamp成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool wideLines成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool fillModeNonSolid成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool timelineSemaphore成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool dynamicRendering成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加virtual std::string ToString() override成员函数声明
  • 2023/3/21 设计架构

    • ./engine/core下的TPhysicalDeviceInfo.h中的TPhysicalDeviceInfo类中增加VkPhysicalDeviceVulkan11Features vulkan11Feature成员变量
    • ./engine/core下的TPhysicalDeviceInfo.h中的TPhysicalDeviceInfo类中增加VkPhysicalDeviceVulkan12Features vulkan12Feature成员变量
    • ./engine/core下的TPhysicalDeviceInfo.h中的TPhysicalDeviceInfo类中增加VkPhysicalDeviceVulkan13Features vulkan13Feature成员变量
    • ./engine/core下的TVulkanLoader.h中增加extern VULKAN_GLOBAL_API VULKAN_CORE PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2声明
    • ./engine/core下的TVulkanLoader.hTVulkanLoader类中LoadAllInstanceFunctions(TInstance *instance)增加对于Turbo::Core::vkGetPhysicalDeviceFeatures2函数的获取
    • ./engine/core下的TPhysicalDevice.hTPhysicalDevice类中EnumerateProperties()成员函数中增加对于VkPhysicalDeviceVulkan11FeaturesVkPhysicalDeviceVulkan12FeaturesVkPhysicalDeviceVulkan13Features数据的获取
  • 2023/3/22 设计架构

    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool samplerAnisotropy成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDeviceFeatures增加bool logicOp成员变量声明
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDevice移除VkPhysicalDeviceFeatures GetDeviceFeatures()成员函数
    • ./engine/core下的TPhysicalDevice.hclass TPhysicalDevice增加TPhysicalDeviceFeatures GetDeviceFeatures()成员函数
    • ./engine/core下的TDevice.hclass TDevice中移除TDevice(TPhysicalDevice *, std::vector<TLayerInfo> *, std::vector<TExtensionInfo> *, VkPhysicalDeviceFeatures *)构造函数
    • ./engine/core下的TDevice.hclass TDevice中移除VkPhysicalDeviceFeatures enabledFeatures成员变量
    • ./engine/core下的TDevice.hclass TDevice中增加TPhysicalDeviceFeatures enabledFeatures成员变量
    • ./engine/core下的TDevice.hclass TDevice中移除VkPhysicalDeviceFeatures GetEnableDeviceFeatures()成员函数
    • ./engine/core下的TDevice.hclass TDevice中增加TPhysicalDeviceFeatures GetEnableDeviceFeatures()成员函数
    • ./engine/core下的TDevice.hclass TDeviceInternalCreate()成员函数中增加对于Vulkan1.1Vulkan1.2Vulkan1.3Feature激活
    • ./engine/core下的TVulkanLoader.hclass TVulkanLoader中增加对于vkCmdBeginRenderingvkCmdEndRendering两个函数的获取
    • 更新./docs/Design/Core.md文档
  • 2023/3/25 设计架构

    • ./engine/core下的新建TRenderingPipeline.hTRenderingPipeline.cpp
    • ./engine/coreTRenderingPipeline.h中增加声明TRenderingPipeline
    • ./engine/coreTRenderingPipeline.h中增加声明TRenderingAttachments
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加std::vector<TFormatType> colorAttachmentFormats成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加TFormatType depthAttachmentFormat成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加TFormatType stencilAttachmentFormat成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加void AddColorAttachmentFormat(TFormatType formatType)成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加void SetDepthAttachmentFormat(TFormatType formatType)成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加void SetStencilAttachmentFormat(TFormatType formatType)成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加const std::vector<TFormatType> &GetColorAttachmentFormats() const成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加const TFormatType &GetDepthAttachmentFormat() const成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingAttachments类中增加const TFormatType &GetStencilAttachmentFormat() const成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加``成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TRenderingAttachments renderingAttachments成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TTopologyType topology成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool primitiveRestartEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加std::vector<TVertexBinding> vertexBindings成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool depthClampEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool rasterizerDiscardEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TPolygonMode polygonMode成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TCullModes cullMode成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TFrontFace frontFace成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool depthBiasEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float depthBiasConstantFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float depthBiasClamp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float depthBiasSlopeFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float lineWidth成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool multisampleEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TSampleCountBits sample成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool depthTestEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool depthWriteEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TCompareOp depthCompareOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool depthBoundsTestEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool stencilTestEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp frontFailOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp frontPassOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp frontDepthFailOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TCompareOp frontCompareOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t frontCompareMask成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t frontWriteMask成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t frontReference成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp backFailOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp backPassOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TStencilOp backDepthFailOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TCompareOp backCompareOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t backCompareMask成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t backWriteMask成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加uint32_t backReference成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float minDepthBounds成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float maxDepthBounds成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool logicOpEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TLogicOp logicOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加bool blendEnable成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendFactor srcColorBlendFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendFactor dstColorBlendFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendOp colorBlendOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendFactor srcAlphaBlendFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendFactor dstAlphaBlendFactor成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加TBlendOp alphaBlendOp成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float constantR成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float constantG成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float constantB成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加float constantA成员变量
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加virtual void InternalCreate() override成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加Turbo::Core::TRenderingPipeline::TRenderingPipeline(const TRenderingAttachments &renderingAttachments, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TFragmentShader *fragmentShader, TTopologyType topology, bool primitiveRestartEnable, bool depthClampEnable, bool rasterizerDiscardEnable, TPolygonMode polygonMode, TCullModes cullMode, TFrontFace frontFace, bool depthBiasEnable, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor, float lineWidth, bool multisampleEnable, TSampleCountBits sample, bool depthTestEnable, bool depthWriteEnable, TCompareOp depthCompareOp, bool depthBoundsTestEnable, bool stencilTestEnable, TStencilOp frontFailOp, TStencilOp frontPassOp, TStencilOp frontDepthFailOp, TCompareOp frontCompareOp, uint32_t frontCompareMask, uint32_t frontWriteMask, uint32_t frontReference, TStencilOp backFailOp, TStencilOp backPassOp, TStencilOp backDepthFailOp, TCompareOp backCompareOp, uint32_t backCompareMask, uint32_t backWriteMask, uint32_t backReference, float minDepthBounds, float maxDepthBounds, bool logicOpEnable, TLogicOp logicOp, bool blendEnable, TBlendFactor srcColorBlendFactor, TBlendFactor dstColorBlendFactor, TBlendOp colorBlendOp, TBlendFactor srcAlphaBlendFactor, TBlendFactor dstAlphaBlendFactor, TBlendOp alphaBlendOp, float constantR, float constantG, float constantB, float constantA) : Turbo::Core::TPipeline(vertexShader->GetDevice(), vertexShader, fragmentShader)成员函数
  • 2023/3/26 设计架构

    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加virtual void InternalDestroy() override成员函数
    • ./engine/coreTRenderingPipeline.hTRenderingPipeline类中增加~TRenderingPipeline()析构函数
  • 2023/3/27 设计架构

    • 完成./sample下的VulkanDynamicRenderingTest示例
  • 2023/3/29 设计架构

    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments重命名为class TAttachmentsFormat
    • ./engine/coreTRenderingPipeline.h中增加class TRenderingAttachments
    • ./engine/coreTCommandBuffer.hclass TCommandBufferBase增加void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)成员函数
    • ./engine/coreTCommandBuffer.hclass TCommandBufferBase增加void CmdEndRendering()成员函数
    • ./engine/coreTRenderingPipeline.h中增加typedef enum TResolveModeBits枚举
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加struct TRenderingAttachment结构体声明
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加std::vector<TRenderingAttachment> colorAttachments成员变量
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加TRenderingAttachment depthAttachment成员变量
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加TRenderingAttachment stencilAttachment成员变量
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)成员函数
    • 更新./docs/Design/Core.md文档
  • 2023/3/30 设计架构

    • ./engine/coreTRenderingPipeline.hclass TRenderingAttachments中增加friend class TCommandBufferBase友元类声明,使得在TCommandBufferBase中记录指令时能够访问到对应数据
    • ./engine/coreTCommandBuffer.hclass TCommandBufferBase完善实现void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)成员函数
    • ./engine/coreTCommandBuffer.hclass TCommandBufferBase完善实现void CmdEndRendering()成员函数
    • ./engine/coreTCommandBuffer.hclass TCommandBufferBasevoid CmdBeginRendering(const TRenderingAttachments &renderingAttachment)成员函数增加形参为void CmdBeginRendering(const TRenderingAttachments &renderingAttachment, uint32_t offsetX, uint32_t offsetY, uint32_t width, uint32_t height)
    • ./samples中增加DynamicRenderingTest例子,用于测试Turbo封装的Vulkan1.3Dynamic Rendering特性
  • 2023/4/3 设计架构

    • ./engine/coreTSurface构造函数中增加对于Surface扩展是否已经激活的判断
    • ./engine/coreTSwapchain构造函数中增加对于Swapchain扩展是否已经激活的判断
  • 2023/4/4 设计架构

    • ./asset/images下增加RockCliffLayered文件夹,用于存储RockCliffLayeredPBR纹理
    • ./samples中增加NormalTexture例子,用于尝试使用法线纹理获得切线空间的法线
  • 2023/4/5 设计架构

    • ./samples中更新完善NormalTexture例子
    • ./samples中增加BRDF例子,用于尝试实现常见的PBR纹理流程渲染
  • 2023/4/6 设计架构

    • ./samples中修改NormalTexture例子中my_bufferTBuffer的大小值,之前是sizeof(float)应该为sizeof(my_buffer_data)此为一个Bug,现修正。
  • 2023/4/7 设计架构

    • ./samples中更新完善BRDF例子
  • 2023/4/8 设计架构

    • ./samples中增加CPPMultithreading例子,用于研究C++的多线程特性
  • 2023/4/10 设计架构

    • 更新./docs/Design/Core.md文档,研究Vulkan中的细分着色器。
    • ./samples中增加TessellationTest例子,用于研究测试Vulkan的细分特性
    • ./engine/coreTShader.h中增加class TTessellationControlShader
    • ./engine/coreTShader.h中增加class TTessellationEvaluationShader
    • ./engine/coreTGraphicsPipeline.hclass TGraphicsPipeline中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, uint32_t patchControlPoints, ...)构造函数
    • ./engine/coreTGraphicsPipeline.hclass TGraphicsPipeline中增加uint32_t patchControlPoints成员变量
    • ./engine/coreTPipeline.hclass TPipeline中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)构造函数
    • ./engine/coreTGraphicsPipeline.hclass TGraphicsPipelineInternalCreate()成员函数中增加对VkPipelineTessellationStateCreateInfo的设置
  • 2023/4/11 设计架构

    • ./asset/shaders中增加TessellationTest.vert细分示例使用的顶点着色器
    • ./asset/shaders中增加TessellationTest.tesc细分示例使用的细分控制着色器
    • ./asset/shaders中增加TessellationTest.tese细分示例使用的细分评估着色器
    • ./asset/shaders中增加TessellationTest.frag细分示例使用的片元着色器
    • ./samples中完成TessellationTest例子
  • 2023/4/12 设计架构

    • ./engine/coreTShader.h中增加class TGeometryShader
    • ./samples中增加GeometryShaderTest例子,用于测试研究Vulkan中的几何着色器特性
    • ./engine/coreTGraphicsPipeline.hclass TGraphicsPipeline中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, ...)支持几何着色器的构造函数
    • ./engine/coreTPipeline.hclass TPipeline中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)支持几何着色器的构造函数
    • ./asset/shaders中增加GeometryTest.vert几何着色器示例使用的顶点着色器
    • ./asset/shaders中增加GeometryTest.geom几何着色器示例使用的几何着色器
    • ./asset/shaders中增加GeometryTest.frag几何着色器示例使用的片元着色器
    • ./engine/coreTDescriptorSetLayout.hclass TDescriptorSetLayoutInternalCreate()成员函数中增加对于重复Binding描述符号的检查筛选,并且合并不同着色器使用相同描述符的ShaderStageFlag

About

Turbo is rendering engine base Vulkan

License:MIT License


Languages

Language:C++ 92.5%Language:C 6.6%Language:GLSL 0.9%Language:CMake 0.0%Language:Objective-C 0.0%