Turbo是渲染引擎
_____ _
/__ \ _ _ _ __ | |__ ___
/ /\/| | | || '__|| '_ \ / _ \
/ / | |_| || | | |_) || (_) |
\/ \__,_||_| |_.__/ \___/
当前版本 0.0.0.12
- 开发中
想赞助的小伙伴,欢迎使用爱发电
赞助,请量力而为,如果赞助完真有困难可以退回,未成年人禁止投喂!!!
- 体积云教程:详情请阅览
./docs/VolumetricCloud.md
(进行中)<研究光照散射中>
- 使用MarkDown书写,使用docsify部署(之前是使用MkDocs)
- 使用MarkDown书写文字和文档,使用drawio绘制设计图表
- 详细设计文档请参考
docs/TurboDesign.drawio
(需要安装drawwio
) - 目前存在的问题待解决,请查看
docs/Issue.md
- 开发记录录像请浏览 Turbo引擎开发记录
目前Turbo
中有以下模块
- 命名空间:
Turbo::Core
- 文档:
./docs/TurboDesign.drawio:Core
和Core.md - 目录:
./engine/core
- 依赖:独立模块,无依赖。
- 说明:
Core
作为核心模块直接与Vulkan
沟通,是上层与Vulkan
底层最直接的桥梁,Turbo
中所有的GPU
相关工作最终都会从上层回到Core
层。
- 命名空间:
Turbo::FrameGraph
- 文档:
./docs/TurboDesign.drawio:FrameGraph
和FrameGraph.md - 目录:
./engine/framegraph
- 依赖:独立模块,无依赖。
- 说明:
FrameGraph
用于描述一帧中的资源、渲染配置和渲染指令
- 命名空间:
Turbo::Render
- 文档:FrameGraphAdvance.md
- 目录:
./engine/render
- 依赖:
Core
和FrameGraph
。 - 说明:由于直接使用
Core
层进行渲染相对来说还是会比较繁琐吃力一些,Render
模块的出现就是将Core
和FrameGraph
结合起来,提供更加方便的工作流,将开发者从繁杂的Core
层脱离出来,提供更加简单易用的设计架构
-
首先您需要知道的:
-
Turbo
目前主要有两个分支:master
和dev
。其中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
: 用于绘制界面UIKTX-Software
:Khronos Texture
通用纹理标准tinygltf
: 读取gltf
文件库
-
-
如何编译
Turbo
- 请安装Vulkan SDK
- ( *注:2022/7/27 对于
Windows
系统,目前Turbo
已经完成了动态加载Vulkan
函数,(有些第三方依赖需要Vulkan SDK
目前对于Turbo
不是必需品Vulkan SDK
,比如VulkanMemoryAllocator
),Vulkan
的Runtime
是Turbo
的必须品,正常Windows
都会自带该运行时库,如果没有请安装Vulkan Latest Runtime即可,(2022/11/14适配完成))Linux
系统等有空适配一下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.
- ( *注:2022/7/27 对于
Turbo
的核心可以单独编译,编译相关的CMakeLists.txt
位于./engine/core/CMakeLists.txt
。将会输出名为TCore
的库文件。- 如果您想直接编译
Turbo
-
首先请查看环境变量中是否已经加入了
git
的bin
目录,KTX-Sofware
编译依赖bash.exe
,正常该程序位于git
的bin
目录下 -
请安装
python
。第三方库很多CMake
使用Python
脚本运行,安装完后请确保Python
的{Python的安装目录}/Python{版本号}/
目录和{Python的安装目录}/Python{版本号}/Scripts
目录加入到了环境变量中 -
请修改engine/core/CMakeLists.txt
中的Vulkan
库目录为您自己的目录 -
之后使用
./CMakeLists.txt
即可 -
设置相关
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
- 请安装Vulkan SDK
-
如何运行
- 由于每个用户输出的目录都不一样,所以
./main.cpp
的示例程序使用的资源文件使用的是相对路径,所有的资源文件都指向./asset/
目录,请在./main.cpp
中全局搜索asset
字符,替换成自己的目录即可。
注:如果运行有遇到问题请查看
常见问题文档
如果还是没有解决方法请提Issue
- 由于每个用户输出的目录都不一样,所以
- 整理一下头文件,有点乱,去掉不必要的头文件
注:该RoadMap
章节信息有滞后性,引擎具体细节和开发计划请查看后面的开发Log
章节(更新的比较频繁)
2022/5/15
Turbo
引擎对于Vulkan 1.0
的相关核心功能已初步成型,由于Vulkan
本身的复杂性还有很多特性没有实现,在此做一下记录,记录该引擎以实现的特性和未来计划实现特性,该特性记录将会和docs/Issue.md
文档配合使用。Core
核心层将会作为单独完整的库发布,位于./engine/core
中, 现在核心库已分离成单独的库,将会输出TCore.lib
或TCore.a
库文件Turbo
将使用该Core
核心继续开发高级特性- 未来有时间录制
Vulkan教程
和引擎开发教程
视频
2022/5/28
- 实现完
Vulkan
的input 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
-Vulkan
中Subpass
抽象Turbo::Core::TAttachment
-Vulkan
中Attachment
抽象Turbo::Core::TRenderPass
-VkRenderPass
相关封装Turbo::Core::TVertexBinding
-Vulkan
中顶点属性抽象Turbo::Core::TViewport
-Vulkan
中Viewport
抽象Turbo::Core::TScissor
-Vulkan
中Scissor
抽象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
:跨平台窗口层抽象 -
非
Core
:IMGUI
-
非
Core
:KTX
和glTF
-
非
Core
:FrameGraph
层 -
非
Core
:FrameGraph
层实现PBR
-
非
Core
:ECS
层 -
2022/7/13 搞了个
鸿蒙OS(Harmony OS)
系统的手机,有时间适配一下鸿蒙设备。
-
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
- 完成
TPhysicalDeviceInfo
与TPhysicalDevice
相结合
-
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::availableQueueCountMap
在TPhysicalDevice::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
-
重构
TDevice
、TDeviceQueue
、TDeviceCreateInfo
、TDeviceQueueCreateInfo
:- 将
std::vector<TDeviceQueueCreateInfo> deviceQueueCreateInfos
从TDeviceCreateInfo
中移除 - 移除
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
。修改TInstance
、TPhysicalDevice
和TPhysicalDeviceProxy
之间的关系,遗弃TPhysicalDeviceProxy
未完待续- 初步完成
TInstance
创建TPhysicalDevice
,使用TPhysicalDevice::InternalRebuild()
很方便的创建,遗弃TPhysicalDeviceProxy
TPhysicalDeviceProxy
的功能转移到了TPhysicalDevice
中
-
2022/4/3 设计架构
TInstance
和TPhysicalDevice
基于数据驱动,基本重构完成,遗弃TInstanceCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
-
2022/4/4 设计架构
- 优化了
TInstance
和TPhysicalDevice
的重构 TDevice
基本重构完成,遗弃了TDeviceCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
TDeviceQueue
重构进行中
- 优化了
-
2022/4/5 设计架构
TPhysicalDevice
中增加void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)
函数TDeviceQueue
基于数据驱动,基本重构完成,遗弃了TDeviceQueueCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
TCommandBufferPool
基于数据驱动,基本重构完成TCommandBuffer
基于数据驱动,基本重构完成Turbo
的TVulkanHandle
派生类,现在拥有了内存自动回收能力,在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
来动态编译字符串shader
到spirv
的,但是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
- 添加
TOutput
和TInput
类,于TShader.h
中,用于描述Shader
的layout (location=n) in/out [type](vec3...) name;
- 未完待续
- 添加
-
2022/4/12 设计架构
-
TOutput
和TInput
类,没有必要定义两份,修改成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
-
TShader
中virtual void InternalParseSpirV()
完成spirv_cross::SPIRType
到VkDescriptorType
的映射 -
未完待续
-
-
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
中增加了TUniformBufferDescriptor
和TStructMember
类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
中对TInterface
的input
和output
的解析基本完成Turbo::Core::TDescriptor
代表Vulkan
的VkDescriptorSetLayoutBinding
Turbo::Core::TUniformBufferDescriptor
代表Vulkan
的VkDescriptorSetLayoutBinding::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
范畴(处理好TDescriptorSet
和TDescriptor
之间的联系) -
对于
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
之后,会将刚new
的TDescriptor
通过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
类,新增成员变量,内部的TScissor
和TViewport
目前是按值存的,将来改成按照指针存,节省内存。 - 以上只是初步完成,还有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
,TRenderPass
,TFramebuffer
之间设计不合理,需要重构。尝试是否能够按照Vulkan
标准规范设计
- 将
-
2022/4/25 设计架构
- 将原先
TShader
中的TDescriptorSet
改成了TDescriptorSetLayout
- 创建
TDescriptorSet
用于表示VkDescriptorSet
,现在就不会出现TDescriptorSetLayout
和TDescriptorSet
命名歧义了 - 遗弃老的
TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
相关设计,回归到Vulkan
标准规范设计思路 TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
重构中TAttachemt
、TSubpass
重构完成TSubpass
新增TAttachmentReference
类- 创建
TDescriptorPool
、TDescriptorSize
类
- 将原先
-
2022/4/26 设计架构
TSubpass
移除TAttachmentReference
类,用起来不方便TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
基本重构完成,但还不完善。需进一步完善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 设计架构
- 发布至
GitHub
和Gitee
上 - 提炼
issue
- 发布至
-
2022/4/28 设计架构
TBuffer
中增加typedef enum TBufferUsageBits
枚举,与Vulkan
标准一致TBuffer
中增加typedef VkFlags TBufferUsages
声明,用于声明TBuffer
的uage
,与Vulkan
标准一致Turbo.h
中增加typedef VkDeviceSize TDeviceSize
用于TBuffer
的构造函数中,与Vulkan
标准一致TImage
中增加typedef enum TImageType
枚举,用于声明TImage
的type
,与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()
函数,用于获取采样数VkVertexInputBindingDescription
和VkVertexInputAttributeDescription
基本描述框图TurboDesign.drawwio
整理完成
-
2022/4/30 设计架构
TPipeline.h
中增加TVertexAttribute
,TVertexBinding
类,分别用于表示VkVertexInputAttributeDescription
和VkVertexInputBindingDescription
TPipeline.h
中增加typedef enum class TVertexRate
类,用于表示VkVertexInputRate
TPipeline.h
中剔除VkVertexInputBindingDescription
和VkVertexInputAttributeDescription
的使用,改为使用TVertexAttribute
,TVertexBinding
-
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 multisampleEnable
和TSampleCountBits sample
的成员变量,提供对Multisample
特性的支持TCommandBuffer
中增加TRenderPass *currentRenderPass
和TPipeline *currentPipeline
的成员变量,提供对当前使用的RenderPass
和Pipeline
的引用
-
2022/5/3 设计架构
TCommandBuffer
中实现了void Turbo::Core::TCommandBuffer::NextSubpass()
的成员函数,提供对vkCmdNextSubpass(...)
特性的支持Turbo
核心现已支持多Subpass
渲染- 将
TRenderPass
的TPipelineType
转移到了TSubpass
中,符合Vulkan
标准 TPipeline.h
中新增typedef enum TPipelineStageBits
和typedef VkFlags TPipelineStages
,对应Vulkan
的VkPipelineStageFlagBits
和VkPipelineStageFlags
Turbo.h
中新增typedef enum TAccessBits
和typedef VkFlags TAccess
,对应Vulkan
的VkAccessFlagBits
和VkAccessFlags
- 新增
TBarrier.h
和TBarrier.cpp
,用于实现VkMemoryBarrier
、VkBufferMemoryBarrier
、VkImageMemoryBarrier
未完待续
-
2022/5/4 设计架构
TBarrier.h
中增加了TBarrier
、TMemoryBarrier
、TBufferMemoryBarrier
、TImageMemoryBarrier
的成员函数,提供对VkMemoryBarrier
、VkBufferMemoryBarrier
、VkImageMemoryBarrier
特性的支持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 TFormatFeatureBits
和typedef VkFlags TFormatFeatures
用于对应VkFormatFeatureFlagBits
和VkFormatFeatureFlags
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.h
中Turbo::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/.cpp
和TSurfaceFormat.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_READY
和TResult::SUBOPTIMAL
用于Turbo::Extension::TSwapchain::AcquireNextImage(...)
的返回结果./thirdparty
新增SDL2
库用于创建窗口TDevice
的InternalCreate()
中有Bug
,已修复TCommandBuffer
的BeginRenderPass()
中有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 TSampledImageDescriptor
和TSamplerDescriptor
,用于对应VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
和VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLER
TShader
中增加std::vector<TSampledImageDescriptor *> sampledImageDescriptors
和std::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.hpp
和tiny_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
用于描述Vulkan
的Push Constant
TShader
增加std::vector<TPushConstantDescriptor *> pushConstantDescriptors
和相应的获取函数。TPipelineLayout
和TPipeline
中适配TPushConstantDescriptors
TUniformBufferDescriptor
和TPipeline
中增加uint32_t size
成员属性和相应的获取函数,用于表示数据块大小TCommandBuffer
中增加void CmdPushConstants(...)
成员函数,对应vkCmdPushConstants(...)
- 将
-
2022/5/23 设计架构
TBuffer
中增加void Flush(...)
成员函数,用于刷新数据到GPU domain
TSubpass
中GetDepthStencilAttachmentReference()
有Bug
,现已修改完毕
-
2022/5/24 设计架构
TGraphicsPipeline
中移除std::vector<TViewport> &viewports
和std::vector<TScissor> &scissors
成员,由于核心创建的Pipeline
的Viewport
和Scissor
都是动态状态,Vulkan
会忽略VkPipelineViewportStateCreateInfo::pViewports
和VkPipelineViewportStateCreateInfo::pScissors
TGraphicsPipeline
中增加typedef enum class TCompareOp
声明,对应VkCompareOp
TGraphicsPipeline
中增加typedef enum class TStencilOp
声明,对应VkStencilOp
TGraphicsPipeline
中增加对深度测试和模板测试支持- 调整
TGraphicsPipeline
构造函数的参数顺序,填入默认值
-
2022/5/25 设计架构
- 成功渲染
KTX
纹理
- 成功渲染
-
2022/5/27 设计架构
- 成功渲染
KTX
的Cubemap
纹理 - 开始适配几何管线的
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.h
和TFrameGraph.cpp
- 开始实现
-
2022/6/7 设计架构
- 将第三方库配置成
Submodule
,glm
库好像有问题,MVP
矩阵好像不对导致渲染结果有问题,应该不是核心的问题,该问题先忽略,等到FrameGraph
写完,开始写例子的时候再统一解决,加入Issue
中 - 创建
./Turbo/samples
文件夹,用于存放示例代码。 FrameGraph
的void Turbo::FrameGraph::TFrameGraph::Compile()
未实现待实现FrameGraph
的void 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
TSurface
中InternalCreate()
适配Linux
的wayland
TSurface
中GetSurfaceSupportQueueFamilys()
适配Linux
的wayland
- 适配
-
2022/6/15 设计架构
- 适配
TSurface
基于xcb
TSurface
中增加xcb_connection_t *connection
和xcb_window_t window
成员变量,用于适配xcb
TSurface
中增加适配xcb
相应的构造函数TSurface
的InternalCreate(...)
中通过vkCreateXcbSurfaceKHR(...)
适配xcb
- 适配
TSurface
基于xlib
TSurface
中增加Display *xlibDpy = nullptr
和Window xlibWindow
成员变量,用于适配xlib
TSurface
中增加适配xlib
相应的构造函数TSurface
的InternalCreate(...)
中通过vkCreateXlibSurfaceKHR(...)
适配xlib
TSwapchain
的InternalCreate(...)
中会去判断当前给的图片数量是否合法(判断数量是否在[最小值,最大值]之间),但是有些显卡设备返回的最小值为有效数据,最大值为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
标准,将会尝试使用concept
和metaTemplate
方式编写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
TPassNode
中TAgency*
相成员修改为std::unique_ptr<TAgency>
- 去掉
TPassNode
中析构函数的实现,使用编译器默认生成的 TFrameGraph::AddPass(...)
中增加如下代码,调用初始化入口函数:
std::invoke(setup, builder, pass_agency->GetData())
- 增加
TAgency
的构造/析构函数
-
2022/7/4 设计架构
FrameGraph
设计参考Filement
做出的修改意见目前写在各行的注释中(//*...
),考虑是否采纳,之后需要同步修改FrameGraph
的设计文档- 将
Filament
的FrameGraph
结构分析加入FrameGraph
文档,作为参考,与c++
新标准的模板元编程和concept
结合设计
-
2022/7/5 设计架构
- 开始解析
Filament 1.9.9
的FrameGraph
(截止2022/7/5filament
的最新版本为1.24
对于FrameGraph
做了很多更新,但总体思路没变),请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看(注:重点过程被标注为橘黄色)
- 开始解析
-
2022/7/6 设计架构
- 开始解析
Filament
的FrameGraph::compile()
阶段,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看
- 开始解析
-
2022/7/7 设计架构
- 开始解析
Filament
的FrameGraph::execute()
阶段,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看
- 开始解析
-
2022/7/8 设计架构
- 解析
Filament
的FrameGraph::execute()
阶段,reset()
函数调用位置标错了,修改回来。 - 开始解析
Filament
的FrameGraph::execute()
阶段的resources.get(data.rt);
,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看 - 至此
Filament
的FrameGraph
核心解析完毕,请在./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 firstUser
和TPass 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
大框架基本上写完了,剩下的就是Resource
和PassNode
等特化和引擎提供的特性资源类,比如PresentNode(PassNode的特化,有PresentData)
和Texture(纹理资源),DepthTexture(深度纹理),ColorTexture(颜色纹理)
等- 接下来需要实现
TFrameGraph
的Blackboard
特性
-
2022/7/11 设计架构
- 实现
FrameGraph
的Blackboard
特性 - 实现
TFrameGraph
中增加TBlackboard
类 TFrameGraph
中增加TBlackboard
类成员变量TFrameGraph
中增加TBlackboard &GetBlackboard()
成员函数需要特化当前的算法正常并不会剔除PresentPassNode
,显示节点一般作为结束节点,但是FrameGraph
演讲中并没有显示的给出显示阶段往哪个资源身上写入,所以目前显示节点没有写入,也就是没有出度,没有出度在FrameGraph::Compile()
阶段就会被剔除,这也许会造成一连串的剔除,所以需要专门特化一个PresentPassNode
或是采用SideEffect
解决(目前TFrameGraph
并没有引入SideEffect
特性)PresentPass
,FrameGraph
目前的剔除算法首先基于资源引用数进行的剔除,目前显示节点不向任何资源写入,只是读取资源,正常不会发生递归性的一连串剔除TFrameGraph
还需要经过测试,目前还没有严格测试
- 实现
-
2022/7/12 设计架构
-
修复Bug:
TFrameGraph::Compile()
中计算资源的创建者和销毁者时,FrameGraph
的所有资源可能会被全部剔除,造成空图,这会导致资源的创建者和销毁者为无效节点(比如强制PresentPass
往资源中写入,由于PresentPass
为结束节点,正常不应该再写入资源,这时该写入的资源没有出度,也就是没有人使用该节点,这时Compile()
阶段会发生资源剔除,导致一连串的资源剔除,最坏的情况会剔除成空图,这时资源的创建者和销毁者不会被赋值,从而导致创建者和销毁者的节点id
无效非法) -
有关
TFrameGraph
如何使用和测试,请参考./samples/FrameGraphSample.cpp
-
TFrameGraph::Execute(...)
中增加对PassNode
的引用数的判断,如果引用数大于零,说明该节点有使用者,运行节点的Executor
回调,否则没有使用,不去调用回调。(注意:这将会导致PresentNode
的运行回调不会被调用,考虑使用SideEffect
特性强制驱动,如果一个PassNode
有SideEffect
特性,说明在节点不会被剔除) -
TPassNode
中增加bool sideEffect
成员变量 -
TFrameGraph::TBuilder
中增加TBuilder &SideEffect();
成员函数,用于设置PassNode
的sideEffect
成员 -
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
类用于实现Vulkan
的Loader
- 核心中添加
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
调用使适配 - 有小伙伴提出在单独使用
Turbo
的TCore
核心库的时候,需要手动链接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
头文件 - 移除
TCore
的CMake
中对于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
中对于glslang
中GlslangToSpv.h
头文件引用层级 - 调整
./main.cpp
中对于vkGetImageSubresourceLayout(...)
的调用,改成Turbo::Core::vkGetImageSubresourceLayout(...)
- 调整
./main.cpp
中对于vkDestroySurfaceKHR(...)
的调用,改成使用TVulkanLoader
获取调用 - 将
./CMakeLists.txt
中对于imgui_impl_glfw.cpp
和imgui_impl_vulkan.cpp
的引用去掉,用不上 - 同理将
./samples/CMakeLists.txt
中对于imgui_impl_glfw.cpp
和imgui_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
andVMA_DYNAMIC_VULKAN_FUNCTIONS
to 0. - Pass these pointers via structure #VmaVulkanFunctions.
- Define
- 考虑是否将外部引入的
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):
- Define VMA_STATIC_VULKAN_FUNCTIONS to 0, VMA_DYNAMIC_VULKAN_FUNCTIONS to 1.
- Provide pointers to these two functions via VmaVulkanFunctions::vkGetInstanceProcAddr, VmaVulkanFunctions::vkGetDeviceProcAddr.
- The library will fetch pointers to all other functions it needs internally.
- If you want VMA to fetch pointers to Vulkan functions dynamically using vkGetInstanceProcAddr, vkGetDeviceProcAddr (this is the option presented in the example below):
- 至此
Turbo
核心库TCore
依赖库问题已解决,感谢会翔
提供的问题反馈
- 调整
-
2022/8/4 设计架构
./samples
中增加PBRTest.cpp
,用于physically based rendering
与BSDF
研究
-
2022/8/7 设计架构
./samples
中PBRTest.cpp
,对于physically based rendering
与BSDF
初步调试成功。看样子渲染结果应该是对的(○` 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
核心TCommandBuffer
中TCommandBufferBase
类,增加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
文件,用于探究Subpass
和MutilDraw
之间的联系./samples
中增加SubpassTest.cpp
文件,用于探究Subpass
和MutilDraw
之间的联系
-
2022/8/21 设计架构
./docs/TurboDesign.drawio::Engine
章节中详细设计::Material
设计思路,有设计问题,进一步设计完善
-
2022/8/25 知会
- 现在
Turbo::Engine
层面的设计多少都有些问题,比如:如果用户想要调配使用FrameGraph
就需要对渲染有过硬的理解,目前看了Filament
,LegitEngine
,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 设计架构
TurboDesign
中Core
章节增加Pipeline与Shader分支箭头(非常大的黄色箭头)
TShader
中增加TVertexShader
、TFragmentShader
、TComputeShader
并在TShader.cpp
中实现(目前先实现这几个,剩下等有时间的)TPipeline
中增加图形管线的构造函数TPipeline(TDevice *device, TVertexShader* vertexShader,TFragmentShader* fragmentShader);
和计算管线的构造函数TPipeline(TDevice *device, TComputeShader *computeShader);
。老的构造函数将会声明置成弃用函数。TGraphicsPipeline
中增加使用TVertxShader
和TFragmentShader
的构造函数。老的构造函数将会声明置成弃用函数。- 实现
TComputerPipeline
中并在其中调用vkCreateComputePipelines
创建计算管线的VkPipeline
./samples
中增加CineShaderLava
示例,在ShaderToy
上看到的,感觉挺有意思,想试试使用Turbo
渲染,就搬过来了。
-
2022/11/11 设计架构
./samples
中增加Octagrams
示例,在ShaderToy
上看到的,感觉挺有意思,就搬过来了。./samples
中增加ProteanClouds
示例,在ShaderToy
上看到的,感觉挺有意思,就搬过来了。- 开始实现
Core
中TCommandBufferBase
中的void CmdDispatch(...)
函数,用于调用执行计算着色器的计算管线 ./samples
中增加ComputePipelineTest
测试示例,用于测试计算着色器和计算管线是否正确有效- 引擎中目前没有
storage image
相关的解析,现进行实现。 TDescriptor
中增加TStorageImageDescriptor
类,继承自TDescriptor
,并实现TShader
中增加TStorageImageDescriptor
类的数组使用:声明std::vector<TStorageImageDescriptor *> storageImageDescriptors
成员变量。TShader
中增加const std::vector<TStorageImageDescriptor *> &GetStorageImageDescriptors()
成员函数。TShader
的InternalParseSpirV()
成员函数中对storage image
进行解析构建,并在TShader
析构时销毁。TPipeline
的InternalCreate()
成员函数中对storage image
进行解析添加。- 在
TDescriptorSet
的BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TImageView *> &imageViews)
成员函数中增加对storage image
的支持。
-
2022/11/12 设计架构
- 加了个
爱发电
赞助,感谢投喂。 ./samples
中增加Auroras
示例,在ShaderToy
上看到的,太漂亮了没忍住,又搬过来了。./samples
中ProteanClouds
示例中增加对应的鼠标位置数据
- 加了个
-
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++20
和c++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.cpp
中InternalCreate()
中vk_swapchain_create_info_khr.oldSwapchain=nullptr
改成vk_swapchain_create_info_khr.oldSwapchain=VK_NULL_HANDLE
,Visual Studio 2017
中赋nullptr
报错 - 修改
TFrameGraph.hpp
中Execute
的相关声明,声明成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
,显卡型号RTX3070
下std::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
。在当运行时按下键盘W
、A
、S
、D
后可以移动相机,按住鼠标右键
可以俯仰相机。 - 修改
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.frag
的BoudingBoxOrthogonalBasis GetBoundingBoxForwardDir(...)
函数修改成GetBoundingBoxOrthogonalBasis(...)
,之前名字起错了./asset/shaders
中通过修改ray_marching_bounding_box.frag
的bool 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.hpp
中C++17
的[[nodiscard]]
目前Turbo
使用C++11
/.gitignore
中增加忽略install/
文件夹
- 修改
-
2022/11/24 设计架构
- 更新
VolumetricCloud
文章 - 更改
./samples
下的VolumetricCloud
,使其将ComputerPipelineGeneratePerlinWorley
和RayMarchingBoundingBoxTest
相结合
- 更新
-
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 设计架构
./samples
中VolumetricCloud
中增加power
、absorption
、outScattering
传输变量,用于体积云渲染./samples
中VolumetricCloud
中增加对高频沃利纹理的采样
-
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
教上层的FrameGraph
和Turbo
引擎衔接设计,相关设计源头位于./docs/Desgin/images
下的一些琐碎设计
- 将
-
2022/12/4 设计架构
./docs/Desgin
下FrameGraphAdvance.md
基本完成,之后新的设计都会在此文档中增加- 将
./docs/TurboDesign
中的Engine
模块重命名成Render
(考虑到将来可能会集成实现ECS
) ./engine
下新建render
文件夹,并在render
文件夹下创建include
和src
文件夹./engine/render
下创建TImage
类
-
2022/12/5 设计架构
FrameGraph
下对于资源的创建和销毁需要一个分配器或上下文./docs/Desgin
下FrameGraphAdvance.md
更新设计
-
2022/12/6 设计架构
./engine/render
下新建TContext
类,用于引擎上下文./samples
下新建RenderDesignTest
示例,用于Turbo::Render
架构的测试
-
2022/12/7 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计./engine/render
下TContext
中增加TInstance
初始化构建./engine/render
下TContext
中增加TDevice
初始化构建
-
2022/12/8 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计
-
2022/12/9 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计./engine/render
下新建TSurface
类- 重命名
Turbo
中所有的头文件定义宏,防止冲突
-
2022/12/10 设计架构
./engine/render
下TContext
增加Turbo::Core::TImage *CreateImage(...)
函数./engine/render
下TImage
增加typedef enum TImageCreateFlagBits
用于创建TImage
的描述的位域标示./engine/render
下TImage
增加using TImageCreateFlags = uint32_t
用于创建TImage
的描述的位域标示集./engine/render
下TImage
的Descriptor
增加TImageCreateFlags flags
成员./engine/render
下TImage
增加typedef enum TImageUsageBits
用于创建TImage
的描述的usage
位域标示./engine/render
下TImage
增加using TImageUsages = uint32_t;
用于创建TImage
的描述的usage
位域标示集./engine/render
下TImage
的Descriptor
增加TImageUsages usages
成员- 更新
./engine/render
下TImage
及其子类的Descriptor
成员 - 更新
./engine/render
下TImage
其子类的Create()
和Destroy()
成员函数,增加allocator
- 更新
./engine/render
下TContext
的CreateImage()
函数 ./engine/render
下新建TResourceAllocator
类,用于资源创建的分配器
-
2022/12/11 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计 ./engine/render
下增加TDomain.h
,用于定义资源分配的所有者端域./engine/render
下TImage
的Descriptor
增加TDomain domain
成员- 更新
./engine/render
下TContext
的CreateImage()
函数
- 更新
-
2022/12/12 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计 ./samples
下创建VulkanTest
示例,用于纯Vulkan
代码测试
- 更新
-
2022/12/13 设计架构
- 更新
./engine/render
下TContext
的CreateImage()
函数 - 更新
./engine/render
下TImage
中TImageUsageBits
枚举成员命名增加..._ATTACHMENT
明确用意
- 更新
-
2022/12/14 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计 - 更新
readme
文档开头的QQ
群链接,一开始链接放错了,放成爱发电赞助链接的交流群了
- 更新
-
2022/12/15 设计架构
./engine/core
下TImage
内增加void *vmaAllocationInfo
成员变量,用于存储vma
内存分配信息,并在构造函数中初始化,并赋值
,析构
函数中释放./engine/core
下TImage
的构造函数
中获取VmaAllocationInfo
的vma
内存分配信息./engine/core
下TBuffer
内增加void *vmaAllocationInfo
成员变量,用于存储vma
内存分配信息,并在构造函数中初始化,并赋值
,析构
函数中释放./engine/core
下TBuffer
的构造函数
中获取VmaAllocationInfo
的vma
内存分配信息./engine/core
下TImage
中增加TMemoryTypeInfo GetMemoryTypeInfo()
成员函数,用于获取底层数据的内存属性./engine/core
下TBuffer
中增加TMemoryTypeInfo GetMemoryTypeInfo()
成员函数,用于获取底层数据的内存属性./engine/render
下TContext
中根据FrameGraphAdvance.md
设计文档,更新实现Turbo::Render::TContext::CreateImage(...)
成员函数./engine/render
下TDomainBits
中增加一个BOTH
位标,用于表示CPU+GPU
,方便使用
-
2022/12/16 设计架构
./engine/render
下TFormat
内增加R8G8B8A8_SRGB
、B8G8R8A8_UNORM
、D16_UNORM
、R8G8B8_SRGB
、B8G8R8_SRGB
、R8G8B8_UNORM
、B8G8R8_UNORM
枚举成员./engine/render
下TContext
内增加Turbo::Render::TContext::CreateImage(...)
增加对新增格式枚举成员的适配./engine/render
下TContext
的Turbo::Render::TContext::CreateImage(...)
中对于Turbo::Core::TImageType
的判断逻辑上有问题,修复./engine/core
下TCore
增加typedef VkFormatProperties TFormatProperties
定义./engine/core
下TFormatInfo
增加TFormatProperties formatProperties
成员变量./engine/core
下TFormatInfo
新增构造函数TFormatInfo(TFormatType formatType = TFormatType::UNDEFINED, TFormatProperties formatProperties)
./engine/core
下TFormatInfo
构造函数TFormatInfo(TFormatType formatType)
设置成遗弃函数./engine/core
下TFormatInfo
修改Turbo::Core::TFormatInfo::GetSupportFormats()
函数适配TFormatInfo
带有TFormatProperties formatProperties
参数函数。./engine/core
下TPhysicalDeviceInfo
修改std::vector<TFormatInfo> supportFormats
成员变量为std::map<TFormatType, TFormatInfo> supportFormats
参数函数。./engine/core
下TPhysicalDevice
修改void Turbo::Core::TPhysicalDevice::EnumerateFromat()
成员函数,为适配std::map<TFormatType, TFormatInfo> TPhysicalDeviceInfo::supportFormats
参数函数。./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::GetSupportFormats()
成员函数./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::IsSupportFormat()
成员函数
-
2022/12/17 设计架构
-
./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::IsSupportFormat()
成员函数 -
./engine/core
下TFormatInfo
的TFormatInfo(TFormatType formatType = TFormatType::UNDEFINED);
构造函数移除 -
./engine/core
下TSwapchain
增加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/core
下TSwapchain
增加explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatType formatType, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);
构造函数,并实现 -
./engine/core
下TSwapchain
的explicit 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/core
下TSwapchain
的explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatInfo format, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);
构造函数标记为遗弃 -
./engine/core
下TPhysicalDevice
增加TFormatInfo GetFormatInfo(TFormatType formatType);
函数,用于返回更加丰富的格式信息 -
./engine/core
下TImageView
增加explicit TImageView(TImage *image, TImageViewType viewType, TFormatType formatType, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)
构造函数 -
./engine/core
下TImageView
下explicit TImageView(TImage *image, TImageViewType viewType, TFormatInfo format, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)
构造函数标记为遗弃 -
./engine/core
下TImage
下[[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/core
下TImage
增加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/core
下TGraphicsPipeline
的TVertexBinding
增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
成员函数 -
./engine/core
下TGraphicsPipeline
的TVertexBinding
增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
成员函数标记为遗弃 -
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TFormatInfo format
成员变量更改为TFormatType formatType
-
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TFormatInfo GetFormat();
成员函数更改为TFormatType GetFormatType()
并实现 -
./engine/core
下TGraphicsPipeline
的TVertexAttribute
增加TVertexAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
构造函数 -
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TVertexAttribute(uint32_t location, TFormatInfo format, uint32_t offset)
构造函数移除 -
./engine/core
下TFormatInfo
中增加如下成员函数: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/Desgin
下FrameGraphAdvance.md
设计
-
-
2022/12/18 设计架构
-
更新
./docs/Desgin
下FrameGraphAdvance.md
设计 -
./docs
下增加vkspec1.3Core.pdf
文件,为Vulkan1.3
官方标准文档,国内在线访问Vulkan
官网真难受。 -
./engine/render
下TFormat
中增加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/render
下TResourceAllocator
下增加TContext* GetContext()
函数并实现 -
./engine/render
下TColorImage
下Turbo::Render::TColorImage::Create()
函数更新实现 -
./engine/render
下TImage
下增加class TDepthStencilImage
-
./engine/render
下TImage
下增加class TDepthImage
-
./engine/render
下TImage
下增加class TDepthImage2D
-
-
2022/12/19 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计 ./engine/render
下TImage
下增加class TTexture2D
./engine/render
下TImage
下增加class TColorImage3D
./engine/render
下TImage
下增加class TTexture3D
readme
增加平台支持标签./docs/Desgin
下新增WebGPU_Dawn.md
文档,用于记录Google Dawn, a WebGPU implementation学习记录
- 更新
-
2022/12/20 设计架构
- 🐑了,好难受。(눈_눈)
./engine/render
下TImage
下增加class TDepthTexture2D
./engine/render
下TImage
下增加TFormat GetFormat()
成员函数./engine/render
下TImage
下增加uint32_t GetWidth()
成员函数./engine/render
下TImage
下增加uint32_t GteHeight()
成员函数./engine/render
下TImage
下增加uint32_t GetDepth()
成员函数./engine/render
下TImage
下增加uint32_t GetLayers()
成员函数./engine/render
下TImage
下增加uint32_t GetMipLevels()
成员函数./engine/render
下TImage
下增加TImageUsages GetUsage()
成员函数./engine/render
下TImage
下增加TDomain GetDomain()
成员函数
-
2022/12/21 设计架构
./engine/render
下增加TBuffer
类./engine/render
下TContext
下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)
成员函数./engine/render
下TContext
下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)
成员函数./engine/render
下TResourceAllocator.h
下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)
成员函数./engine/render
下ResourceAllocator.h
下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)
成员函数
-
2022/12/23 设计架构
./docs/Desgin
下将WebGPU_Dawn.md
重命名为WebGPU_CCPP.md
- 更新
./docs/Desgin
下WebGPU_CCPP
./engine/render
下TBuffer::Descriptor::usages
类型由原来的TBufferUsageBits
改为TBufferUsages
./engine/render
下TBuffer
中增加TBufferUsages GetUsages()
成员函数./engine/render
下TBuffer
中增加uint64_t GetSize()
成员函数./engine/render
下TBuffer
中增加TDomain GetDomain()
成员函数./engine/render
下TImage
中TImageUsages GetUsage()
成员函数更名为TImageUsages GetUsages()
-
2022/12/24 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
- 更新
-
2022/12/25 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TBuffer
中增加void Copy(void *src, uint64_t size)
成员函数./engine/render
下TBuffer
中增加void *allocator = nullptr
成员变量
- 更新
-
2022/12/26 设计架构
- 更新
./docs/Desgin
下WebGPU_CCPP.md
./engine/render
下TContext
中增加Turbo::Core::TCommandBufferPool *commandBufferPool = nullptr
成员变量./engine/render
下TContext
中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()
成员函数./engine/render
下TContext
中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)
成员函数./engine/render
下TResourceAllocator
中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()
成员函数./engine/render
下TResourceAllocator
中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)
成员函数./engine/render
下TBuffer
中void Copy(void *src, uint64_t size)
成员函数进行优化./engine/render
下TBuffer
中增加void Copy(TBuffer *src, uint64_t srcOffset, uint64_t size)
成员函数
- 更新
-
2022/12/27 设计架构
./engine/render
下TContext
中增加Turbo::Core::TCommandBuffer *commandBuffer
成员变量./engine/render
下TContext
中增加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/framegraph
下TFrameGraph
中增加struct TRenderPass
成员,目前是实验性代码./engine/render
下TContext
中增加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/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> writes
成员变量./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> reads
成员变量./engine/framegraph
中TFrameGraph::TSubpass
增加TResource Write(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加TResource Read(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TRenderPass
增加std::vector<TSubpass> subpasses
成员变量./engine/framegraph
中TFrameGraph::TRenderPass
增加void AddSubpass(const TSubpass &subpass)
成员变量
-
2023/1/2 设计架构
./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> GetWrites()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> GetReads()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TSubpass> GetSubpasses()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加friend class TFrameGraph
友元类./engine/framegraph
中TFrameGraph::TRenderPass
增加friend class TFrameGraph
友元类./engine/framegraph
中TFrameGraph::TBuilder
增加class TSubpass
成员类,其作为TFrameGraph::TSubpass
类的前端类或代理./engine/framegraph
中TFrameGraph::TBuilder
增加TSubpass CreateSubpass()
成员函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TSubpass(TBuilder *builder, uint32_t index)
构造函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TTBuilder *builder = nullptr
成员变量./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加uint32_t index
成员变量./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TResource Write(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TResource Read(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TPassNode
增加TRenderPass renderPass
成员变量./engine/framegraph
中TFrameGraph::TPassNode
增加TRenderPass GetRenderPass()
成员函数./engine/framegraph
中TFrameGraph
增加uint32_t TURBO_INVALID_SUBPASS_INDEX
全局变量- 更新
./samples
中rameGraphSample
增加int test3()
对于新FrameGraph
标准的测试代码
-
2023/1/3 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
中TFrameGraph::TBuilder
下的TResource Read(TResource resource)
成员函数访问域从public
改成private
./engine/framegraph
中TFrameGraph::TBuilder
下的TResource Write(TResource resource)
成员函数访问域从public
改成private
- 更新
./samples
中rameGraphSample
示例代码,适配到新的FrameGraph
标准并移除原先的test2
,并将test3
改名成test2
./engine/framegraph
中TFrameGraph::TRenderPass
移除uint32_t testValue
成员变量./engine/samples
中RenderDesignTest
移除TFrameGraph::TRenderPass::testValue
有关代码- 更新
./docs/Design/
下的FrameGraphAdvance.md
./asset/models/
下增加fuxiii-2022.gltf
模型./engine/framegraph
中TFrameGraph
增加std::string ToMermaid()
成员函数
- 更新
-
2023/1/4 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
中TFrameGraph
更新std::string ToMermaid()
成员函数./engine/render
下增加TRenderPass.h
,TRenderPass.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.h
和TPipeline.cpp
./engine/render
下TPipeline
中增加class TPipeline
./engine/render
下TPipeline
中增加class TComputePipeline
./engine/render
下TPipeline
中增加class TGraphicsPipeline
./engine/render
下增加TShader.h
和TShader.cpp
./engine/render
下TShader
中增加class TShader
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TShader
中增加class TVertexShader
./engine/render
下TShader
中增加typedef enum TLanguage
成员枚举./engine/render
下TVertexShader
中增加TVertexShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数./engine/render
下TVertexShader
中增加TVertexShader(TContext *context, size_t size, uint32_t *code)
构造函数./engine/render
下TShader
中增加class TFragmentShader
./engine/render
下TFragmentShader
中增加TFragmentShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数./engine/render
下TFragmentShader
中增加TFragmentShader(TContext *context, size_t size, uint32_t *code)
构造函数./engine/render
下TShader
中增加class TComputeShader
./engine/render
下TComputeShader
中增加TComputeShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数./engine/render
下TComputeShader
中增加TComputeShader(TContext *context, size_t size, uint32_t *code)
构造函数Turbo::Core
层与Turbo::Render
有同名头文件,会有冲突,使用Turbo::Core
的头文件使用core/include/...
,使用Turbo::Render
的头文件使用render/include/...
,同时修改CMakeList.txt
中的相关设置./engine/render
下TShader
中增加如下,使得Shader
必须通过new
创建:
TShader(TShader const &) = delete; TShader(TShader &&) = delete; TShader &operator=(TShader const &) = delete; TShader &operator=(TShader &&) = delete;
./engine/render
下TComputePipeline
中增加TComputePipeline(Turbo::Render::TComputeShader *computeShader)
构造函数./engine/render
下TComputePipeline
中增加Turbo::Render::TComputeShader* computeShader
成员变量
-
2023/1/7 设计架构
./engine/render
下TComputePipeline
中增加TComputePipeline &SetComputeShader(Turbo::Render::TComputeShader *computeShader)
成员函数./engine/render
下TComputePipeline
中移除TComputePipeline(Turbo::Render::TComputeShader *computeShader)
构造函数./engine/render
下TGraphicsPipeline
中增加Turbo::Render::TVertexShader *vertexShader
成员变量./engine/render
下TGraphicsPipeline
中增加Turbo::Render::TFragmentShader *fragmentShader
成员变量./engine/render
下TGraphicsPipeline
中增加typedef enum TTopology
成员枚举./engine/render
下TGraphicsPipeline
中增加TTopology topology
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetTopology(TTopology topology)
成员函数./engine/render
下TGraphicsPipeline
中增加typedef enum TCullBits
成员枚举./engine/render
下TGraphicsPipeline
中增加using TCull = uint32_t
成员声明./engine/render
下TGraphicsPipeline
中增加bool primitiveRestartEnable
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthClampEnable
成员变量./engine/render
下TGraphicsPipeline
中增加bool rasterizerDiscardEnable
成员变量./engine/render
下TGraphicsPipeline
中增加TPolygon polygon
成员变量./engine/render
下TGraphicsPipeline
中增加TCull cull
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPrimitiveRestartEnable(bool primitiveRestartEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthClampEnable(bool depthClampEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetRasterizerDiscardEnable(bool rasterizerDiscardEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPolygon(TPolygon polygon);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetCull(TCull cull);
成员函数./engine/render
下TGraphicsPipeline
中增加typedef enum TFront
成员枚举./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetFront(TFront front)
成员函数./engine/render
下TGraphicsPipeline
中增加bool depthBiasEnable
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasConstantFactor
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasClamp
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasSlopeFactor
成员变量./engine/render
下TGraphicsPipeline
中增加float lineWidth
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasEnable(bool depthBiasEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasConstantFactor(float depthBiasConstantFactor);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasClamp(float depthBiasClamp);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasSlopeFactor(float depthBiasSlopeFactor);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLineWidth(float lineWidth);
成员函数
-
2023/1/8 设计架构
./engine/render
下TGraphicsPipeline
中增加typedef enum class TCompareOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TStencilOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TLogicOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TBlendFactor
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TBlendOp
成员枚举./engine/render
下TGraphicsPipeline
中增加bool depthTestEnable = true
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthWriteEnable = true
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp depthCompareOp = TCompareOp::LESS_OR_EQUAL
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthBoundsTestEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加bool stencilTestEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontPassOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontDepthFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp frontCompareOp = TCompareOp::ALWAYS
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontCompareMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontWriteMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontReference = 0
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backPassOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backDepthFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp backCompareOp = TCompareOp::ALWAYS
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backCompareMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backWriteMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backReference = 0
成员变量./engine/render
下TGraphicsPipeline
中增加float minDepthBounds = 0
成员变量./engine/render
下TGraphicsPipeline
中增加float maxDepthBounds = 0
成员变量./engine/render
下TGraphicsPipeline
中增加bool logicOpEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TLogicOp logicOp = TLogicOp::NO_OP
成员变量./engine/render
下TGraphicsPipeline
中增加bool blendEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor srcColorBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor dstColorBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendOp colorBlendOp = TBlendOp::ADD
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor srcAlphaBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor dstAlphaBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendOp alphaBlendOp = TBlendOp::ADD
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t patchControlPoints
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPatchControlPoints(uint32_t patchControlPoints)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthTestEnable(bool depthTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthWriteEnable(bool depthWriteEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthCompareOp(TCompareOp depthCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBoundsTestEnable(bool depthBoundsTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilTestEnable(bool stencilTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontFailOp(TStencilOp frontFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontPassOp(TStencilOp frontPassOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontDepthFailOp(TStencilOp frontDepthFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontCompareOp(TCompareOp frontCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontCompareMask(uint32_t frontCompareMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontWriteMask(uint32_t frontWriteMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontReference(uint32_t frontReference)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackFailOp(TStencilOp backFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackPassOp(TStencilOp backPassOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackDepthFailOp(TStencilOp backDepthFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackCompareOp(TCompareOp backCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackCompareMask(uint32_t backCompareMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackWriteMask(uint32_t backWriteMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackReference(uint32_t backReference)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetMinDepthBounds(float minDepthBounds)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetMaxDepthBounds(float maxDepthBounds)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLogicOpEnable(bool logicOpEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLogicOp(TLogicOp logicOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetBlendEnable(bool blendEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetSrcColorBlendFactor(TBlendFactor srcColorBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDstColorBlendFactor(TBlendFactor dstColorBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetColorBlendOp(TBlendOp colorBlendOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetSrcAlphaBlendFactor(TBlendFactor srcAlphaBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDstAlphaBlendFactor(TBlendFactor dstAlphaBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetAlphaBlendOp(TBlendOp alphaBlendOp)
成员函数./docs/Issue.md
中增加TGraphicsPipeline
对于VkPipelineTessellationStateCreateInfo
不支持的待解决问题
-
2023/1/9 设计架构
./engine/render
下TContext
中增加void BindPipeline(const TComputePipeline *computePipeline)
成员函数./engine/render
下TContext
中增加void BindPipeline(const TGraphicsPipeline *graphicsPipeline)
成员函数./README.md
下增加Modular
章节,用于描述Turbo
架构中的各个模块- 更新
./docs/Design/
下的FrameGraphAdvance.md
-
2023/1/10 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/core
下TFence.h
中增加class TFences
类./engine/core
下TFences
中增加std::map<TDevice *, std::vector<TFence *>> fenceMap
成员变量./engine/core
下TFences
中增加void Add(TFence *fence)
成员函数./engine/core
下TFences
中增加bool Wait(uint64_t timeout)
成员函数./engine/core
下TFence
中增加TDevice *GetDevice()
成员函数./engine/render
下TContext
中增加void Flush()
成员函数./engine/render
下TContext
中增加bool Wait(uint64_t timeout)
成员函数./engine/render
下TContext.h
中增加typedef struct TCommandBuffer
结构体./engine/render
下TContext
中Turbo::Core::TCommandBuffer *commandBuffer
成员变量改为Turbo::Render::TCommandBuffer currentCommandBuffer
./engine/render
下TContext
中Turbo::Core::TCommandBuffer *GetCommandBuffer()
成员变量改为Turbo::Render::TCommandBuffer GetCommandBuffer()
./engine/render
下TContext
中增加std::vector<Turbo::Render::TCommandBuffer> commandBuffers
成员变量./docs/
下增加FAQ.md
用于记录常见问题
- 更新
-
2023/1/11 设计架构
./engine/framegraph
下TVirtualResourceProxy
中virtual void Create()
成员函数增加void *allocator
函数参数./engine/framegraph
下TVirtualResourceProxy
中virtual void Destroy()
成员函数增加void *allocator
参数./engine/framegraph
下TResourceProxy
中virtual void Create()
成员函数增加void *allocator
函数参数./engine/framegraph
下TResourceProxy
中virtual void Destroy()
成员函数增加void *allocator
参数./engine/framegraph
下TFrameGraph
中void Execute(void *context = nullptr)
成员函数增加void *allocator
参数- 更新
./docs/Design/
下的FrameGraphAdvance.md
- 更新
./docs/Design/
下的FrameGraph.md
-
2023/1/12 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
下TSubpass
中增加std::vector<TResource> inputs
成员变量./engine/framegraph
下TSubpass
中增加void Input(TResource resource)
成员函数./engine/framegraph
下TSubpass
中增加std::vector<TResource> GetInputs()
成员函数./engine/framegraph
下TResource
中增加bool isInput
成员变量./engine/framegraph
下TFrameGraph::TBuilder
中增加TResource Input(TResource resource)
成员函数./engine/framegraph
下TFrameGraph::TBuilder::TSubpass::Read(TResource resource)
中增加resource.isInput = false
设置代码./engine/framegraph
下TFrameGraph::TBuilder::TSubpass::Input(TResource resource)
中增加resource.isInput = true
设置代码./engine/framegraph
下Turbo::FrameGraph::TPassNode::IsRead(TResource resource)
下增加重复性isInput
检测./engine/framegraph
下Turbo::FrameGraph::TFrameGraph::ToMermaid()
下增加对input
资源的解析./engine/framegraph
下Turbo::FrameGraph::TFrameGraph::ToMermaid()
下struct linkStyle
下增加enum Type
成员枚举,并增加Type type
成员变量,移除bool isWrite
成员变量./engine/framegraph
下Turbo::FrameGraph::TPassNode::AddRead(...)
中移除assert(!this->IsCreate(resource) && !this->IsWrite(resource))
判断- 更新
./samples
下FrameGraphSample
示例
- 更新
-
2023/1/13 设计架构
- 更新
./samples
下的VulkanTest.cpp
- 更新
-
2023/1/14 设计架构
./engine/core
下Turbo::Core::TGraphicsPipeline
下增加兼容VkPipelineCache
的构造函数,目前为测试研发
-
2023/1/15 设计架构
./engine/core
下增加TPipelineCache.h
和TPipelineCache.cpp
./engine/core
下TPipelineCache
中增加class Turbo::Core::TPipelineCache
./engine/core
下TPipelineCache
中增加TDevice *device
成员变量./engine/core
下TPipelineCache
中增加VkPipelineCache vkPipelineCache
成员变量./engine/core
下TPipelineCache
中增加size_t size
成员变量./engine/core
下TPipelineCache
中增加void *data
成员变量./engine/core
下TPipelineCache
中增加void InternalCreate()
成员函数./engine/core
下TPipelineCache
中增加void InternalDestroy()
成员函数./engine/core
下TPipelineCache
中增加TPipelineCache(TDevice *device)
构造函数./engine/core
下TPipelineCache
中增加TPipelineCache(TDevice *device, size_t size, void *data)
构造函数./engine/core
下TPipelineCache
中增加~TPipelineCache()
析构函数./engine/core
下TPipelineCache
中增加VkPipelineCache GetVkPipelineCache()
成员函数./engine/core
下TPipelineCache
中增加size_t GetSize()
成员函数./engine/core
下TPipelineCache
中增加TResult GetData(size_t size, void *dst)
成员函数./engine/core
下TPipelineCache
中增加std::string ToString()
成员函数./engine/core
下TPipelineCache
中增加uint32_t GetHeaderSize()
成员函数./engine/core
下TPipelineCache
中增加enum class TPipelineCacheHeaderVersion
枚举./engine/core
下TPipelineCache
中增加TPipelineCacheHeaderVersion GetHeaderVersion()
成员函数./engine/core
下TPipelineCache
中增加TVendorInfo GetVendor()
成员函数./engine/core
下TPipelineCache
中增加uint32_t GetDeviceID()
成员函数./engine/core
下TPipelineCache
中增加std::vector<uint8_t> GetUUID()
成员函数
-
2023/1/16 设计架构
./engine/core
下TPipeline.h
中构造函数,增加对TPipelineCache
的使用./engine/core
下TPipeline.h
中增加TPipelineCache *pipelineCache
成员变量./engine/core
下TPipeline.h
中增加TPipelineCache *GetPipelineCache()
成员函数./engine/core
下TGraphicsPipeline.h
中移除VkPipelineCache vkPipelineCache
的相关参数和成员,改为使用TPipelineCache
./engine/core
下TComputePipeline
中增加TComputePipeline(TPipelineCache *pipelineCache, TComputeShader *computeShader)
构造函数./engine/core
下TComputePipeline
中更新TComputePipeline::InternalCreate()
成员函数,适配TPipelineCache
来创建TComputePipeline
- 更新
./samples
下的VulkanTest.cpp
- 移除
./engine/core
下TPipelineCache.cpp
中莫名其妙的头文件,应该是clangd
的自动头文件补全搞的 - 移除
./engine/core
下TPipelineCache.cpp
中#include <basetsd.h>
头文件,应该是clangd
的自动头文件补全搞的 - 移除
./engine/core
下TFrameGraph.cpp
中#include <basetsd.h>
头文件,应该是clangd
的自动头文件补全搞的 - 移除
./samples
下VulkanTest.cpp
中移除#include <vcruntime.h>
和#include <vcruntime_string.h>
头文件,应该是clangd
的自动头文件补全搞的 ./engine/core
下TObject.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/framegraph
下TResources
中增加Turbo::FrameGraph::TRenderPass GetRenderPass() const
成员函数- 更新
./samples
下的RenderDesignTest.cpp
- 更新
-
2023/1/19 设计架构
./engine/framegraph
下TRenderPass
中增加Turbo::FrameGraph::TSubpass GetSubpass(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetWrite(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetRead(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetInput(size_t index)
成员函数./engine/framegraph
下TNodeHandle
中增加bool IsValid()
成员函数./engine/render
下TImage
中uint32_t GteHeight() const
成员函数,更改成uint32_t GetHeight() const
。之前拼写错误
-
2023/1/21 设计架构
./engine/core
下TBuffer
中Map
函数中有,当想要映射内存时,目前使用的是用户创建TBuffer
时,是否指定了HOST_ACCESS_RANDOM
或者HOST_ACCESS_SEQUENTIAL_WRITE
标志位,如果设置了该标志位说明内存可以进行映射,但是某些移动设备(手机或笔记本等平台端)上的内存是CPU
与GPU
共存、共享的。换句话说当你在上层创建一个GPU
端的内存(此时用户指定的是DEDICATED_MEMORY
),在底层也许是CPU
和GPU
共享的内存,所以此时根据用户是否指定了HOST_ACCESS_RANDOM
和HOST_ACCESS_SEQUENTIAL_WRITE
标志位来判断是否可以Map
是不合理的,应该查看分配的内存是否有在host
端能够访问,能访问将返回映射的内存指针,反之则返回nullptr
,但是当前VulkanMemoryAllocator
中对于内存分配,如果没有使用Host
端的相关标志位(HOST_ACCESS_RANDOM
或者HOST_ACCESS_SEQUENTIAL_WRITE
),在VulkanMemoryAllocator
中都被认为是不能进行内存映射的,所以需要在Turbo::Render::TBuffer::Copy(...)
中增加额外判断,判断内存是否支持映射./engine/core
下TBuffer
中增加bool IsMappable()
成员函数./engine/core
下TBuffer
中Copy
函数中增加对this->buffer->IsMappable()
的判断./engine/core
下TImage
中增加bool IsMappable()
成员函数
-
2023/1/22 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TContext
中增加class TRenderPassPool
类./engine/render
下TContext
中class TRenderPassPool
下增加class TRenderPassProxy
类
- 更新
-
2023/1/23 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TRenderPassPool
中TRenderPassProxy
增加void Create(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加void Destroy()
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加friend class TRenderPassPool
友元类./engine/render
下TRenderPassPool
中Find(...)
函数更改成TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TRenderPassPool
中增加TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中增加void Free(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加bool IsValid()
成员函数
- 更新
-
2023/1/26 设计架构
./engine/render
下TRenderPassPool
更新完善Find(...)
函数算法./engine/render
下TImage.h
中增加typedef enum TSampleCountBits
./engine/render
下TImage.h
中增加using TSampleCounts = uint32_t
./engine/render
下TImage
中增加TSampleCountBits GetSampleCountBits() const
成员函数,目前只支持Turbo::Render::TSampleCountBits::SAMPLE_1_BIT
./engine/render
下TContext.h
中TRenderPassPool
构造函数增加TContext *context
参数./engine/render
下TContext.h
中TRenderPassPool::TRenderPassProxy
中Create
函数增加TContext *context
参数./engine/render
下TContext.h
中TRenderPassPool::TRenderPassProxy
中更新完善Create
函数- 更新
./docs/Design/
下的FrameGraphAdvance.md
-
2023/1/27 设计架构
./engine/render
下TImage
中增加friend class TRenderPassPool
友元类./engine/render
下TContext.h
中TRenderPassPool
中TRenderPassProxy
中,更新完善Create(...)
函数./engine/render
下TContext.h
中TRenderPassPool
中,更新完善~TRenderPassPool()
析构函数- 更新
./samples
下RenderDesignTest
示例
-
2023/1/28 设计架构
- 更新
./samples
下VolumetricCloud
示例中的对于./asset/shaders/volumetric_cloud.frag
中对于高频细节纹理使用的算法
- 更新
-
2023/1/31 设计架构
- 有关
./samples
下VolumetricCloud
示例中对于体积云光照渲染,总是渲染不出满意的效果。国外常见的体积云渲染的论文、文章之类的也零零散散的看了,大部分的文章套路就是,先把一长串光照传输方程列出来,讲讲朗伯-比尔定律,讲讲Phase
相函数(米氏散射,H-G散射,瑞利散射,几何散射等等),讲讲内散射、外散射、吸收以及消亡之间的关系,略过了大量的细节,到后文的相关实现,更是略之又略(比如寒霜引擎的那片文章,散射、外散射、吸收以及消亡系数如何计算并没有说明,有的文章直接拿采样密度作为消亡系数,等等很多问题),而且不同文章都有各自的实现(特别是计算采样点到太阳之间的光照,一个人一个写法),很难获得一个统一的、较明确的实现原理和过程(说白了就是,文章的实现和理论有时并不是一一对应的),这就会导致看的越多越迷惑(只能说大致相同,落到细节疑问百出),所以我尝试将Production Volume Rendering SIGGRAPH 2017 Course
文章(该文章较理论化,原文放到了./docs
下volumePaper.pdf
)翻译到./docs/VolumetricCloud.md
文档中(光照章节),希望在边学边翻译的过程中能解决之前的疑问吧 - 更新
./docs
下VolumetricCloud.md
文档
- 有关
-
2023/2/1 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/2 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/3 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/4 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/6 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/7 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/8 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/9 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/10 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/render
下TImage.h
中TImage
中增加virtual void CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TImage.h
中TImage::Create(...)
中增加对virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
成员函数的调用./engine/render
下TTexture2D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TTexture3D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TDepthTexture2D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TImage
的Destroy
成员函数中进行ImageView
的资源回收./engine/render
下TImage
的IsValid()
成员函数中增加对ImageView
的判断- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/11 设计架构
./engine/render
下TRenderPass.h
中TRenderPass
中增加Turbo::Core::TRenderPass *renderPass = nullptr
成员变量./engine/render
下TRenderPass.h
中TRenderPass
中增加friend class TRenderPassPool;
友元类./engine/render
下TContext
中将TRenderPassProxy
移除./engine/render
下TContext
中将std::vector<TRenderPassProxy> renderPassProxies
更改成std::vector<TRenderPass> renderPasses
./engine/render
下TContext
中将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/render
下TContext
中将TRenderPassPool
中移除void DestroyRenderPass(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TContext
中将TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)
更改成bool Find(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TContext
中将TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)
更改成bool Allocate(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TRenderPass
中增加bool IsValid()
函数
-
2023/2/13 设计架构
./engine/render
下TContext.h
中增加TFrameBufferPool
类./engine/render
下TContext.h
中TRenderPassPool
中的成员函数void CreateRenderPass(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)
修改成void CreateRenderPass(Turbo::Render::TRenderPass &renderPass)
,其中的Turbo::Render::TContext *context
在TRenderPassPool
中存在对应的成员变量./engine/render
下TContext.h
中TRenderPassPool
中的成员变量std::vector<TRenderPass> renderPasses;
修改成std::vector<TRenderPass> renderPasses;
./engine/render
下TRenderPass.h
中TRenderPass
中增加Turbo::Core::TFramebuffer *framebuffer
成员变量
-
2023/2/14 设计架构
- 修改
./engine/core
下TPhysicalDevice
中GetMaxImageExtent()
中增加当格式不被支持时的判断 - 修改
./engine/core
下TPhysicalDevice
中GetMaxImageMipLevels()
中增加当格式不被支持时的判断 - 修改
./engine/core
下TPhysicalDevice
中GetMaxImageArrayLayers()
中增加当格式不被支持时的判断 - 修改
./engine/core
下TPhysicalDevice
中GetSupportImageSampleCounts()
中增加当格式不被支持时的判断 - 修改
./engine/core
下TPhysicalDevice
中GetMaxImageResourceSize()
中增加当格式不被支持时的判断 ./engine/core
下TPhysicalDevice
中增加bool IsFormatSupportImage(...)
成员函数./engine/core
下TImage
中InternalCreate()
中增加对于格式是否支持的判断./engine/render
下TRenderPass
中增加friend class TFramebufferPool
使得TFramebufferPool
在分配之后将结果刷新到TRenderPass
中- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/core
下TFramebuffer
中增加std::vector<TImageView *> GetAttachments()
成员函数./engine/render
下TRenderPass
下增加std::vector<Turbo::Render::TImage> GetAttachments();
成员函数./engine/render
下TImage
下增加bool operator ==(const TImage& image)
成员函数./engine/render
下TImage
下增加bool operator !=(const TImage& image)
成员函数./engine/render
下TImage
下增加friend class TFramebufferPool
友元类./engine/render
下TContext.h
下的TFramebufferPool
基本完成
- 修改
-
2023/2/15 设计架构
./engine/render
下TRenderPass
中IsValid()
成员函数,增加对于Turbo::Core::TFramebuffer *framebuffer
成员变量的判断./engine/render
下TRenderPassPool
中增加TFramebufferPool *framebufferPool;
成员变量,增加对于Turbo::Core::TFramebuffer
的分配./engine/render
下TRenderPassPool
中增加Allocate(...)
成员函数,增加对于Turbo::Core::TFramebuffer
的分配./engine/render
下TContext
中增加TRenderPassPool *renderPassPool
成员变量,并在构造函数和析构函数中进行创建和销毁./engine/render
下TRenderPass
中增加friend class TContext;
友元类./engine/render
下TContext
中更新完善BeginRenderPass(...)
成员函数./samples
下增加PushConstantTest
例子,用于测试Vulkan
的Push Constant
./engine/render
下TContext
中增加void EndRenderPass();
成员函数./engine/render
下TRenderPass
中增加bool IsEmpty() const
成员函数./engine/render
下TSubpass
中增加bool IsEmpty() const
成员函数
-
2023/2/16 设计架构
./engine/render
下TContext
中BeginRenderPass(...)
成员函数增加bool
返回结果./engine/render
下TImage
中Create()
成员函数中增加Layout
从UNDEFINED
转成GENERAL
的测试代码./engine/render
下TContext
中增加void ClearTexture(Turbo::Render::TTexture2D &texture2D, float r = 0, float g = 0, float b = 0, float a = 0)
成员函数./engine/render
下TImage
中增加friend class TContext
友元类./engine/render
下TContext
构造函数中,修改对于Window
系统中VK_KHR_WIN32_SURFACES
扩展对应错误的Bug
-
2023/2/17 设计架构
./engine/render
下TContext
中增加Turbo::Core::TImage *GetTextureImage(Turbo::Render::TTexture2D texture2d)
成员函数,该函数仅用于测试,请谨慎调用./samples
下增加RenderAndFrameGraph
例子,用于测试使用FrameGraph
来驱动Turbo
进行绘制。./samples
下VolumetricCloud
例子,中用于体积云的着色器文件对应目录被误改了,修正
-
2023/2/18 设计架构
./samples
下增加ClearColorTest
例子,用于测试Vulkan
清空颜色测试
-
2023/2/19 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
- 更新
-
2023/2/20 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/21 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/22 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/render
下TBuffer.h
中增加TVertexBuffer
类./engine/render
下TBuffer.h
中TVertexBuffer
类中声明typedef enum TRate
枚举./engine/render
下TBuffer.h
中TVertexBuffer
类中声明class TAttribute
类./engine/render
下TBuffer.h
中TVertexBuffer
类中声明std::vector<TVertexBuffer::TAttribute> attributes
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明struct Descriptor
成员结构./engine/render
下TBuffer.h
中TVertexBuffer
类中声明uint32_t stride
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TRate rate
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TAttributeID AddAttribute(Turbo::Render::TFormat format, uint32_t offset)
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TAttribute GetAttribute(TAttributeID id)const
成员函数
- 更新
-
2023/2/23 设计架构
./engine/render
下TBuffer.h
中TVertexBuffer
类中声明uint32_t GetStride() const
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TRate GetRate()const
成员函数
-
2023/2/24 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/render
下TFormat.h
中增加R32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32B32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32B32A32_SFLOAT
成员枚举./engine/render
下TContext.h
中TContext
增加void BindVeretxAttribute(const Turbo::Render::TVertexBuffer &vertexBuffer, Turbo::Render::TAttributeID attributeID, uint32_t location)
成员函数./engine/render
下TContext.h
中TContext
增加std::vector<Turbo::Core::TVertexBinding *> vertexBindings
成员变量,用于管理和暂存绑定的顶点信息./engine/render
下TBuffer.h
中TBuffer
增加bool IsValid() const
成员函数./engine/render
下TBuffer.h
中TBuffer
增加friend class TContext;
友元类./engine/render
下TContext.h
中TContext
增加std::vector<Turbo::Core::TBuffer *> vertexBuffers
成员变量,用于管理和暂存绑定的顶点缓冲./engine/render
下TBuffer.h
中TVertexBuffer
中TAttribute
增加bool IsValid() const;
成员函数- 修改
./engine/core
下TVertexBinding
中AddAttribute(...)
成员函数的算法(防止重复的location
,如果有重复的location
,将对应的属性覆盖刷新) ./engine/core
下TVertexAttribute
中增加void SetLocation(uint32_t location)
成员函数./engine/core
下TVertexAttribute
中增加void SetFormatType(TFormatType formatType)
成员函数./engine/core
下TVertexAttribute
中增加void SetOffset(uint32_t offset)
成员函数
- 更新
-
2023/2/25 设计架构
- 修正
./samples
下RenderAndFrameGraph.cpp
示例中,由于Layout
转换Bug
导致什么也不显示。
- 修正
-
2023/2/26 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/27 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
- 更新
-
2023/2/28 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/render
下TBuffer.h
中新增TIndexBuffer
类,继承自Turbo::Render::TBuffer
。用于代表索引缓冲
- 更新
-
2023/3/1 设计架构
./engine/render
下TBuffer.h
中TIndexBuffer
类中增加void Copy(const std::vector<uint32_t>& indexs)
成员函数./engine/render
下TBuffer.h
中TIndexBuffer
类中增加void Copy(const std::vector<uint16_t>& indexs)
成员函数./engine/render
下TBuffer.h
中增加TUniformBuffer
类
-
2023/3/2 设计架构
./engine/render
下TBuffer.h
中TUniformBuffer
类增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TBuffer.h
中TUniformBuffer
类增加void Copy(const T &uniform)
成员函数
-
2023/3/3 设计架构
./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture2D> &texture2Ds)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture2D &texture2D)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture3D &texture3D)
成员函数./engine/render
下TContext.h
中TContext
类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)
成员函数./engine/render
下TContext.h
中TContext
类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)
成员函数./engine/render
下TContext.h
中TContext
类中增加using TSetID = uint32_t
成员声明./engine/render
下TContext.h
中TContext
类中增加using TBindingID = uint32_t
成员声明./engine/render
下TContext.h
中TContext
类中增加typedef enum class TDescriptorMapType
成员枚举./engine/render
下TContext.h
中TContext
类中增加typedef struct TDescriptorID
成员结构体声明./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TBuffer *>, TDescriptorID> uniformBufferMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<std::pair<Turbo::Core::TImageView *, Turbo::Core::TSampler *>>, TDescriptorID> combinedImageSamplerMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TImageView *>, TDescriptorID> sampledImageMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TSampler *>, TDescriptorID> samplerMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TSetID, std::map<TBindingID, TDescriptorMapType>> descriptorMap
成员变量
-
2023/3/5 设计架构
./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture2D &texture2D)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture3D &texture3D)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)
成员函数- 更新
./docs/Design
下FrameGraphAdvance.md
文档 ./engine/render
下增加TSampler.h
和TSampler.cpp
用于表示Sampler
./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TFilter
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TMipmapMode
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TAddressMode
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加Turbo::Core::TSampler *sampler = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加struct Descriptor
成员声明./engine/render
下TSampler.h
中TSampler
类中增加friend class TContext
友元类./engine/render
下TSampler.h
中TSampler
类中增加void *allocator = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加Turbo::Core::TSampler *sampler = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加Descriptor descriptor
成员变量./engine/render
下TSampler.h
中TSampler
类中增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中增加void Destroy(void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中增加bool IsValid() const
成员函数
-
2023/3/6 设计架构
./engine/render
下TResourceAllocator.h
中TResourceAllocator
类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)
成员函数./engine/render
下TResourceAllocator.h
中TResourceAllocator
类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)
成员函数./engine/render
下TContext.h
中TContext
类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)
成员函数./engine/render
下TContext.h
中TContext
类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)
成员函数./engine/render
下TSampler.h
中TSampler
类中更新void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中更新void Destroy(void *allocator)
成员函数- 更新
./docs/Design
下FrameGraphAdvance.md
文档
-
2023/3/7 设计架构
./engine/render
下TContext.h
中增加TGraphicsPipelinePool
类./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加std::map<Turbo::Core::TRenderPass *, std::map<uint32_t /*subpass*/, std::vector<Turbo::Core::TGraphicsPipeline *>>> graphicsPipelineMap
成员变量./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加bool Allocate(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加bool Find(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void CreateGraphicsPipeline(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void Free(Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TRenderPass.h
中TRenderPass
类中增加friend class TGraphicsPipelinePool
友元类./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加friend class TGraphicsPipelinePool
友元类./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Core::TGraphicsPipeline *graphicsPipeline = nullptr
成员变量
-
2023/3/8 设计架构
./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加TContext *context
成员变量./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加TGraphicsPipelinePool(TContext *context)
构造函数./engine/render
下TContext.h
中TContext
类中增加std::vector<Turbo::Core::TVertexBinding *> GetVertexBindings()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Render::TVertexShader *GetVertexShader()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Render::TFragmentShader *GetFragmentShader()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TTopology GetTopology()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetPrimitiveRestartEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetPatchControlPoints()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthClampEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetRasterizerDiscardEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TPolygon GetPolygon()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCull GetCull()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TFront GetFront()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthBiasEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasConstantFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasClamp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasSlopeFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetLineWidth()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthWriteEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetDepthCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthBoundsTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetStencilTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontPassOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontDepthFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetStencilFrontCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontCompareMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontWriteMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontReference()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackPassOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackDepthFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetStencilBackCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackCompareMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackWriteMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackReference()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetMinDepthBounds()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetMaxDepthBounds()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetLogicOpEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TLogicOp GetLogicOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetBlendEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetSrcColorBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetDstColorBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendOp GetColorBlendOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetSrcAlphaBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetDstAlphaBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendOp GetAlphaBlendOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TGraphicsPipeline
友元类./engine/render
下TShader.h
中TComputeShader
类中增加Turbo::Core::TComputeShader * GetComputeShader()
成员函数./engine/render
下TShader.h
中TVertexShader
类中增加Turbo::Core::TVertexShader * GetVertexShader()
成员函数./engine/render
下TShader.h
中TFragmentShader
类中增加Turbo::Core::TFragmentShader * GetFragmentShader()
成员函数./engine/render
下TContext.h
中TContext
类中增加void Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void GC()
成员函数./engine/render
下TContext.h
中TFramebufferPool
类中增加void GC()
成员函数./engine/render
下TContext.h
中TRenderPassPool
类中增加void GC()
成员函数./engine/render
下TContext.h
中增加void GC()
成员函数./engine/render
下TContext.h
中增加TGraphicsPipelinePool *graphicsPipelinePool
成员变量./engine/render
下TContext.h
中增加Turbo::Render::TGraphicsPipeline currentGraphicsPipeline
成员变量./engine/render
下TContext.h
中增加Turbo::Render::TRenderPass currentRenderPass
成员变量./engine/render
下TContext.h
中增加uint32_t currentSubpass
成员变量
-
2023/3/9 设计架构
./engine/core
下TShader.h
中TShader
类中增加对于DirStackFileIncluder
的使用,使得Turbo
支持解析带有#include
的着色器代码./engine/core
下TShader.h
中TVertexShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./engine/core
下TShader.h
中TFragmentShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./engine/core
下TShader.h
中TComputeShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./samples
下增加ShaderIncludeTest
示例,用于测试着色器的#include
特性
-
2023/3/10 设计架构
./samples
下增加GreenFieldDiorama
示例,用于测试多通道,颜色附件,纹理采样,着色器#include
等
-
2023/3/13 设计架构
- 修正
./engine/render
下TRenderPass
类中GetAttachments()
对于深度模板纹理的信息收集Bug
- 修正
./engine/render
下TContext
类中BindVeretxAttribute()
对于顶点绑定索引的计算错误Bug
- 修正
./engine/render
下TRenderPassPool
类中Find()
对于深度模板附件未对空指针进行检查Bug
./samples
下增加PureHelloTriangleAndFrameGraph
示例,用于测试基于FrameGraph
驱动Turbo
绘制一个纯三角形
- 修正
-
2023/3/14 设计架构
- 修正
./samples
下PureHelloTriangleAndFrameGraph
示例,在改变窗口大小时导致的VkImageView
无效的Bug
,该Bug
的原因是一帧结束,并且当窗口大小改变时没有及时回收FrameBuffer
的资源
- 修正
-
2023/3/15 设计架构
./docs/Design
下增加Core.md
文档。用于记录Turbo
核心的相关设计- 尝试解决
内存泄漏
的Bug
-
2023/3/16 设计架构
- 尝试解决
内存泄漏
的Bug
- 经过多次测试和探索,
内存泄漏
位于vkCreatePipelineLayout
和vkDestroyPipelineLayout
函数内部,而这一部分属于显卡驱动范畴,大概率是GPU
驱动Bug
- 尝试解决
-
2023/3/17 设计架构
- 确定
vkCreatePipelineLayout
和vkDestroyPipelineLayout
发生的内存泄漏是NVIDIA GPU
驱动Bug
,Game Ready Driver
驱动版本为531.29
发布日期为2023/03/14
- 修正添加
./engine/core
下TDescriptorSetLayout
类中~TDescriptorSetLayout()
成员函数对于Turbo::Core::TNaNDescriptor
资源内存的释放回收。
- 确定
-
2023/3/19 设计架构
./samples
下增加VulkanDynamicRenderingTest
示例,用于测试Vulkan
的Dynamic Rendering
特性./engine/core
下TExtensionInfo
中TExtensionType
增加VK_KHR_DYNAMIC_RENDERING
扩展./engine/core
下TExtensionInfo
中TAllExtensionNames
增加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.h
中class TPhysicalDeviceFeatures
增加bool geometryShader
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool tessellationShader
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool sampleRateShading
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool depthClamp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool depthBiasClamp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool wideLines
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool fillModeNonSolid
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool timelineSemaphore
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool dynamicRendering
成员变量声明./engine/core
下的TPhysicalDevice.h
中class 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.h
中TVulkanLoader
类中LoadAllInstanceFunctions(TInstance *instance)
增加对于Turbo::Core::vkGetPhysicalDeviceFeatures2
函数的获取./engine/core
下的TPhysicalDevice.h
中TPhysicalDevice
类中EnumerateProperties()
成员函数中增加对于VkPhysicalDeviceVulkan11Features
,VkPhysicalDeviceVulkan12Features
和VkPhysicalDeviceVulkan13Features
数据的获取
-
2023/3/22 设计架构
./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool samplerAnisotropy
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool logicOp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDevice
移除VkPhysicalDeviceFeatures GetDeviceFeatures()
成员函数./engine/core
下的TPhysicalDevice.h
中class TPhysicalDevice
增加TPhysicalDeviceFeatures GetDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中移除TDevice(TPhysicalDevice *, std::vector<TLayerInfo> *, std::vector<TExtensionInfo> *, VkPhysicalDeviceFeatures *)
构造函数./engine/core
下的TDevice.h
中class TDevice
中移除VkPhysicalDeviceFeatures enabledFeatures
成员变量./engine/core
下的TDevice.h
中class TDevice
中增加TPhysicalDeviceFeatures enabledFeatures
成员变量./engine/core
下的TDevice.h
中class TDevice
中移除VkPhysicalDeviceFeatures GetEnableDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中增加TPhysicalDeviceFeatures GetEnableDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中InternalCreate()
成员函数中增加对于Vulkan1.1
,Vulkan1.2
和Vulkan1.3
的Feature
激活./engine/core
下的TVulkanLoader.h
中class TVulkanLoader
中增加对于vkCmdBeginRendering
和vkCmdEndRendering
两个函数的获取- 更新
./docs/Design/Core.md
文档
-
2023/3/25 设计架构
./engine/core
下的新建TRenderingPipeline.h
和TRenderingPipeline.cpp
./engine/core
下TRenderingPipeline.h
中增加声明TRenderingPipeline
类./engine/core
下TRenderingPipeline.h
中增加声明TRenderingAttachments
类./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加std::vector<TFormatType> colorAttachmentFormats
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加TFormatType depthAttachmentFormat
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加TFormatType stencilAttachmentFormat
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void AddColorAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void SetDepthAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void SetStencilAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const std::vector<TFormatType> &GetColorAttachmentFormats() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const TFormatType &GetDepthAttachmentFormat() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const TFormatType &GetStencilAttachmentFormat() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加``成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TRenderingAttachments renderingAttachments
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TTopologyType topology
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool primitiveRestartEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加std::vector<TVertexBinding> vertexBindings
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthClampEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool rasterizerDiscardEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TPolygonMode polygonMode
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCullModes cullMode
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TFrontFace frontFace
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthBiasEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasConstantFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasClamp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasSlopeFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float lineWidth
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool multisampleEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TSampleCountBits sample
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthWriteEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp depthCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthBoundsTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool stencilTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontPassOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontDepthFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp frontCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontCompareMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontWriteMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontReference
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backPassOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backDepthFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp backCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backCompareMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backWriteMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backReference
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float minDepthBounds
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float maxDepthBounds
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool logicOpEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TLogicOp logicOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool blendEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor srcColorBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor dstColorBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendOp colorBlendOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor srcAlphaBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor dstAlphaBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendOp alphaBlendOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantR
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantG
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantB
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantA
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加virtual void InternalCreate() override
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加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/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加virtual void InternalDestroy() override
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加~TRenderingPipeline()
析构函数
-
2023/3/27 设计架构
- 完成
./sample
下的VulkanDynamicRenderingTest
示例
- 完成
-
2023/3/29 设计架构
./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
重命名为class TAttachmentsFormat
./engine/core
下TRenderingPipeline.h
中增加class TRenderingAttachments
./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
增加void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
增加void CmdEndRendering()
成员函数./engine/core
下TRenderingPipeline.h
中增加typedef enum TResolveModeBits
枚举./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加struct TRenderingAttachment
结构体声明./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加std::vector<TRenderingAttachment> colorAttachments
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加TRenderingAttachment depthAttachment
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加TRenderingAttachment stencilAttachment
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数- 更新
./docs/Design/Core.md
文档
-
2023/3/30 设计架构
./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加friend class TCommandBufferBase
友元类声明,使得在TCommandBufferBase
中记录指令时能够访问到对应数据./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
完善实现void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
完善实现void CmdEndRendering()
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
中void 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.3
中Dynamic Rendering
特性
-
2023/4/3 设计架构
./engine/core
下TSurface
构造函数中增加对于Surface
扩展是否已经激活的判断./engine/core
下TSwapchain
构造函数中增加对于Swapchain
扩展是否已经激活的判断
-
2023/4/4 设计架构
./asset/images
下增加RockCliffLayered
文件夹,用于存储RockCliffLayered
的PBR
纹理./samples
中增加NormalTexture
例子,用于尝试使用法线纹理获得切线空间的法线
-
2023/4/5 设计架构
./samples
中更新完善NormalTexture
例子./samples
中增加BRDF
例子,用于尝试实现常见的PBR
纹理流程渲染
-
2023/4/6 设计架构
./samples
中修改NormalTexture
例子中my_buffer
的TBuffer
的大小值,之前是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/core
下TShader.h
中增加class TTessellationControlShader
类./engine/core
下TShader.h
中增加class TTessellationEvaluationShader
类./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, uint32_t patchControlPoints, ...)
构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加uint32_t patchControlPoints
成员变量./engine/core
下TPipeline.h
中class TPipeline
中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)
构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
的InternalCreate()
成员函数中增加对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/core
下TShader.h
中增加class TGeometryShader
类./samples
中增加GeometryShaderTest
例子,用于测试研究Vulkan
中的几何着色器特性./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, ...)
支持几何着色器的构造函数./engine/core
下TPipeline.h
中class 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/core
下TDescriptorSetLayout.h
中class TDescriptorSetLayout
中InternalCreate()
成员函数中增加对于重复Binding
描述符号的检查筛选,并且合并不同着色器使用相同描述符的ShaderStageFlag