Turbo
Turbo copied to clipboard
Turbo is rendering engine base Vulkan
Turbo
Turbo是渲染引擎

Platform
Version
当前版本 0.0.0.12
State
- 研究开发
Vulkan硬件实时光追。 - 研究开发
C/C++开发WebGPU项目,并发布到浏览器页面中。./sample下新增PureCCppWebGPUTest项目,详细信息请参考 WebGPU : C/C++ 文档。./sample下新增PureCCppMiniWebGPUTest项目。
Sponsor
想赞助的小伙伴,欢迎使用爱发电赞助,请量力而为,如果赞助完真有困难可以退回,未成年人禁止投喂!!!

赞助项目
- 体积云教程:详情请阅览
./docs/VolumetricCloud.md(进行中)<研究光照散射中>
Document
- 相关文档现在可以在Vulkan入门精要中查阅。比如Vulkan KHR 光线追踪标准。
- 详细设计文档请参考
docs/TurboDesign.drawio(需要安装drawwio) - 目前存在的问题待解决,请查看
docs/Issue.md - 开发记录录像请浏览 Turbo引擎开发记录
Modular
目前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层脱离出来,提供更加简单易用的设计架构
Clone
git clone --recursive [email protected]:FuXiii/Turbo.git
Build
-
首先您需要知道的:
-
Turbo目前主要有两个分支:master和dev。其中master是主分支,确保可以正常编译和使用,而dev分支会经常开发新功能,想看开发推进的可以查看dev分支,但不保证能够正常编译。 -
Turbo引擎被设计成各种模块,有Core核心模块, 有FrameGraph模块等。 -
目前
Turbo的核心模块基本完成(未完成部分和相关问题请参考下面的RoadMap章节和docs/Issue.md文档) -
Turbo引擎的核心位于./engine/core,这是一个单独的模块,您可以直接将他拷贝出来放到自己的工程中 -
Turbo引擎会使用核心进行渲染,有关如何使用该核心,目前可以参考./main.cpp和./samples文件夹下各个示例。该文件中有最新的核心实例代码,同时也是引擎的一部分。 -
核心会用到的第三方库为:
glslang: 用于将Shader代码字符串编译成Spir-VSPIRV-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即可,~~Linux系统等有空适配一下~~(2022/11/14Linux适配完成))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的库文件。- 2023/9/21 添加了
TCORE_SHARED_LIBS的CMake选项。用于配置是否输出TCore的动态库。默认情况下为OFF,也就是输出静态库,如果想输出动态库请设置为ON。
- 2023/9/21 添加了
-
如果您想直接编译
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=OFF VMA_DYNAMIC_VULKAN_FUNCTIONS=ON TCORE_SHARED_LIBS=ON //2023/9/21 Turbo的核心库输出为动态库,如果想输出为静态库请设置为OFF
-
注:如果编译有遇到问题请查看
常见问题文档如果还是没有解决方法请提Issue -
-
如何运行
- 由于每个用户输出的目录都不一样,所以
./main.cpp的示例程序使用的资源文件使用的是相对路径,所有的资源文件都指向./asset/目录,请在./main.cpp中全局搜索asset字符,替换成自己的目录即可。
注:如果运行有遇到问题请查看
常见问题文档如果还是没有解决方法请提Issue - 由于每个用户输出的目录都不一样,所以
Trifles
- 整理一下头文件,有点乱,去掉不必要的头文件
RoadMap
注:该RoadMap章节信息有滞后性,引擎具体细节和开发计划请查看后面的开发Log章节(更新的比较频繁)
2022/5/15
Turbo引擎对于Vulkan 1.0的相关核心功能已初步成型,由于Vulkan本身的复杂性还有很多特性没有实现,在此做一下记录,记录该引擎以实现的特性和未来计划实现特性,该特性记录将会和docs/Issue.md文档配合使用。Core核心层将会作为单独完整的库发布,位于./engine/core中, 现在核心库已分离成单独的库,将会输出TCore.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::vkPipelineTurbo::Core::TDescriptorSet-VkDescriptorSet的相关封装Turbo::Core::TPipelineDescriptorSet- 管线所有有关描述符集的总和抽象,对应多个Turbo::Core::TDescriptorSetTurbo::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)系统的手机,有时间适配一下鸿蒙设备。
Log
-
2020/10/29
- 完成
TInstanceTLayerTObject的文档,创建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转成TExtensionInfoTLayer转成TLayerInfosTFormat转成TFormatInfoTMemoryHeap转成TMemoryHeapInfoTMemoryType转成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现在完全使用内置内存分配器TVulkanAllcatorTDeviceQueue重构进行中
- 优化了
-
2022/4/5 设计架构
TPhysicalDevice中增加void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)函数TDeviceQueue基于数据驱动,基本重构完成,遗弃了TDeviceQueueCreateInfo和VkAllocationCallbacks,Turbo现在完全使用内置内存分配器TVulkanAllcatorTCommandBufferPool基于数据驱动,基本重构完成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的VkDescriptorSetLayoutBindingTurbo::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::SUCCESSTFence中新增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替换成了TFormatInfoTImage增加TSampleCountBits GetSampleCountBits()函数,用于获取采样数VkVertexInputBindingDescription和VkVertexInputAttributeDescription基本描述框图TurboDesign.drawwio整理完成
-
2022/4/30 设计架构
TPipeline.h中增加TVertexAttribute,TVertexBinding类,分别用于表示VkVertexInputAttributeDescription和VkVertexInputBindingDescriptionTPipeline.h中增加typedef enum class TVertexRate类,用于表示VkVertexInputRateTPipeline.h中剔除VkVertexInputBindingDescription和VkVertexInputAttributeDescription的使用,改为使用TVertexAttribute,TVertexBinding
-
2022/5/1 设计架构
TFormatInfo.h中,构造函数声明去掉explicit,使得可直接使用TFormatType进行隐示类型转换到TFormatInfoTPipeline.h中增加typedef enum class TTopologyType用于对应VkPrimitiveTopologyTPipeline.h中对于VkPrimitiveTopology替换成使用TTopologyTypeTPipeline.h中增加typedef enum class TPolygonMode用于对应VkPolygonModeTPipeline.h中对于VkPolygonMode替换成使用TPolygonModeTPipeline.h中增加typedef enum TCullModeBits用于对应VkCullModeFlagBitsTPipeline.h中增加typedef VkFlags TCullModes用于对应VkCullModeFlagsTPipeline.h中对于VkCullModeFlags替换成使用TCullModesTPipeline.h中增加typedef enum class TFrontFace用于对应VkFrontFaceTPipeline.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和VkPipelineStageFlagsTurbo.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和VkFormatFeatureFlagsTFormatInfo增加如下函数:
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 #endifTDescriptor.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)函数用于调用vkQueuePresentKHRTDeviceQueue中增加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_SAMPLERTShader.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*成员变量,用于指代该描述符所属哪个TShaderTShader中增加如下函数:
const std::vector<TUniformBufferDescriptor *> &GetUniformBufferDescriptors; const std::vector<TCombinedImageSamplerDescriptor *> &GetCombinedImageSamplerDescriptors;目前
Turbo只实现了这两个,更多待以后实现- (转移到
TPipelineLayout中) 目前TPipeline中增加了std::vector<TDescriptorSetLayout *> descriptorSetLayouts成员变量,用于存储当前管线的描述符集合布局 - 新增
TPipelineLayout类 - 新增
TPipeline中开始使用TPipelineLayout - 新增
TPipelineDescriptorSet类 TDescriptorPool适配TPipelineDescriptorSetTDescriptorSet中增加uint32_t GetSet()成员函数TCommandBuffer中增加void CmdBindPipelineDescriptorSet(TPipelineDescriptorSet* pipelineDescriptorSet)成员函数,用于适配TPipelineDescriptorSetDescriptor目前初步重构完成
- 开始重构
-
2022/5/13 设计架构
TResult::SUBOPTIMAL更改成TResult::MISMATCHTSurface中有关获取当前大小的函数可以动态获取当前大小了,不需要delete之后重新new了TSwapchain中增加TSwapchain(TSwapchain *oldSwapchain)构造函数,用于重新创建TSwapchain
-
2022/5/14 设计架构
TDescriptor.h中的typedef enum class TShaderDataType更改成typedef enum class TDescriptorDataTypeTDescriptor.h中增加class TSampledImageDescriptor和TSamplerDescriptor,用于对应VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE和VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLERTShader中增加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等价于vkCmdBlitImageengine/下新建core文件夹用于存放Turbo核心engine/core/include/Turbo.h更改成TCore.hengine/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 ConstantTShader增加std::vector<TPushConstantDescriptor *> pushConstantDescriptors和相应的获取函数。TPipelineLayout和TPipeline中适配TPushConstantDescriptorsTUniformBufferDescriptor和TPipeline中增加uint32_t size成员属性和相应的获取函数,用于表示数据块大小TCommandBuffer中增加void CmdPushConstants(...)成员函数,对应vkCmdPushConstants(...)
- 将
-
2022/5/23 设计架构
TBuffer中增加void Flush(...)成员函数,用于刷新数据到GPU domainTSubpass中GetDepthStencilAttachmentReference()有Bug,现已修改完毕
-
2022/5/24 设计架构
TGraphicsPipeline中移除std::vector<TViewport> &viewports和std::vector<TScissor> &scissors成员,由于核心创建的Pipeline的Viewport和Scissor都是动态状态,Vulkan会忽略VkPipelineViewportStateCreateInfo::pViewports和VkPipelineViewportStateCreateInfo::pScissorsTGraphicsPipeline中增加typedef enum class TCompareOp声明,对应VkCompareOpTGraphicsPipeline中增加typedef enum class TStencilOp声明,对应VkStencilOpTGraphicsPipeline中增加对深度测试和模板测试支持- 调整
TGraphicsPipeline构造函数的参数顺序,填入默认值
-
2022/5/25 设计架构
- 成功渲染
KTX纹理
- 成功渲染
-
2022/5/27 设计架构
- 成功渲染
KTX的Cubemap纹理 - 开始适配几何管线的
Blend TGraphicsPipeline中增加typedef enum class TLogicOp声明,对应VkLogicOpTGraphicsPipeline中增加typedef enum class TBlendFactor声明,对应VkBlendFactorTGraphicsPipeline中增加typedef enum class TBlendOp声明,对应VkBlendOpTGraphicsPipeline构造函数中增加混合相关参数
- 成功渲染
-
2022/5/28 设计架构
- 使用
Turbo核心成功渲染IMGUI
- 使用
-
2022/5/29 设计架构
- 开始适配
input attachment
- 开始适配
-
2022/5/30 设计架构
TDescriptor中增加class TInputAttachmentDescriptor对应VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENTTShader中增加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)构造函数,用于适配waylandTSurface中InternalCreate()适配Linux的waylandTSurface中GetSurfaceSupportQueueFamilys()适配Linux的wayland - 适配
-
2022/6/15 设计架构
- 适配
TSurface基于xcb TSurface中增加xcb_connection_t *connection和xcb_window_t window成员变量,用于适配xcbTSurface中增加适配xcb相应的构造函数TSurface的InternalCreate(...)中通过vkCreateXcbSurfaceKHR(...)适配xcb- 适配
TSurface基于xlib TSurface中增加Display *xlibDpy = nullptr和Window xlibWindow成员变量,用于适配xlibTSurface中增加适配xlib相应的构造函数TSurface的InternalCreate(...)中通过vkCreateXlibSurfaceKHR(...)适配xlibTSwapchain的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_LOADTFrameGraph::TPassAgency(...)中对于形参和模板形参Execute,由于是右值万能引用,所以使用std::forward(...)来完美转发TFrameGraph::CreatePassNode(...)中TAgency*模板参数修改为std::unique_ptr<TAgency>&& agencyTPassNode中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模板形参改回TTFrameGraph::Create(...)中的Virtualizable模板形参改回T
- 解析
-
2022/7/9 设计架构
- 修缮
TFrameGraph::TBuilder::Create(...)函数 TFrameGraph::TResourceAgency(...)中的Virtualizable模板形参改回TTFrameGraph::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_FUNCTIONSandVMA_DYNAMIC_VULKAN_FUNCTIONSto 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修改成继承自TCommandBufferBaseTurbo核心修改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;成员变量,表示当前的SubpassTurbo核心TCommandBufferBase中增加TFramebuffer *currentFramebuffer = nullptr;成员变量,表示当前的FramebufferTurbo核心TSecondaryCommandBuffer中删除void Begin() = delete成员函数调用,转而使用void Begin(TRenderPass *renderPass, TFramebuffer *framebuffer, uint32_t subpass);成员函数Turbo核心TCommandBuffer.h中增加typedef enum class TSubpassContents枚举,用于对应VkSubpassContentsTurbo核心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 TTexture3Dreadme增加平台支持标签./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
-
2023/4/14 设计架构
./samples中增加TessellationAndGeometry例子,用于测试研究Vulkan中的细分着色器和几何着色器配合使用的特性./asset/shaders中增加TessellationAndGeometry.vert细分和几何着色器示例使用的顶点着色器./asset/shaders中增加TessellationAndGeometry.tesc细分和几何着色器示例使用的细分控制着色器./asset/shaders中增加TessellationAndGeometry.tese细分和几何着色器示例使用的细分评估着色器./asset/shaders中增加TessellationAndGeometry.geom细分和几何着色器示例使用的几何着色器./asset/shaders中增加TessellationAndGeometry.frag细分和几何着色器示例使用的片元着色器./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, uint32_t patchControlPoints, ...)支持细分和几何着色器的构造函数./engine/core下TPipeline.h中class TPipeline中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache = nullptr)支持细分和几何着色器的构造函数
-
2023/4/16 设计架构
./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, ...)支持管线缓存的细分着色器的图形管线构造函数./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass*renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TGeometryShader*geometryShader, TFragmentShader *fragmentShader, ...)支持管线缓存的几何着色器的图形管线构造函数./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass*renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader*tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader*geometryShader, TFragmentShader *fragmentShader, ...)支持管线缓存的细分和几何着色器的图形管线构造函数- 更新
./docs/Design/Core.md文档,研究Mesh Shader。 ./samples中增加VulkanFeatureTest例子,用于研究Vulkan特性
-
2023/4/17 设计架构
./samples中移除VulkanFeatureTest例子,改用VulkanTest进行Vulkan接口测试- 更新
./engine/core/include下的Vulkan头文件,当前的VK_HEADER_VERSION为204有点老,更新到247,并且增加Vulkan的vk_video头文件夹
-
2023/4/18 设计架构
- 更新
./engine/core下的TVulkanLoader.h中TVulkanLoader类中的GetVulkanVersion()函数,将其更改为静态函数,并更新内部算法 - 更新
./engine/core下的TInstance.h中TInstance类中的IsSupportVulkan()函数 - 更新
./engine/core下的TInstance.h中TInstance类中的GetVulkanInstanceVersion()函数 - 更新
./docs/Design/Core.md文档
- 更新
-
2023/4/19 设计架构
- 更新
./docs/Design/Core.md文档 ./engine/core下TCore.h中增加#define VULKAN_PHYSICAL_DEVICE_API声明./engine/core下TVulkanLoader.h中增加struct TPhysicalDeviceFunctionTable声明./engine/core下TVulkanLoader.h中增加using TPhysicalDeviceDriver = TPhysicalDeviceFunctionTable声明./engine/core下TPhysicalDevice.h中增加struct TPhysicalDeviceFunctionTable声明./engine/core下TPhysicalDevice.h中增加using TPhysicalDeviceDriver = TPhysicalDeviceFunctionTable声明./engine/core下TPhysicalDevice.h中TPhysicalDevice类中增加TPhysicalDeviceDriver *physicalDeviceDriver成员变量./engine/core下TPhysicalDevice.h中TPhysicalDevice类中增加const TPhysicalDeviceDriver* GetPhysicalDeviceDriver()成员函数./engine/core下TVulkanLoader.h中TVulkanLoader类中增加TPhysicalDeviceDriver LoadPhysicalDeviceDriver(TPhysicalDevice *physicalDevice)成员函数- 更新
./engine/core下TPhysicalDevice.h中TPhysicalDevice类中InternalCreate()增加TPhysicalDeviceDriver* physicalDeviceDriver成员变量的构建和初始化 - 更新
./engine/core下TPhysicalDevice.h中TPhysicalDevice类中InternalDestroy()增加TPhysicalDeviceDriver* physicalDeviceDriver成员变量回收释放 - 更新
./engine/core下TPhysicalDevice.h中TPhysicalDevice类中使用TPhysicalDeviceDriver* physicalDeviceDriver进行Vulkan函数调用 ./engine/core下TVulkanLoader.h中移除全局的PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion声明./engine/core下TVulkanLoader.h中移除全局的PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2声明./engine/core下TVulkanLoader.h中移除全局的PFN_vkCmdBeginRendering vkCmdBeginRendering声明./engine/core下TVulkanLoader.h中移除全局的PFN_vkCmdEndRendering vkCmdEndRendering声明
- 更新
-
2023/4/20 设计架构
./engine/core下TPhysicalDeviceInfo类中增加VkPhysicalDeviceMeshShaderFeaturesEXT meshShaderFeaturesEXT和VkPhysicalDeviceMeshShaderFeaturesNV meshShaderFeaturesNV的成员变量./engine/core下TPhysicalDevice类中EnumerateProperties()成员函数中增加对VkPhysicalDeviceMeshShaderFeaturesEXT和VkPhysicalDeviceMeshShaderFeaturesNV的特性获取和赋值./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool taskShaderNV成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool meshShaderNV成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool taskShaderEXT成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool meshShaderEXT成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool multiviewMeshShaderEXT成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool primitiveFragmentShadingRateMeshShaderEXT成员变量./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool meshShaderQueriesEXT成员变量./engine/core下TPhysicalDevice类中GetDeviceFeatures()中增加对Mesh Shader特性的赋值./samples中增加MeshShaderTest例子,用于研究Mesh Shader./engine/core下TDevice类中InternalCreate()中增加对Mesh Shader特性的赋值
-
2023/4/21 设计架构
- 更新
./docs/Design/Core.md文档 ./engine/core下TExtensionInfo.h中TExtensionType枚举中增加VK_EXT_MESH_SHADER枚举量./engine/core下TExtensionInfo.cpp中TAllExtensionNames数组中增加VK_EXT_mesh_shader字符串./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksEXT vkCmdDrawMeshTasksEXT成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksIndirectCountEXT vkCmdDrawMeshTasksIndirectCountEXT成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksIndirectEXT vkCmdDrawMeshTasksIndirectEXT成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV成员变量,并在TDeviceDriver::LoadDeviceDriver(...)中对应获取./engine/core下TCommandBuffer.h中TCommandBufferBase类中增加void CmdDrawMeshTasksEXT(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)成员函数./engine/core下TCommandBuffer.h中TCommandBufferBase类中增加void CmdDrawMeshTasksNV(uint32_t taskCount, uint32_t firstTask)成员函数
- 更新
-
2023/4/22 设计架构
./engine/core下TDevice.h中TDevice类中增加void InspectExtensionAndVersionDependencies()成员函数用于检查扩展依赖./engine/core下TDevice.h中TDevice类中InternalCreate()成员函数中增加对于设备扩展依赖的检查./engine/core下TPhysicalDevice.h中TPhysicalDevice类中增加TExtensionInfo GetExtensionByType(TExtensionType extensionType)成员函数
-
2023/4/23 设计架构
./engine/core下TDevice.h中TDevice类中更新void InspectExtensionAndVersionDependencies()成员函数用于检查扩展依赖./engine/core下TShader.h中TShader类中更新TShader(...)构造函数中对于glslang::EShTargetClientVersion和glslang::EShTargetLanguageVersion的设置,如果想使用Mesh Shader特性,Spir-V的版本需要大于等于1.4./engine/core下TShader.h中TShaderType枚举中增加TASK枚举值,用于Task Shader./engine/core下TShader.h中TShaderType枚举中增加MESH枚举值,用于Mesh Shader./engine/core下TShader.cpp中TShaderTypeToGlslangEShLanguage(...)增加对于Turbo::Core::TShaderType::TASK到EShLanguage::EShLangTaskNV的转换./engine/core下TShader.cpp中TShaderTypeToGlslangEShLanguage(...)增加对于Turbo::Core::TShaderType::MESH到EShLanguage::EShLangMeshNV的转换./engine/core下TShader.h中TShader类中GetVkShaderStageFlags()成员函数中增加对于Turbo::Core::TShaderType::TASK到VK_SHADER_STAGE_TASK_BIT_EXT的转换./engine/core下TShader.h中TShader类中GetVkShaderStageFlags()成员函数中增加对于Turbo::Core::TShaderType::MESH到VK_SHADER_STAGE_MESH_BIT_EXT的转换./engine/core下TShader.h中TShader类中GetVkShaderStageFlagBits()成员函数中增加对于Turbo::Core::TShaderType::TASK到VK_SHADER_STAGE_TASK_BIT_EXT的转换./engine/core下TShader.h中TShader类中GetVkShaderStageFlagBits()成员函数中增加对于Turbo::Core::TShaderType::MESH到VK_SHADER_STAGE_MESH_BIT_EXT的转换./engine/core下TShader.h中增加TTaskShader类,用于表示Task Shader./engine/core下TShader.h中增加TMeshShader类,用于表示Mesh Shader./asset/shaders中增加MeshShaderTest.mesh的网格着色器文件./asset/shaders中增加MeshShaderTest.frag的片元着色器文件
-
2023/4/24 设计架构
./engine/core/thirdparty下的glslang库改成git的submodule进行管理,随着Vulkan的版本升级,glslang也会跟随更新使得符合Vulkan的新标准(这样Mesh Shader就支持解析相应GLSL扩展了)./engine/core下的TShader.cpp中增加glslang/Public/ShaderLang.h头文件,用于使用glslang中GetDefaultResource()函数./engine/core下的CMakeLists.txt中增加glslang-default-resource-limits库包含./engine/core下的TShader.h中TShader类的构造函数中从hader_glslang.parse(&resources, ...)修改为shader_glslang.parse(GetDefaultResources(), ...)./engine/core下的TShader.h中TShader类的构造函数中移除TBuiltInResource resources的声明和相关使用./engine/core下的TShader.cpp中TShaderTypeToGlslangEShLanguage(...)中返回的EShLangTaskNV更改为EShLangTask./engine/core下的TShader.cpp中TShaderTypeToGlslangEShLanguage(...)中返回的EShLangMeshNV更改为EShLangMesh- 更新
./docs/Design/Core.md文档
-
2023/4/25 设计架构
- 更新
./docs/Design/Core.md文档 ./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, TMeshShader *meshShader, TFragmentShader *fragmentShader, ...)支持Mesh Shader的图形管线构造函数./engine/core下TPipeline.h中class TPipeline中增加TPipeline(TDevice *device, TMeshShader *meshShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)支持Mesh Shader的管线基类构造函数
- 更新
-
2023/4/26 设计架构
- 更新
./docs/FAQ.md文档 ./samples中增加SpecializationConstantsTest例子,用于研究着色器中的常量设定./engine/core下TShader.h中class TShader中InternalParseSpirV()成员函数中增加对于Specialization Constants特化常量的解析
- 更新
-
2023/4/27 设计架构
- 更新
./docs/Design/Core.md文档 ./asset/shaders中增加SpecializationConstantsTest.comp的计算着色器文件,用于测试特化常量
- 更新
-
2023/4/28 设计架构
./engine/core下TShader.h中增加class TSpecializationConstant用于描述特化常量./engine/core下TShader.h中class TShader中增加std::vector<TSpecializationConstant> specializationConstants成员变量./engine/core下TShader.h中class TSpecializationConstant类中增加uint32_t id成员变量./engine/core下TShader.h中class TSpecializationConstant类中增加std::string name成员变量./engine/core下TShader.h中class TSpecializationConstant类中增加Turbo::Core::TDescriptorDataType descriptorDataType成员变量./engine/core下TShader.h中class TSpecializationConstant类中增加uint32_t width成员变量./engine/core下TShader.h中class TSpecializationConstant类中增加TSpecializationConstant(uint32_t id, const std::string &name, Turbo::Core::TDescriptorDataType descriptorDataType, uint32_t width)构造函数./engine/core下TShader.h中class TSpecializationConstant类中增加uint32_t GetConstantID()成员函数./engine/core下TShader.h中class TSpecializationConstant类中增加const std::string &GetName()成员函数./engine/core下TShader.h中class TSpecializationConstant类中增加Turbo::Core::TDescriptorDataType GetDescriptorDataType()成员函数./engine/core下TShader.h中class TSpecializationConstant类中增加uint32_t GetWidth()成员函数./engine/core下TShader.h中class TShader中InternalParseSpirV()成员函数中完善对于Specialization Constants特化常量的解析./engine/core下TShader.h中class TShader中增加const std::vector<TSpecializationConstant> &GetSpecializationConstants()成员函数./engine/core下TPipeline.h中增加class TSpecializations类./engine/core下TPipeline.h中class TSpecializations类中增加union TConstant成员union类型./engine/core下TPipeline.h中class TSpecializations类中增加struct TConstValue成员类型./engine/core下TPipeline.h中class TSpecializations类中增加std::map<uint32_t, TConstValue> specializationMap成员变量./engine/core下TPipeline.h中class TSpecializations类中增加std::map<uint32_t, TConstValue> specializationMap成员变量./engine/core下TPipeline.h中class TSpecializations类中增加void SetConstant(uint32_t id, bool value)成员函数./engine/core下TPipeline.h中class TSpecializations类中增加void SetConstant(uint32_t id, int32_t value)成员函数./engine/core下TPipeline.h中class TSpecializations类中增加void SetConstant(uint32_t id, uint32_t value)成员函数./engine/core下TPipeline.h中class TSpecializations类中增加void SetConstant(uint32_t id, float value)成员函数./engine/core下TPipeline.h中class TSpecializations类中增加void SetConstant(uint32_t id, double value)成员函数./engine/core下TPipeline.h中class TPipeline类中增加std::vector<TSpecializationConstant> specializationConstants成员变量./engine/core下TPipeline.h中class TPipeline类中增加TSpecializations specializations成员变量./engine/core下TPipeline.h中class TPipeline类中所有的构造函数增加TSpecializations *specializations形参./engine/core下TPipeline.h中class TPipeline类中更新InternalCreate()成员函数,统计特化常量./engine/core下TComputePipeline.h中class TComputePipeline类中增加TComputePipeline(TSpecializations *specializations, TComputeShader *computeShader)构造函数./engine/core下TComputePipeline.h中class TComputePipeline类中增加TComputePipeline(TPipelineCache *pipelineCache, TSpecializations *specializations, TComputeShader *computeShader)构造函数
-
2023/4/29 设计架构
./engine/core下TPipeline.h中class TPipeline类中移除std::vector<TSpecializationConstant> specializationConstants成员变量./engine/core下TPipeline.h中class TPipeline类中增加std::vector<TSpecializationConstant> GetSpecializationConstants()成员函数
-
2023/5/2 设计架构
- 更新
./docs/Design/Core.md文档 ./engine/core下TPipeline.h中移除TSpecializations类和相关声明./engine/core下将TSpecializations中的相关声明转移至TShader.h中的TShader类中./engine/core下TPipeline.h中class TPipeline类中移除std::vector<TSpecializationConstant> GetSpecializationConstants()成员函数
- 更新
-
2023/5/4 设计架构
- 更新
./docs/Design/Core.md文档 ./engine/core下TComputePipeline.h中class TComputePipeline类中InternalCreate()成员函数中增加对VkSpecializationInfo的解析./asset/shaders中增加post_show_texture.frag片元着色器文件,用于在后处理中采样显示纹理- 更新
./sample下的SpecializationConstantsTest示例
- 更新
-
2023/5/5 设计架构
./engine/core下TComputePipeline.h中class TComputePipeline类中InternalCreate()成员函数中更新对VkSpecializationInfo的解析,之前constant_width计算有误- 更新
./sample下的SpecializationConstantsTest示例 ./engine/core下TGraphicsPipeline.h中class TGraphicsPipeline类中InternalCreate()成员函数中增加对VkSpecializationInfo的解析./asset/shaders中增加SpecializationConstantsTest.vert顶点着色器文件,用于测试图形管线特化常量./asset/shaders中增加SpecializationConstantsTest.frag片元着色器文件,用于测试图形管线特化常量
-
2023/5/6 设计架构
- 更新
./docs/Design/Core.md文档。开始研究Vulkan硬件实时光追
- 更新
-
2023/5/7 设计架构
- 更新
./docs/Design/Core.md文档
- 更新
-
2023/5/8 设计架构
- 更新
./docs/Design/Core.md文档
- 更新
-
2023/5/9 设计架构
- 更新
./docs/Design/Core.md文档
- 更新
-
2023/5/10 设计架构
- 更新
./docs/Design/Core.md文档
- 更新
-
2023/6/5 设计架构
./sample下增加VulkanKHRRayTracingTest示例,用于研究Vulkan KHR标准硬件实时光追。相关研究文档请查阅Vulkan KHR 光线追踪标准。./engine/core下TExtensionInfo.h下的TExtensionType枚举中增加VK_KHR_ACCELERATION_STRUCTURE枚举量。并且在对应的TExtensionInfo.cpp中的TAllExtensionNames中增加VK_KHR_acceleration_structure名称。
-
2023/6/6 设计架构
./engine/core下TPhysicalDeviceInfo.h下的TPhysicalDeviceInfo类中增加VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeaturesKHR成员变量,用于存储加速结构特性信息。./engine/core下TPhysicalDevice.h下的TPhysicalDevice类中EnumerateProperties函数中增加对于VkPhysicalDeviceAccelerationStructureFeaturesKHR加速结构特性信息的获取和赋值。./engine/core下TPhysicalDevice.h下的TPhysicalDeviceFeatures类中增加bool accelerationStructure、bool accelerationStructureIndirectBuild、bool accelerationStructureHostCommands和bool descriptorBindingAccelerationStructureUpdateAfterBind成员。用于获取和激活加速结构。./engine/core下TPhysicalDevice.h下的TPhysicalDevice类中GetDeviceFeatures()函数中,增加对于bool accelerationStructure、bool accelerationStructureIndirectBuild、bool accelerationStructureHostCommands和bool descriptorBindingAccelerationStructureUpdateAfterBind成员的赋值和获取。./engine/core下TDevice.h下的TDevice类中InternalCreate()函数中,增加对于VkPhysicalDeviceAccelerationStructureFeaturesKHR特性的激活判断赋值。
-
2023/6/7 设计架构
./engine/core下TDevice.h下的TDevice类中InternalCreate()增加扩展指针链对于VkPhysicalDeviceAccelerationStructureFeaturesKHR特性的激活。- 更新
./samples下的VulkanKHRRayTracingTest示例
-
2023/6/12 设计架构
./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中增加对VK_KHR_acceleration_structure相关函数声明。./engine/core下TVulkanLoader.h下的TVulkanLoader类中LoadDeviceDriver成员函数增加对VK_KHR_acceleration_structure相关函数的获取。
-
2023/6/13 设计架构
./engine/core下TVulkanLoader.h下的TVulkanLoader类中LoadDeviceDriver成员函数增加对获取扩展函数之前判断是否支持相应扩展的判断。
-
2023/6/15 设计架构
./engine/core下TPhysicalDevice.h下的TPhysicalDevice类中IsSupportExtension成员函数,将扩展名再次转换成扩展类型枚举进行判断去掉,没必要且重复。./engine/core下TDevice.h下的TDevice类中IsEnabledExtension成员函数,将扩展名再次转换成扩展类型枚举进行判断去掉,没必要且重复。
-
2023/6/20 设计架构
./engine/core下TDevice.h下的TDevice类中更新InspectExtensionAndVersionDependencies()成员函数为InspectExtensionAndVersionDependencies(TExtensionInfo& extensionInfo)。应该使用递归的方式检查依赖。./engine/core下TDevice.h下的TDevice类中更新InternalCreate()成员函数。检查依赖。./engine/core下TBuffer.h下的TBufferUsageBits枚举中增加BUFFER_SHADER_DEVICE_ADDRESS、BUFFER_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY、BUFFER_ACCELERATION_STRUCTURE_STORAGE和BUFFER_SHADER_BINDING_TABLE枚举成员枚举。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中增加对VK_KHR_buffer_device_address相关函数声明。./engine/core下TVulkanLoader.h下的TVulkanLoader类中更新LoadDeviceDriver成员函数。增加对VK_KHR_buffer_device_address相关函数获取。
-
2023/6/21 设计架构
./engine/core下TDevice.h下的TDevice类中更新InspectExtensionAndVersionDependencies()成员函数中增加VK_KHR_MAINTENANCE2扩展依赖检查。./engine/core下TDevice.h下的TDevice类中更新InspectExtensionAndVersionDependencies()成员函数中移除对VK_KHR_DEVICE_GROUP_CREATION和VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES2扩展依赖检查,这两个依赖属于instance依赖,不应该出现在device扩展中。
-
2023/6/25 设计架构
./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_get_physical_device_properties2扩展的函数。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_external_memory_capabilities扩展的函数。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_external_fence_capabilities扩展的函数。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_external_semaphore_capabilities扩展的函数。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_EXT_tooling_info扩展的函数。
-
2023/6/27 设计架构
./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_EXT_buffer_device_address扩展的函数。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_external_semaphore_capabilities提升至核心得函数。./engine/core下TDevice.h下的TDevice类中InspectExtensionAndVersionDependencies()成员函数中增加对VK_EXT_BUFFER_DEVICE_ADDRESS扩展依赖检查。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中增加VK_KHR_device_group扩展的函数。./engine/core下TVulkanLoader.h下增加TInstanceFunctionTable结构体并声明TInstanceDriver为TInstanceFunctionTable别名。./engine/core下TVulkanLoader.h下TInstanceFunctionTable结构体中增加VK_KHR_device_group_creation扩展的函数。
-
2023/6/29 设计架构
./engine/core下TPhysicalDevice.h下的TPhysicalDeviceFeatures类中增加bool bufferDeviceAddress成员。./engine/core下TPhysicalDevice.h下的TPhysicalDeviceFeatures类中增加bool bufferDeviceAddressCaptureReplay成员。./engine/core下TPhysicalDevice.h下的TPhysicalDeviceFeatures类中增加bool bufferDeviceAddressMultiDevice成员。./engine/core下TPhysicalDevice.h下的EnumerateProperties()成员函数中增加对VK_KHR_buffer_device_address特性的获取。./engine/core下TPhysicalDeviceInfo.h下的TPhysicalDeviceInfo类中增加对VkPhysicalDeviceBufferDeviceAddressFeaturesKHR physicalDeviceBufferDeviceAddressFeaturesKHR成员变量。./engine/core下TPhysicalDevice.h下的TPhysicalDevice类中GetDeviceFeatures()成员函数中增加对VK_KHR_buffer_device_address特性的获取。
-
2023/6/30 设计架构
./engine/core下TVulkanLoader.h下的TInstanceFunctionTable结构体中,增加Vulkan 1.0的函数。./engine/core下TVulkanLoader.h下的TVulkanLoader类中,增加LoadInstanceDriver成员函数。用于获取instance函数。
-
2023/7/1 设计架构
./engine/core下TVulkanLoader.h下增加vkEnumerateInstanceVersion的Vulkan全局函数,并在TVulkanLoader构造函数中获取。./engine/core下TVulkanLoader.h下移除所有非Vulkan全局函数。./engine/core下TVulkanLoader.h下TVulkanLoader类的Load函数增加PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr形参。./engine/core下TVulkanLoader.h下TVulkanLoader类中移除LoadDeviceFunction(TInstance *instance, const char *name)成员函数。./engine/core下TVulkanLoader.h下TVulkanLoader类中移除LoadDeviceFunction(VkInstance instance, const char *name)成员函数。./engine/core下TVulkanLoader.h下TVulkanLoader类中LoadDeviceFunction(VkDevice device, const char *name)成员函数增加PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr形参./engine/core下TVulkanLoader.h下TVulkanLoader类中移除void LoadAllInstanceFunctions(TInstance *instance)成员函数./engine/core下TVulkanLoader.h下TVulkanLoader类中移除void LoadAllDeviceFunctions(TInstance *instance)成员函数./engine/core下TVulkanLoader.h下TVulkanLoader类中移除void LoadAll(TInstance *instance)成员函数./engine/core下TInstance.h下TInstance类中增加TInstanceDriver *instanceDriver = nullptr成员变量,并在InternalCreate成员函数中分配获取,在InternalDestroy中回收./engine/core下TInstance.h下TInstance类中增加const TInstanceDriver *GetInstanceDriver()成员函数./engine/core下TDevice.h下TDevice类中InternalCreate中vkCreateDevice函数使用Turbo::Core::TPhysicalDeviceDriver中的vkCreateDevice创建./engine/core下TPhysicalDevice.h下TPhysicalDevice类中InternalCreate中vkEnumeratePhysicalDevices函数使用Turbo::Core::GetInstanceDriver中的vkEnumeratePhysicalDevices函数./engine/core下TVmaAllocator.h下TVmaAllocator类中InternalCreate中vkGetDeviceProcAddr函数使用Turbo::Core::TInstanceDriver中的vkGetDeviceProcAddr函数./docs下FAQ.md下Could Not find Vulkan (missing: VULKAN_LIBRARY VULKAN_INCLUDE_DIR)更新最新确切的解决方法。./engine/core下TVulkanLoader.h下的TInstanceFunctionTable结构体中,增加PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups的函数并获取。./engine/core下TVulkanLoader.h下的TPhysicalDeviceFunctionTable结构体中VK_EXT_tooling_info先关函数转移至TDeviceFunctionTable中并获取。./engine/core下TInstance.h下的TInstance类中增加void InspectExtensionAndVersionDependencies(TExtensionType extensionType)成员函数。使用递归的方式检查依赖。并在InternalCreate()进行调用。./engine/core下TInstance.h下的TInstance类中增加TExtensionInfo GetExtensionByType(TExtensionType extensionType)成员函数
-
2023/7/2 设计架构
./engine/core下TPhysicalDevice.h下TPhysicalDevice类中EnumerateProperties()成员函数中,增加对vkGetPhysicalDeviceFeatures2KHR函数的判断和使用。./engine/core下TDevice.h下TDevice类中InspectExtensionAndVersionDependencies()成员函数中,移除对于扩展的Vulkan版本限制,对于扩展不应该使用版本限制。./engine/core下TInstance.h下TInstance类中InspectExtensionAndVersionDependencies()成员函数中,移除对于扩展的Vulkan版本限制,对于扩展不应该使用版本限制。
-
2023/7/3 设计架构
./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkCmdDispatchBase vkCmdDispatchBase成员函数并获取。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask成员函数并获取。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures成员函数并获取。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR成员函数并获取。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupport成员函数并获取。./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR成员函数并获取./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR成员函数并获取./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR成员函数并获取./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR成员函数并获取./engine/core下TVulkanLoader.h下的TDeviceFunctionTable结构体中,增加PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR成员函数并获取./engine/core下TDevice.h下的TDevice类中InternalCreate成员函数中,修正遍历enabledExtensions时调用InspectExtensionAndVersionDependencies导致的遍历器失效Bug./engine/core下TInstance.h下的TInstance类中InternalCreate成员函数中,修正遍历enabledExtensions时调用InspectExtensionAndVersionDependencies导致的遍历器失效Bug./engine/core下TVmaAllocator.h下的TVmaAllocator类中InternalCreate成员函数中,增加对于VmaAllocatorCreateInfo::flags的使用(如果要使用buffer device address的特性,需要开启VmaAllocatorCreateFlagBits::VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT标志位)./engine/core下TDevice.h下的TDevice类中InternalCreate成员函数中,增加对于VkPhysicalDeviceBufferDeviceAddressFeaturesKHR的使用激活设置./docs/Design下增加ForVulkanFeatureNote.md文档用于记录开发Vulkan特性的流程./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的设备内存地址获取
-
2023/7/4 设计架构
./engine/core下TVmaAllocator.h下的TVmaAllocator类中InternalCreate成员函数中,对于VmaAllocatorCreateInfo::flags的使用(在Vulkan 1.2标准之后被升级为核心标准)./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的加速结构
-
2023/7/5 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的加速结构,成功创建一个底层加速结构
-
2023/7/6 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp探索压缩实时光追的加速结构
-
2023/7/10 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的顶层加速结构
-
2023/7/11 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的顶层加速结构
-
2023/7/12 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的顶层加速结构./engine/core下thirdparty中SPIRV-Cross和VulkanMemoryAllocator转成submodules./engine/core下更新CMakeLists.txt适配新版的VulkanMemoryAllocatorREADME增加Clone章节
-
2023/7/13 设计架构
./engine/core下TDescriptor.h中TDescriptorType枚举增加ACCELERATION_STRUCTURE用于加速结构描述符类型./engine/core下TDescriptor.h中增加TAccelerationStructureDescriptor类。用于加速结构描述符./engine/core下TShader.h中TShader类中增加std::vector<TAccelerationStructureDescriptor *> accelerationStructureDescriptors成员变量。用于存储加速结构描述符./engine/core下TShader.h中TShader类中增加std::vector<TAccelerationStructureDescriptor *> accelerationStructureDescriptor成员变量。用于存储加速结构描述符./engine/core下TShader.h中TShader类中InternalParseSpirV()成员函数中增加对TAccelerationStructureDescriptor的加速结构描述符的创建./engine/core下TShader.h中TShader类中~TShader析构函数中增加对TAccelerationStructureDescriptor的加速结构描述符的销毁./asset/shaders下增加RayTraceTest.rgen光线生成着色器,用于测试光线生成着色器。./engine/core下TShader.h中TShaderType枚举中增加RAY_GENERATION、ANY_HIT、CLOSEST_HIT、MISS、INTERSECTION、CALLABLE成员枚举量,用于光线追踪着色器./engine/core下TShader.h中TShader类中更新GetVkShaderStageFlagBits()成员函数,适配光线追踪着色器./engine/core下TShader.cpp中更新TShaderTypeToGlslangEShLanguage()全局函数,适配光线追踪着色器./samples下更新VulkanKHRRayTracingTest.cpp探索实时光追的着色器和相关描述符./engine/core下TShader.h中增加TRayGenerationShader类。用于描述光线生成着色器。
-
2023/7/14 设计架构
./engine/core下TDescriptorPool.h中TDescriptorPool类中增加对TDescriptorType::ACCELERATION_STRUCTURE的适配./engine/core下TShader.h中TShader类中增加const std::vector<TAccelerationStructureDescriptor *> &GetAccelerationStructureDescriptors()的成员函数./engine/core下TPipeline.h中TPipeline类中增加对TDescriptorType::ACCELERATION_STRUCTURE的适配./engine/core下TPipelineDescriptorSet.h中TPipelineDescriptorSet类中增加void BindData(uint32_t set, uint32_t binding, uint32_t dstArrayElement, std::vector<VkAccelerationStructureKHR> &accelerationStructures)的临时测试函数,用于绑定加速结构./engine/core下TDescriptorSet.h中TDescriptorSet类中增加void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<VkAccelerationStructureKHR> &accelerationStructures)的临时测试函数,用于绑定加速结构
-
2023/7/19 设计架构
./samples下增加PureCCppWebGPUTest项目文件夹,用于测试C/C++的WebGPU项目编译至浏览器的网页端渲染。- 更新
README.md下的State段落,简单记录当前开发状态。 - 更新
./docs/Design/WebGPU_CCPP.md文档,增加对PureCCppWebGPUTest项目的说明。
-
2023/7/20 设计架构
./samples下PureCCppWebGPUTest项目文件夹增加compile_flags.txt,用于设置clangd的Emscripten的头文件目录。
-
2023/7/22 设计架构
./samples下新增PureCCppWebGlslangAndSpirVCrossTest项目。用于存放将GLSL或HLSL或Spir-V着色器代码通过Web网页端,在线将代码进行互相编译和转换项目。
-
2023/7/24 设计架构
./samples下新增PureCCppWebGlfwTest项目。用于存放glfw的Web网页端测试工程。./samples下新增PureCCppWebImGuiTest项目。用于存放imgui的Web网页端测试工程。
-
2023/7/25 设计架构
./samples下新增PureCCppWebShaderCompiler项目。用于存放在线GLSL、HLSL和SPIR-V网页端着色器转化编译器项目。./samples下更新PureCCppWebShaderCompiler项目。提供在线GLSL、HLSL转SPIR-V功能。
-
2023/7/26 设计架构
./samples下更新PureCCppWebShaderCompiler项目。增大显示大小,之前的可视范围太小了。./samples下更新PureCCppWebShaderCompiler项目。增加Ctrl+V粘贴代码快捷键的支持。
-
2023/7/27 设计架构
./samples下更新PureCCppWebShaderCompiler项目。增加反编译SPIR-V的功能。
-
2023/7/28 设计架构
./samples下更新PureCCppWebShaderCompiler项目。增加编译SPIR-V的功能。
-
2023/7/29 设计架构
./samples下更新PureCCppWebShaderCompiler项目。增加编译GLSL、HLSL、MSL、C++和Reflection的功能。
-
2023/7/31 设计架构
./samples下更新PureCCppWebShaderCompiler项目。修改Bug和一些错误。
-
2023/8/1 设计架构
./samples下新增PureCCppMiniWebGPUTest项目。一个使用C/C++书写的WebGPU的小例子。./samples下更新PureCCppMiniWebGPUTest项目。测试WebGPU的C接口。
-
2023/8/2 设计架构
./samples下更新PureCCppMiniWebGPUTest项目。测试WebGPU的C接口。
-
2023/8/3 设计架构
./samples下更新PureCCppMiniWebGPUTest项目。测试WebGPU的C接口的WGPUCommandEncoder和WGPUCommandBuffer。
-
2023/8/7 设计架构
./engine/core下新增TRayTracingPipeline.h和TRayTracingPipeline.cpp用于声明定义TRayTracingPipeline类./engine/core下TShader.h中增加TAnyHitShader类。用于描述任意命中着色器。./engine/core下TShader.h中增加TClosestHitShader类。用于描述最近命中着色器。./engine/core下TShader.h中增加TMissShader类。用于描述未命中着色器。./engine/core下TShader.h中增加TIntersectionShader类。用于描述相交着色器。./engine/core下TShader.h中增加TCallableShader类。用于描述可调用着色器。./engine/core下TShader.h中TShader类中增加std::vector<uint32_t> GetSpirV()成员函数。用于获取着色器的Spir-V的数据。./asset/shaders下新增RayTracingKHRTest.rmiss。表示光追测试程序使用的未命中着色器。./asset/shaders下RayTraceTest.rgen更改命名为RayTracingKHRTest.rgen。./samples下更新VulkanKHRRayTracingTest.cpp探索光追管线和着色器
-
2023/8/9 设计架构
./samples下更新SubpassTest.cpp。修正内部小三角形随时间变化大小。./samples下更新VulkanKHRRayTracingTest.cpp。可控制视点方便查看渲染效果。
-
2023/8/10 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建光追管线。./engine/core下TExtensionInfo.cpp中TAllExtensionNames增加VK_KHR_ray_tracing_pipeline元素值。用于光追管线扩展。./engine/core下TExtensionInfo.h中TExtensionType增加VK_KHR_RAY_TRACING_PIPELINE枚举值。用于与VK_KHR_ray_tracing_pipeline元素光追管线扩展元素对应。./engine/core下TDevice.cpp中InspectExtensionAndVersionDependencies中增加对VK_KHR_RAY_TRACING_PIPELINE扩展依赖的检查。./engine/core下TVulkanLoader.h中TDeviceFunctionTable结构体中增加对VK_KHR_ray_tracing_pipeline扩展函数的声明./engine/core下TVulkanLoader.cpp中LoadDeviceDriver函数中增加对VK_KHR_ray_tracing_pipeline扩展函数的加载获取.docs/Design下增加ForVulkanExtensionNote.md文档文件,用于记录Vulkan Extension 开发流程
-
2023/8/11 设计架构
./engine/core下TPhysicalDeviceInfo.h中TPhysicalDeviceInfo类中增加VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool rayTracingPipeline成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool rayTracingPipelineShaderGroupHandleCaptureReplay成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool rayTracingPipelineTraceRaysIndirect成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice.h中TPhysicalDeviceFeatures类中增加bool rayTraversalPrimitiveCulling成员变量。用于存储光追管线特性信息。./engine/core下TPhysicalDevice类中EnumerateProperties成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR特性的获取。./engine/core下TPhysicalDevice类中GetDeviceFeatures成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR特性的设置。./engine/core下TDevice类中InternalCreate成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR特性的设置。./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建光追管线和着色器绑定表。
-
2023/8/12 设计架构
./engine/core下TDevice类中GetBestGraphicsQueue成员函数对score的设置有Bug,修正。./engine/core下TDevice类中GetBestComputeQueue成员函数对score的设置有Bug,修正。./engine/core下TDevice类中GetBestTransferQueue成员函数对score的设置有Bug,修正。./engine/core下TDevice类中GetBestSparseBindingQueue成员函数对score的设置有Bug,修正。./engine/core下TDevice类中GetBestProtectedQueue成员函数对score的设置有Bug,修正。
-
2023/8/14 设计架构
./engine/core下TVulkanAllocator类中AlignUp静态成员函数移至TAllocator类中。并增加std::is_integral的判断。./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建光追管线和着色器绑定表。
-
2023/8/15 设计架构
./engine/core下TAllocator类中AlignUp静态成员函数修改计算错误的Bug。./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建光追管线和着色器绑定表。./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建用于光追的图片。
-
2023/8/16 设计架构
./asset/shaders下RayTracingKHRTest.rgen着色器中set和binding写反了,修正。./samples下更新VulkanKHRRayTracingTest.cpp。尝试创建用于光追的描述符集并进行vkCmdTraceRaysKHR光追指令。
-
2023/8/17 设计架构
./samples下更新VulkanKHRRayTracingTest.cpp。修正一些小Bug和着色器矩阵不匹配的问题。现在可以输出正确光追渲染结果了。
-
2023/8/18 设计架构
./samples下增加VulkanKHRRayTracingTestForLighting示例。用于尝试使用硬件实时光追渲染光照。./asset/shaders下增加RayTracingKHRTestForLighting.rchit着色器。用于VulkanKHRRayTracingTestForLighting示例。./asset/shaders下增加RayTracingKHRTestForLighting.rgen着色器。用于VulkanKHRRayTracingTestForLighting示例。./asset/shaders下增加RayTracingKHRTestForLighting.miss着色器。用于VulkanKHRRayTracingTestForLighting示例。./samples下更新VulkanKHRRayTracingTest示例。将模型摆正。./samples下优化VulkanKHRRayTracingTest示例。丰富渲染。
-
2023/8/19 设计架构
./samples下更新PureCCppMiniWebGPUTest示例。研究WebGPU。
-
2023/8/20 设计架构
./samples下新增PureMiniWebGPUTest示例。研究纯C语言版WebGPU。
-
2023/8/21 设计架构
./samples下更新VulkanKHRRayTracingTestForLighting示例。研究光照计算。
-
2023/8/22 设计架构
./samples下新增VulkanKHRRayTracingTestForLightingShadow示例。研究光照计算中的阴影。./asset/shaders下新增RayTracingKHRTestForLightingShadow.rgen着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadow.rchit着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadow.rmiss着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadowShadow.rmiss着色器。
-
2023/8/23 设计架构
./samples下新增VulkanKHRRayTracingTestForLightingShadowWithTexture示例。研究光追光照计算中对纹理采样。./asset/shaders下新增RayTracingKHRTestForLightingShadowWithTexture.rgen着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadowWithTexture.rchit着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadowWithTexture.rmiss着色器。./asset/shaders下新增RayTracingKHRTestForLightingShadowShadowWithTexture.rmiss着色器。
-
2023/8/28 设计架构
./samples下新增VulkanKHRRayTracingJitterCamera示例。通过抖动采样点并多帧累积采样结果进行抗锯齿。./asset/shaders下新增random.glsl文件,用于生成随机数。./asset/shaders下新增RayTracingKHRJitterCamera.rgen文件,用于VulkanKHRRayTracingJitterCamera示例。./asset/shaders下新增RayTracingKHRJitterCamera.rmiss文件,用于VulkanKHRRayTracingJitterCamera示例。./asset/shaders下新增RayTracingKHRJitterCameraShadow.rmiss文件,用于VulkanKHRRayTracingJitterCamera示例。./asset/shaders下新增RayTracingKHRJitterCamera.rchit文件,用于VulkanKHRRayTracingJitterCamera示例。
-
2023/8/29 设计架构
./samples下新增VulkanKHRRayTracingAnyHitShader示例。用于研究实时光追中的任意命中着色器。./asset/shaders下新增RayTracingAnyHitShader.rgen文件,用于VulkanKHRRayTracingAnyHitShader示例。./asset/shaders下新增RayTracingAnyHitShader.rmiss文件,用于VulkanKHRRayTracingAnyHitShader示例。./asset/shaders下新增RayTracingAnyHitShaderShadow.rmiss文件,用于VulkanKHRRayTracingAnyHitShader示例。./asset/shaders下新增RayTracingAnyHitShader.rchit文件,用于VulkanKHRRayTracingAnyHitShader示例。
-
2023/8/30 设计架构
./samples下更新VulkanKHRRayTracingAnyHitShader示例。用于研究实时光追中的任意命中着色器。./asset/shaders下新增RayTracingAnyHitShader.rahit文件(任意命中着色器),用于VulkanKHRRayTracingAnyHitShader示例。
-
2023/8/31 设计架构
./asset/shaders下新增RayTracingAnyHitShaderShadow.rahit文件(任意命中着色器),用于VulkanKHRRayTracingAnyHitShader示例中阴影负载1的任意命中。./asset/shaders下更新RayTracingAnyHitShaderShadow.rmiss。将阴影负载增加随机种子seed成员。./asset/shaders下更新RayTracingAnyHitShader.rchit。将阴影负载增加随机种子seed成员。./samples下更新VulkanKHRRayTracingAnyHitShader示例。增加对阴影负载的任意命中着色器的适配。./samples下更新BRDF示例。使用非Y轴向上的材质球,并将背景清空成浅色。./samples下更新NormalTexture示例。使用非Y轴向上的材质球,并将背景清空成浅色。./samples下更新PBRTest示例。roughness参数默认设置为0.5。
-
2023/9/4 设计架构
./samples下新增VulkanKHRRayTracingTestForInstances示例。用于光追实例化(多实体)。
-
2023/9/6 设计架构
./samples下更新VulkanKHRRayTracingTestForInstances示例。用于光追实例化(多实体)。
-
2023/9/8 设计架构
./samples下更新VulkanKHRRayTracingTestForReflections示例。用于光追反射。./asset/shaders下新增RayTracingKHRTestForReflections.rgen文件,用于VulkanKHRRayTracingTestForReflections示例。./asset/shaders下新增RayTracingKHRTestForReflections.rmiss文件,用于VulkanKHRRayTracingTestForReflections示例。./asset/shaders下新增RayTracingKHRTestForReflectionsShadow.rmiss文件,用于VulkanKHRRayTracingTestForReflections示例。./asset/shaders下新增RayTracingKHRTestForReflections.rchit文件,用于VulkanKHRRayTracingTestForReflections示例。
-
2023/9/11 设计架构
./samples下更新VulkanKHRRayTracingTestForReflections_WithoutLimited示例。用于不受VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayRecursionDepth限制的光追反射。./asset/shaders下新增RayTracingKHRTestForReflections_WithoutLimited.rgen文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited示例。./asset/shaders下新增RayTracingKHRTestForReflections_WithoutLimited.rmiss文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited示例。./asset/shaders下新增RayTracingKHRTestForReflectionShadows_WithoutLimited.rmiss文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited示例。./asset/shaders下新增RayTracingKHRTestForReflections_WithoutLimited.rchit文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited示例。
-
2023/9/19 设计架构
./samples下新增VulkanKHRRayTracingTestForMultiClosestHits示例。用于研究实时光追中的多个最近命中着色器。
-
2023/9/20 设计架构
engine\core\include下TCore.h新增对于VK_USE_PLATFORM_OHOS或OHOS_PLATFORM的开源鸿蒙系统的TURBO_PLATFORM_OPEN_HARMONY宏定义的。engine\core\include下TCore.h新增对于vulkan_ohos.h的开源鸿蒙系统的头文件加入。engine\core\src下TVulkanLoader.cpp新增对于的开源鸿蒙系统TURBO_PLATFORM_OPEN_HARMONY宏适配。
-
2023/9/21 设计架构
engine\core\include下TVulkanLoader.h将外部全局变量PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr移动到TVulkanLoader类中作为成员变量。engine\core\include下TVulkanLoader.h将外部全局变量PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion移动到TVulkanLoader类中作为成员变量。engine\core\include下TVulkanLoader.h将外部全局变量PFN_vkCreateInstance vkCreateInstance移动到TVulkanLoader类中作为成员变量。engine\core\include下TVulkanLoader.h将外部全局变量PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties移动到TVulkanLoader类中作为成员变量。engine\core\include下TVulkanLoader.h将外部全局变量PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties移动到TVulkanLoader类中作为成员变量。engine\core\include下TVulkanLoader.h中的TVulkanLoader类Turbo::Core::TVulkanLoader::Load使用相应的成员变量获取函数。engine\core\src下TVulkanLoader.cpp中的TVulkanLoader类构造函数获取初始化相应的成员变量。engine\core\include下TVulkanLoader.h增加struct TGlobalFunctionTable结构体,用于将Vulkan全局函数打包。engine\core\include下TVulkanLoader.h增加TGlobalDriver重命名TGlobalFunctionTable。engine\core下TVulkanLoader类增加TGlobalDriver LoadGlobalDriver()成员函数,并实现。engine\core下TVmaAllocator类的构造函数中使用TVulkanLoader获取vkGetInstanceProcAddr接口。engine\core下TExtensionInfo类的GetInstanceExtensionCount函数中使用TVulkanLoader中的LoadGlobalDriver接口获取vkEnumerateInstanceExtensionProperties接口。engine\core下TExtensionInfo类的GetInstanceExtensions函数中使用TVulkanLoader中的LoadGlobalDriver接口获取vkEnumerateInstanceExtensionProperties接口。engine\core下TInstance类的InternalCreate函数中使用TVulkanLoader中的LoadGlobalDriver接口获取vkCreateInstance接口。engine\core下TLayerInfo类的GetInstanceLayerCount函数中使用TVulkanLoader中的LoadGlobalDriver接口获取vkEnumerateInstanceLayerProperties接口。engine\core下CMakeLists.txt中增加TCORE_SHARED_LIBS选项,用于编译输出TCore的动态库。
-
2023/9/24 设计架构
./samples下增加AndroidVulkanTest,用于研究Adnroid的Vulkan,并尝试将Turbo适配到Android平台。./engine/core/src下TVulkanLoader.cpp增加对于TURBO_PLATFORM_ANDROID宏适配,用于适配到Android平台。./engine/core下TSurface增加对于TURBO_PLATFORM_ANDROID宏适配,用于适配到Android平台。./engine/core下TSurface类中,适配Android平台,增加ANativeWindow *nativeWindow成员变量。./engine/core下TSurface类中,适配Android平台,增加PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR成员变量。./engine/core/src下实现TSurface类中TSurface(Turbo::Core::TDevice *device, ANativeWindow *window)构造函数。适配Android平台。./engine/core/src下更新TSurface类中InternalCreate函数。适配Android平台。./engine/core/src下更新TSurface类中GetSurfaceSupportQueueFamilys()函数。适配Android平台。./engine/core/include下更新TPlatform.h中的TPlatformType平台枚举值声明。会与安卓平台特定的ADNROID宏冲突。./engine/core/src下更新TVulkanLoader.cpp中的TVulkanLoader::GetVulkanVersion()函数。适配Android平台。./engine/core/src下更新TPlatform.cpp中修正return32;为return 32;的Bug。
-
2023/9/25 设计架构
engine/core下更新TSwapchain的构造函数。修改之前强制判断并使用TCompositeAlphaBits::ALPHA_OPAQUE_BIT透明配置,该配置在Android平台上不适用。在Android平台上会返回TCompositeAlphaBits::ALPHA_INHERIT_BIT,也就是透明度不由Vulkan控制,而是Android平台自己控制。engine/core下更新TSwapchain的InternalCreate()函数。增加对于TCompositeAlphaBits::ALPHA_OPAQUE_BIT的判断,防止在Android平台上导致不应该的异常抛出。engine/core下更新TException。统一错误消息格式,使用标准异常消息输出。engine/core下更新TCore下增加std::string TResultToString(TResult result)函数。用于帮助将结果枚举转成字符串。engine/core下更新TSurface下InternalCreate()。将VkAndroidSurfaceCreateInfoKHR下的sType设置为VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,之前为VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR是个Bugengine/core下更新TException,增加一个std::string whatStr成员变量。移除使用exception(char const* const _Message)构造函数(该函数非标准函数)。
-
2023/9/26 设计架构
engine/core下更新TException,增加std::string GetTip()成员函数。移用于获取提示信息。engine/core下更新TVersion的版本大小比较算法,之前的比较有逻辑Bug。engine/core下增加AndroidPureHelloTriangle文件夹,用于存放Turbo在Android上绘制三角形的示例程序。
-
2023/9/27 设计架构
./samples下增加VulkanKHRRayTracingTestForAnimationTLAS示例。用于研究光追中顶层加速结构的更新。
-
2023/9/28 设计架构
./samples下增加VulkanKHRRayTracingTestForAnimationBLAS示例。用于研究光追中底层加速结构的更新。./asset/shaders下增加RayTracingKHRTestForAnimationBLAS.comp计算着色器。用于研究光追中底层加速结构更新中使用计算管线更新顶点数据。./engine/core下TDescriptorSet类中增加void BindData(uint32_t binding, TBuffer *buffer, uint32_t dstArrayElement)成员函数。用于简单绑定单个缓存。./engine/core下TPipelineDescriptorSet类中增加void BindData(uint32_t set, uint32_t binding, TBuffer *buffer, uint32_t dstArrayElement)成员函数。用于简单绑定单个缓存。./engine/core下TDescriptorSet类中BindData(..., std::vector<TBuffer *> &buffers)中增加对STORAGE_BUFFER描述符类型判断。- 不支持
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER描述符类型(相关代码未实现)。需要填补这一部分空缺。 ./engine/core下TDescriptor.h中增加TStorageBufferDescriptor类声明。用于表述VK_DESCRIPTOR_TYPE_STORAGE_BUFFER类型的描述符./engine/core下TShader类中增加std::vector<TStorageBufferDescriptor *> storageBufferDescriptors成员变量。用于存储VK_DESCRIPTOR_TYPE_STORAGE_BUFFER类型的描述符。./engine/core下TShader类析构中增加对std::vector<TStorageBufferDescriptor *> storageBufferDescriptors成员的内存释放。./engine/core下TShader类中增加const std::vector<TStorageBufferDescriptor *> &GetStorageBufferDescriptors()成员函数。用于获取着色器中的对应描述符信息。./engine/core下TPipeline类中InternalCreate()成员函数中增加对于std::vector<TStorageBufferDescriptor *>描述符的处理。
-
2023/10/11 设计架构
./samples下增加VulkanKHRRayTracingTestForIntersectionShader示例。用于研究光追中相交着色器的使用。./asset/shaders下新增RayTracingKHRTestForIntersection.rgen文件,用于VulkanKHRRayTracingTestForIntersectionShader示例。./asset/shaders下新增RayTracingKHRTestForIntersection.rchit文件,用于VulkanKHRRayTracingTestForIntersectionShader示例。./asset/shaders下新增RayTracingKHRTestForIntersection.rmiss文件,用于VulkanKHRRayTracingTestForIntersectionShader示例。./asset/shaders下新增RayTracingKHRTestForIntersection.rint文件,用于VulkanKHRRayTracingTestForIntersectionShader示例。
-
2023/10/29 设计架构
- 配了一台
3060Ti显卡的电脑,光追研究继续。 ./engine/render下TBuffer.h中TUniformBuffer移除std::enable_if_t(llvm-mingw编译器不支持,估计是C++标准配置不对)。./thirdparty下更新KTX-Software到最新main分支。./engine/render下TContext中移除对于TDescriptorID的初始化列表写法使用最原始的结构体赋值法。(llvm-mingw好像不支持初始化列表写法,目前不知道如何设置编译器支持初始化列表写法,估计是C++标准配置不对)。./engine/render下TContext中将std::is_class_v<A_Test>改为std::is_class<A_Test>::value。./samples下VulkanTest中将所有std::exception(const std::string&)改为Turbo::Core::TException。./samples下VulkanAllocatorTest中将所有std::exception(const std::string&)改为Turbo::Core::TException。
- 配了一台
-
2023/10/31 设计架构
./engine/render下TBuffer.h中TUniformBuffer移除std::enable_if_t(C++14特性),使用std::enable_if替换(C++11特性)。
-
2023/11/4 设计架构
./samples下增加VulkanKHRRayTracingTestForCallableShader示例。用于研究可调用着色器的使用。./asset/shaders下新增RayTracingKHRTestForCallableShader.rchit文件,用于VulkanKHRRayTracingTestForCallableShader示例。./asset/shaders下新增RayTracingKHRTestForCallableShader_R.rchit文件,用于VulkanKHRRayTracingTestForCallableShader示例。./asset/shaders下新增RayTracingKHRTestForCallableShader_G.rchit文件,用于VulkanKHRRayTracingTestForCallableShader示例。./asset/shaders下新增RayTracingKHRTestForCallableShader_B.rchit文件,用于VulkanKHRRayTracingTestForCallableShader示例。./engine/core下TPhysicalDeviceInfo.h中类TPhysicalDeviceInfo中新增VkPhysicalDeviceRayQueryFeaturesKHR physicalDeviceRayQueryFeaturesKHR成员。./engine/core下TPhysicalDevice.h中类TPhysicalDeviceFeatures中新增bool rayQuery = false成员。./engine/core下TPhysicalDevice.h中类TPhysicalDevice中更新EnumerateProperties()成员函数,获取并保存VkPhysicalDeviceRayQueryFeaturesKHR相关数据。./engine/core下TPhysicalDevice.h中类TPhysicalDevice中更新GetDeviceFeatures()成员函数,获取VkPhysicalDeviceRayQueryFeaturesKHR相关数据。./engine/core下TDevice.h中类TDevice中更新InternalCreate()成员函数,更新对VkPhysicalDeviceRayQueryFeaturesKHR相关数据的激活设置。
-
2023/11/5 设计架构
./samples下增加VulkanRayQueryTest示例。用于研究VK_KHR_ray_query扩展的使用。./engine/core下TExtensionInfo.cpp中数组TAllExtensionNames中增加VK_KHR_ray_query项。./engine/core下TExtensionInfo.h中枚举TExtensionType中增加VK_KHR_RAY_QUERY项。./engine/core下TDevice.cpp中,类TDevice的成员函数InspectExtensionAndVersionDependencies()中增加对VK_KHR_RAY_QUERY扩展依赖项的检查。
-
2023/11/6 设计架构
./samples下更新VulkanRayQueryTest示例。用于研究VK_KHR_ray_query扩展的使用。
-
2023/11/7 设计架构
./samples下更新VulkanRayQueryTest示例。用于研究VK_KHR_ray_query扩展的使用。./asset/shaders下增加VulkanRayQueryTest.vert示例。用于研究VK_KHR_ray_query扩展的顶点着色器。./asset/shaders下增加VulkanRayQueryTest.frag示例。用于研究VK_KHR_ray_query扩展的片元着色器。./engine/core下TDescriptor.cpp中,类TDescriptor的成员函数GetVkDescriptorType()中增加对ACCELERATION_STRUCTURE加速结构描述符类型(VkDescriptorType::VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)的适配。
-
2023/11/8 设计架构
./asset下增加CornellBox的glTF模型。
-
2023/11/9 设计架构
./samples下增加VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。
-
2023/11/10 设计架构
./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。
-
2023/11/11 设计架构
./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。
-
2023/11/12 设计架构
./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。glTF场景解析和基本渲染完成。
-
2023/11/13 设计架构
./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。完成对于光追结果的采样积累。./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。完成对于材质信息的采样渲染。
-
2023/11/14 设计架构
./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。修正法线错误Bug。./engine/core下更新TDevice类中InspectExtensionAndVersionDependencies()成员函数中增加对VK_KHR_shader_clock扩展的依赖检查。./engine/core下更新TPhysicalDeviceInfo.h中class TPhysicalDeviceInfo中增加VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR成员。./engine/core下更新TPhysicalDevice.h中class TPhysicalDeviceFeatures中增加bool shaderSubgroupClock和bool shaderDeviceClock成员。./engine/core下更新TPhysicalDevice类中EnumerateProperties()成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR特性的获取。./engine/core下更新TPhysicalDevice类中GetDeviceFeatures()成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR特性的赋值。./engine/core下更新TDevice类中InternalCreate()成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR特性的激活。./samples下更新VulkanKHRRayTracingTestForGLTF示例。用于研究对于glTF模型文件的光线追踪渲染。增加对于VK_KHR_shader_clock扩展和相关特性的支持。
-
2023/11/15 设计架构
./engine/core下新增TReferenced类。用于计数引用内存回收机制。
-
2023/11/16 设计架构
./engine/core下更新TReferenced类中的UnReference()成员函数。修正delete返回对象内部变量的Bug。./samples下增加ReferencedTest示例。用于计数引用内存回收机制测试。./engine/core下新增ref_ptr类。用于计数引用内存回收机制。
-
2023/11/17 设计架构
./engine/core下更新ref_ptr类。用于计数引用内存回收机制。
-
2023/11/18 设计架构
./engine/core下将ref_ptr重命名为TRefPtr(统一命名规则)。用于计数引用内存回收机制。./engine/core下更新TRefPtr。用于计数引用内存回收机制。
-
2023/11/19 设计架构
Turbo使用Turbo::Core::TRefPtr和Turbo::Core::TReferenced进行重构。./engine/core下将Turbo::Core::TObject继承自Turbo::Core::TReferenced。./engine/core下将Turbo::Core::TInfo暂时取消继承自Turbo::Core::TObject。Turbo中将所有继承自Turbo::Core::TObject的子类的析构函数全部转成protected权限。./engine/core下将TBarrier.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TBuffer.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TCommandBuffer.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TCommandBufferPool.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。
-
2023/11/20 设计架构
./engine/core下将TComputePipeline.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDescriptor.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDescriptorPool.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDescriptorSet.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDescriptorSetLayout.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDevice.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TDeviceQueue.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。
-
2023/11/21 设计架构
./engine/core下将TEngine.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TFence.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TFramebuffer.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TGraphicsPipeline.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TImage.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。
-
2023/11/22 设计架构
./engine/core下将TImageView.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TInstance.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TPhysicalDevice.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TPipeline.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TPipelineCache.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TPipelineDescriptorSet.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TPipelineLayout.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TRenderingPipeline.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TRenderPass.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TSampler.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TSemaphore.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TShader.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。
-
2023/11/23 设计架构
./engine/core下将TSurface.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TSwapchain.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TVmaAllocator.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TVulkanAllocator.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下将TVulkanLoader.h及其cpp中的所有计数引用子类使用Turbo::Core::TRefPtr维护。./engine/core下更新TRefPtr中使用class声明的模板关键字,使用typename替代。./engine/core下更新TReferenced中增加virtual bool Valid() const成员虚函数。用于判定该引用是否有效(用于自定义判定有效性)。./engine/core下更新TRefPtr中更新bool Valid() const成员函数。增加对该指针自身对象的有效性判断(用于自定义判定有效性)。./engine/core下更新TBarrier.cpp中更新TBufferMemoryBarrier构造函数的buffer参数使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TBarrier.cpp中更新TImageMemoryBarrier构造函数的image参数使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TBarrier.cpp中更新TImageMemoryBarrier构造函数的imageView参数使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新TCommandBufferBase构造函数的commandBufferPool参数使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新TCommandBufferBase的CmdBindPipelineDescriptorSet成员函数使用Turbo::Core::TRefPtr。./engine/core下更新TCommandBufferPool.cpp中更新TCommandBufferPool的Free(const TRefPtr<TCommandBufferBase> &commandBufferBase)成员函数移除对delete的使用。./engine/core下更新TCommandBufferPool.cpp中更新~TCommandBufferPool析构函数,使用Turbo::Core::TRefPtr。./engine/core下更新TCommandBufferPool.cpp中更新Free(const TRefPtr<TCommandBuffer> &commandBuffer)成员函数,使用Turbo::Core::TRefPtr。./engine/core下更新TCommandBufferPool.cpp中更新Free(const TRefPtr<TSecondaryCommandBuffer> &secondaryCommandBuffer)成员函数,使用Turbo::Core::TRefPtr。./engine/core下更新TCommandBufferPool.cpp中更新TCommandBufferPool构造函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新CmdBindDescriptorSets成员函数中,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新TCommandBufferBase的CmdBeginRendering成员函数中,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新TCommandBufferBase的CmdUpdateBuffer成员函数中,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TCommandBuffer.cpp中更新TCommandBufferBase的CmdPushConstants成员函数中,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDescriptorPool.cpp中更新TDescriptorPool的构造函数中,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDescriptorPool.cpp中更新TDescriptorPool的Free成员函数,回收资源。./engine/core下更新TCommandBufferPool.cpp中更新TCommandBufferPool的Free成员函数,回收资源。
-
2023/11/24 设计架构
./engine/core下的TDescriptorPool类内增加std::vector<TRefPtr<TPipelineDescriptorSet>> pipelineDescriptorSets成员。./engine/core下的TDescriptorPool类内更新Allocate(...)成员函数。内部使用容器存储。./engine/core下的TDescriptorPool类内更新Free(...)成员函数。内部判断是否为该池分配。./engine/core下的TDescriptorPool类内更新~TDescriptorPool()析构函数。回收所有分配的描述符。./engine/core下更新TDescriptorSet.cpp中更新TDescriptorSet的构造函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDescriptorSet.cpp中更新TDescriptorSet的BindData成员函数,使用Turbo::Core::TRefPtr。./engine/core下更新TDescriptorSetLayout.cpp中TDescriptorSetLayout的InternalCreate成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDescriptorSetLayout.cpp中TDescriptorSetLayout的构造函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDevice.cpp中TDevice的AddChildHandle成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDevice.cpp中TDevice的InternalCreate成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDevice.cpp中TDevice的InternalDestroy成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDevice.cpp中TDevice的构造函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDevice.cpp中TDevice的析构函数,移除对于delete的显式调用。./engine/core下更新TDevice.cpp中TDevice的GetDeviceQueueCountByQueueFamily成员函数,使用Turbo::Core::TRefPtr<T>。./engine/core下更新TDeviceQueue中的Submit成员函数。将指针变成引用。并在内部适配Turbo::Core::TRefPtr。./engine/core下更新TDeviceQueue。增加只使用Fence的Submit成员函数。并在内部适配Turbo::Core::TRefPtr。./engine/core下更新TDeviceQueue.cpp中TDeviceQueue的Present成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TDeviceQueue.cpp中TDeviceQueue的AddChildHandle成员函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TEngine.cpp中TEngine的VerificationInitVulkan成员函数,移除对于delete的显式调用。./engine/core下更新TEngine.cpp中TEngine的析构函数,移除对于delete的显式调用。./engine/core下更新TEngine.cpp中TEngine的GetInstance函数,使用Turbo::Core::TRefPtr适配。./engine/core下更新TException。继承自std::runtime_error。并移除不必要的成员变量和函数。./engine/core下更新TFence.cpp中TFence的构造函数,使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下更新TFence.cpp中TFence的Wait成员函数,使用Turbo::Core::TRefPtr进行适配。./engine/core下更新TCommandBufferBase中CmdBindDescriptorSets成员函数,std::vector形参使用const进行适配。./engine/core下更新TCommandBufferBase中CmdBindVertexBuffers成员函数,std::vector形参使用const进行适配。./engine/core下更新TCommandBufferBase中CmdSetViewport成员函数,std::vector形参使用const进行适配。./engine/core下更新TCommandBufferBase中CmdSetScissor成员函数,std::vector形参使用const进行适配。./engine/core下更新TCommandBufferBase中CmdPipelineBarrier成员函数,std::vector形参使用const进行适配。./engine/core下更新TAttachment中所有信息获取函数后增加const。./engine/core下更新TMemoryBarrier中所有信息获取函数后增加const。./engine/core下更新TBufferMemoryBarrier中所有信息获取函数后增加const。./engine/core下更新TImageMemoryBarrier中所有信息获取函数后增加const。./engine/core下更新TReferenced中增加void Release() const成员函数。用于内存强制回收。./engine/core下更新TRefPtr<T>中增加void Release()成员函数。用于内存强制回收。./engine/core下更新TCommandBufferPool中Allocate成员函数。优化调用。./engine/core下更新TCommandBufferPool中AllocateSecondary成员函数。优化调用。./engine/core下更新TCommandBufferPool中Free(TRefPtr<TCommandBuffer> &)成员函数。修正导致错误递归Bug。./engine/core下更新TCommandBufferPool中Free(TRefPtr<TSecondaryCommandBuffer> &)成员函数。修正导致错误递归Bug。./engine/core下更新TCommandBufferPool中Free(TRefPtr<TCommandBufferBase> &)成员函数。优化调用,并强制回收内存。
-
2023/11/27 设计架构
./engine/core下的TCommandBufferPool类内更新Free(TRefPtr<TCommandBufferBase> &)成员函数。移除对于TRefPtr::Release()的调用。./engine/core下的TDescriptorPool类内更新Free(TRefPtr<TPipelineDescriptorSet> &)成员函数。./engine/core下的TReferenced类内增加uint32_t GetReferenceCount() const成员函数。./engine/core下的TReferenced类内更新uint32_t referenceCount成员从protected转成private。./engine/core下的TRefPtr类内增加uint32_t ReferenceCount() const成员函数。./engine/core下的TFences类内更新Add(const TRefPtr<TFence> &)成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TFormatInfo类内更新GetSupportFormats(TPhysicalDevice *)成员函数为GetSupportFormats(const TRefPtr<TPhysicalDevice> &)。./engine/core下的TFormatInfo类内更新IsSupportFormat(TPhysicalDevice *, TFormatType)成员函数为IsSupportFormat(const TRefPtr<TPhysicalDevice> &, TFormatType)。./engine/core下的TFormatInfo类内更新GetSupportFormats(const TRefPtr<TPhysicalDevice> &)成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TFormatInfo类内更新IsSupportFormat(const TRefPtr<TPhysicalDevice> &, TFormatType)成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TFramebuffer类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TGraphicsPipeline类内更新InternalCreate()函数。使用Turbo::Core::TRefPtr。./engine/core下的TGraphicsPipeline类内更新InternalCreate()函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TGraphicsPipeline类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TImage类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TImageView类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TInstance类内更新IsHaveHandle成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TInstance类内更新AddChildHandle成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TLayerInfo类内更新GetPhysicalDeviceLayerCount(TPhysicalDevice *)成员函数。修改为GetPhysicalDeviceLayerCount(const TRefPtr<TPhysicalDevice> &)。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TLayerInfo类内更新GetPhysicalDeviceLayers(TPhysicalDevice *physicalDevice)成员函数。修改为GetPhysicalDeviceLayers(const TRefPtr<TPhysicalDevice> &)./engine/core下的TPhysicalDevice类内更新AddChildHandle成员函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TPhysicalDevice类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()进行有效性判断。
-
2023/11/30 设计架构
./engine/core下的TPipeline类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TPipeline类内更新InternalCreate()成员函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TPipeline类内更新InternalDestroy()成员函数。移除对于pipelineLayout内存回收。./engine/core下的TPipelineCache类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TPipelineDescriptorSet类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TPipelineDescriptorSet类内更新InternalCreate()成员函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TPipelineDescriptorSet类内更新InternalDestroy()成员函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TPipelineDescriptorSet类内更新BindData()成员函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TPipelineLayout类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TPipelineDescriptorSet类内更新析构函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TRenderingPipeline类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TRenderingPipeline类内更新InternalCreate函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TRenderPass类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TSampler类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TSemaphore类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TShader类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TShader类内更新构造函数,修正之前有效性判断的代码错误。./engine/core下的TSurface类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TSurface类内更新InternalCreate函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TSurface类内更新InternalDestroy函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TSwapchain类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TSwapchain类内更新InternalCreate函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TSwapchain类内更新构造函数。使用Turbo::Core::TRefPtr进行适配。./engine/core下的TVersion.cpp修正其继承自TInfo。./engine/core下的TVmaAllocator类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TVulkanAllocator类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TVulkanAllocator类内使用Turbo::Core::TRefPtr进行适配。./engine/core下的TVulkanAllocator类内Destory()静态成员函数内移除对delete的使用。./engine/core下的TRefPtr.h中增加cstdint头文件。./engine/core下的TVulkanLoader类内使用Turbo::Core::TRefPtr::Valid()进行有效性判断。./engine/core下的TVulkanLoader类内使用Turbo::Core::TRefPtr进行适配。
-
2023/12/1 设计架构
./.gitignore下增加对thirdparty第三方库的追踪忽略。./engine/framegraph下的TFrameGraph.hpp内的TResourceProxy<T>增加T resource的限制描述备注。./engine/framegraph下更新TFrameGraph.hpp内的TResourceProxy<T>内的uint32_t id成员修改为ID id。./engine/framegraph下更新TFrameGraph.hpp内的TRenderPass内的AddSubpass()成员函数。函数形参增加默认值。并返回索引值./engine/framegraph下更新TFrameGraph.hpp内的Turbo::FrameGraph::TFrameGraph::TBuilder内的CreateSubpass()成员函数。去掉不必要的临时变量。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内增加bool IsWrite(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内增加bool IsRead(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内增加bool IsInput(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内的void Write(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内的void Read(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TSubpass内的void Input(TResource resource)成员函数。./engine/framegraph下更新TFrameGraph.hpp内的TFrameGraph内的Compile()成员函数。增加对计数引用数为0的判断。./engine/framegraph下更新TFrameGraph.hpp内的TFrameGraph内的Execute()成员函数。资源只在PassNode有效的情况下创建和销毁。./engine/framegraph下TFrameGraph.hpp内的TFrameGraph内增加std::string ToHtml()成员函数。方便输出查看。
-
2023/12/2 设计架构
./engine/render下的TBuffer中增加core/include/TRefPtr.h头文件的引入。./engine/render下的TBuffer类中将Turbo::Core::TBuffer *buffer成员改成Turbo::Core::TRefPtr<Turbo::Core::TBuffer> buffer。
-
2023/12/3 设计架构
./engine/core下更新TBuffer.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TCommandBuffer.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TCommandBufferPool.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDescriptor.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDescriptorPool.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDescriptorSet.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDescriptorSetLayout.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDevice.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TDeviceQueue.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TException.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TExtensionInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TFormatInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TFramebuffer.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TGraphicsPipeline.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TImage.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TImageView.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TInstance.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TLayerInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TMemoryHeapInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TMemoryTypeInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TPhysicalDevice.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TPipeline.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TPipelineCache.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TQueueFamilyInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TRenderPass.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TScissor.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TSemaphore.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TShader.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TSubpass.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TSurface.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TSwapchain.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TVendorInfo.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TVersion.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TViewport.h中对所有的信息获取函数后增加const。并更新相应cpp文件。./engine/core下更新TCommandBufferBase中CmdPipelineBarrier成员函数。为了调用const形参中的非const函数而进行了拷贝。(这可能是没有必要的拷贝)./engine/core下更新TBarrier.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TCommandBuffer.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TCommandBufferPool.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TDescriptor.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TDescriptorPool.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TDevice.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TDeviceQueue.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TEngine.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TFence.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TFramebuffer.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TImage.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TImageView.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TInstance.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TPhysicalDevice.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TPipeline.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TRenderPass.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TShader.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TSurface.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。./engine/core下更新TSwapchain.h所有的TRefPtr<T>返回函数,都使用const TRefPtr<T>&格式返回(减少不必要的拷贝构造)。
-
2023/12/4 设计架构
./engine/core下更新TRefPtr.h。增加StaticCast<T,S>静态强制转换函数。./engine/core下更新TRefPtr.h。增加DynamicCast<T,S>动态强制转换函数。./engine/core下更新TRefPtr.h。增加ConstCast<T,S>常量强制转换函数。./engine/core下更新TCommandBufferPool。将原先的std::vector<TRefPtr<TCommandBufferBase>> commandBuffers成员分成两个成员std::vector<TRefPtr<TCommandBuffer>> commandBuffers和std::vector<TRefPtr<TSecondaryCommandBuffer>> secondaryCommandBuffers。./engine/core下更新TCommandBufferPool。Allocate()和AllocateSecondary()成员函数返回引用。./engine/core下更新TCommandBufferPool的Free(TRefPtr<TCommandBufferBase> &)成员函数。适配一级和二级的指令缓存的释放。./engine/core下更新TCommandBufferPool的InternalDestroy成员函数。适配二级的指令缓存数组的释放。./engine/core下更新TCommandBufferPool的析构函数。将指令缓存数组的清空转移至InternalDestroy成员函数中。./docs下更新Issue.md。记录一些待解决的问题。
-
2023/12/5 设计架构
./engine/core下将所有的ToString()函数后面都加上const声明。./engine/core下将TReferenced中的Release()公有成员函数转移至私有。./engine/core下TBuffer中增加Valid()函数的重写。./engine/core下TCommandBufferBase中增加Valid()函数的重写。./engine/core下TCommandBufferPool中增加Valid()函数的重写。./engine/core下TDescriptorPool中增加Valid()函数的重写。./engine/core下TDescriptorSet中增加Valid()函数的重写。./engine/core下TDevice中增加Valid()函数的重写。./engine/core下TDeviceQueue中增加Valid()函数的重写。./engine/core下TEngine中增加Valid()函数的重写。./engine/core下TFence中增加Valid()函数的重写。./engine/core下TFences中增加Valid()函数的重写。./engine/core下TFramebuffer中增加Valid()函数的重写。./engine/core下TImage中增加Valid()函数的重写。./engine/core下TImageView中增加Valid()函数的重写。./engine/core下TInstance中增加Valid()函数的重写。./engine/core下TPhysicalDevice中增加Valid()函数的重写。./engine/core下TPipeline中增加Valid()函数的重写。./engine/core下TPipelineCache中增加Valid()函数的重写。./engine/core下TPipelineDescriptorSet中增加Valid()函数的重写。./engine/core下TPipelineLayout中增加Valid()函数的重写。./engine/core下TRenderPass中增加Valid()函数的重写。./engine/core下TSampler中增加Valid()函数的重写。./engine/core下TSemaphore中增加Valid()函数的重写。./engine/core下TSurface中增加Valid()函数的重写。./engine/core下TSwapchain中增加Valid()函数的重写。./engine/core下TVmaAllocator中增加Valid()函数的重写。
-
2023/12/6 设计架构
./engine/core下TFormatInfo中移除对于Turbo::Core::TDevice的提前声明和头文件引入。./engine/core下移除所有类中对TRefPtr<T>成员赋nullptr初始值。使其通过默认的构造函数进行初始化。./engine/core下TDescriptor.cpp开头增加对于TShader.h头文件的包含。./engine/core下TPhysicalDevice中GetSupportFormats() const成员函数中将this的const TPhysicalDevice *指针强制转换成TPhysicalDevice *。用于获取支持的格式。./engine/core下TPipelineDescriptorSet.cpp开头增加对于TDescriptorSetLayout.h头文件的包含。./engine/core下TPipelineDescriptorSet.cpp开头增加对于TDescriptorPool.h头文件的包含。./engine/core下TPipelineDescriptorSet.cpp开头增加对于TBuffer.h头文件的包含。./engine/core下TRenderingPipeline.cpp开头增加对于TImageView.h头文件的包含。./engine/core下TBarrier.h中TImageMemoryBarrier的析构函数声明为default。./engine/core下TDescriptorPool.h中TDescriptorSize的析构函数声明为default。
-
2023/12/7 设计架构
./engine/core下main.cpp进行TRefPtr<T>计数引用适配。./engine/core下TDeviceQueue中的bool Submit(std::vector<TRefPtr<TSemaphore>> &, std::vector<TRefPtr<TSemaphore>> &,...)更改成bool Submit(const std::vector<TRefPtr<TSemaphore>> &, const std::vector<TRefPtr<TSemaphore>> &,...)。形参为const的版本。./engine/core下TInstance中InternalCreate()成员函数,对于this->physicalDevices数组遍历时出现了未知异常。尝试解决该Bug。./engine/core下TRefPtr中移除void Release()成员函数。./engine/core下TReferenced中增加uint32_t UnReferenceWithoutDelete() const成员函数。用于仅解除计数引用而不触发销毁判断。./engine/core下TRefPtr中增加T *Unbind()成员函数。用于仅解除计数引用而不触发销毁判断。./engine/core下TInstance中InternalCreate()成员函数,在内部会调用TVulkanLoader::Instance()->LoadInstanceDriver(this)而this当前的计数引用是0,当执行完该函数后计数引用发现自身引用数为0,将会触发自销毁(delete this)这将导致不必要的异常Bug。修正。./engine/core下TPhysicalDevice中InternalCreate()成员函数,在内部某些函数会使用TRefPtr引用this,当前的计数引用是0,当执行完该函数后计数引用发现自身引用数为0,将会触发自销毁(delete this)这将导致不必要的异常Bug。修正。./engine/core下TDevice中InternalCreate()成员函数,在内部某些函数会使用TRefPtr引用this,当前的计数引用是0,当执行完该函数后计数引用发现自身引用数为0,将会触发自销毁(delete this)这将导致不必要的异常Bug。修正。./engine/core下创建TDevice和TDeviceQueue时内部有非常恶心的逻辑前后互调用和重建,调整这一部分使其清晰明了。(历史遗留问题,当时脑子抽了写的啥玩意???)./engine/core下更新TDevice下的InternalCreate()函数。内部构建已知队列方式。而不是使用之前动态创建队列再反补回头重构设备方式(太麻烦,也没必要)。./engine/core下更新TDevice下的std::vector<TRefPtr<TDeviceQueue>> deviceQueues成员变量修改为std::map<TQueueFamilyIndex, std::vector<TRefPtr<TDeviceQueue>>>类型。./engine/core下更新TInstance下的InternalCreate()成员函数中移除对于TPhysicalDevice::InternalCreate()的调用。./engine/core下更新TPhysicalDevice下的InternalCreate()成员函数中移除对于TDevice::InternalCreate()的调用。./engine/core下更新TDevice下的InternalCreate()成员函数中移除对于TDeviceQueue::InternalCreate()的调用。./engine/core下更新TDevice下的构造函数中对于TDeviceQueue的创建。./engine/core下更新TDeviceQueue下的构造函数。移除对于重构TDevice的策略。./engine/core下更新TPhysicalDevice下移除std::map<TQueueFamilyInfo, uint32_t> availableQueueCountMap成员变量。./engine/core下更新TPhysicalDevice下移除void AvailableQueueCountMinusOneByQueueFamilyIndex(uint32_t queueFamilyIndex)成员函数。./engine/core下更新TPhysicalDevice下移除void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)成员函数。./engine/core下更新TPhysicalDevice下移除void ResetQueueCountMap()成员函数。./engine/core下更新TPhysicalDevice下GetAvailableQueueCount成员函数。./engine/core下更新TDeviceQueue下的InternalCreate()成员函数中移除对于TCommandBufferPool::InternalCreate()的调用。./engine/core下更新TDevice下的AddChildHandle(..)成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的InternalDestroy(..)成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的InternalDestroy(..)成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的GetDeviceQueueCountByQueueFamily(..)成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下移除GetDeviceQueueCountByQueueFamily成员函数。./engine/core下更新TDevice下移除GetDeviceQueueFamilyInfos成员函数。./engine/core下更新TDevice下的GetBestGraphicsQueue成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的GetBestComputeQueue成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的GetBestTransferQueue成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的GetBestSparseBindingQueue成员函数。适配deviceQueues的成员变量。./engine/core下更新TDevice下的GetBestProtectedQueue成员函数。适配deviceQueues的成员变量。./engine/core下更新main.cpp下结尾处提出对于销毁VkSurfaceKHR修改意见。
-
2023/12/11 设计架构
./docs下TurboDesign.drawio增加JobSystem板块。用于研究JobSystem。./docs下TurboDesign.drawio的JobSystem板块增加WorkStealingDequeue的架构图。用于研究JobSystem。./engine/core下TSurface中增加const VkAllocationCallbacks *externalVkAllocationCallbacks成员变量。用于适配外部VkSurfaceKHR句柄。./engine/core下TSurface中TSurface(const Turbo::Core::TRefPtr<Turbo::Core::TDevice> &, VkSurfaceKHR)构造函数中增加const VkAllocationCallbacks *pAllocator形参。并修改相应cpp中的实现。用于适配外部VkSurfaceKHR句柄。./engine/core下TSurface更新InternalDestroy()成员函数。用于适配外部VkSurfaceKHR句柄。./engine/core下main.cpp更新对于glfw创建的外部VkSurfaceKHR句柄的适配。
-
2023/12/13 设计架构
./engine/render下更新TBuffer中的buffer使用默认构造初始化。./engine/render下更新TBuffer中的Destroy成员函数。释放所有成员变量。./engine/render下更新TBuffer中的Copy成员函数。将所有Turbo::Core下的计数引用对象使用Turbo::Core::TRefPtr承接。./engine/render下更新TImage中的image和imageView成员。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TImage及其子类中的CreateImageView成员函数。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TImage中的Destroy成员函数。释放所有成员变量。./engine/render下更新TShader。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TSampler。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TRenderPass。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TGraphicsPipeline。使用Turbo::Core::TRefPtr<T>适配。
-
2023/12/14 设计架构
./engine/render下更新TResourceAllocator。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TContext。使用Turbo::Core::TRefPtr<T>适配。./engine/render下更新TContext下的Turbo::Render::TCommandBuffer从原先的typedef struct转成class声明。./engine/render下更新TBuffer.h下引入Core的TBuffer.h的头文件。通过编译。./engine/render下更新TBuffer.cpp下引入Core的TDevice.h的头文件。通过编译。./engine/render下更新TContext.h下引入Core的TFence.h的头文件。通过编译。./engine/render下更新TImage.h下引入Core的TImage.h的头文件。通过编译。./engine/render下更新TImage.h下引入Core的TImageView.h的头文件。通过编译。./engine/render下更新TImage.cpp下引入Core的TImage.h的头文件。通过编译。./engine/render下更新TResourceAllocator.cpp下引入Core的TCommandBuffer.h的头文件。通过编译。./engine/render下更新TShader.cpp下引入Core的TDevice.h的头文件。通过编译。./engine/render目前有些头文件有冗余。./engine/render使用Turbo::Core::TRefPtr<T>初步适配完成。
-
2023/12/18 设计架构
./thirdparty下更新KTX-Software同步到main分支。./thirdparty下KTX-Software中用到了std::make_unique。基本上为C++14以上特性。为此将Turbo从C++11提升至C++17。
-
2024/2/26
- 更新
HelloTriangle示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
TReferenced优化代码调用。
- 更新
-
2024/2/28
- 更新
PureHelloTriangle示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/2/29
- 更新
PureCombinedImageSampler示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/2
- 更新
PureSeparateImageSampler示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
PureIndexDraw示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
TurboTest示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/3
- 更新
PBRTest示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/4
- 更新
SecondaryCommandBufferTest示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/5
- 更新
MultiDrawTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
SubpassTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
LineAndLineWidth示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/6
- 更新
InstancedDrawTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
PerlinWorleyNoiseTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
CineShaderLava示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/7
- 更新
Octagrams示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
ProteanClouds示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
ComputePipelineTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
Auroras示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/8
- 更新
ComputerPipelineGeneratePerlinWorley示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
ComputerPipelineGenerateWorley示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
IspGlassball11Mix示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VolumetricCloud示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
RayMarchingTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
RayMarchingBoundingBoxTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
RayMarchingPerlinWorleyNoise示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/9
- 暂时移除
RenderDesignTest示例。Render库重构中。 - 更新
PushConstantTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 暂时移除
RenderAndFrameGraph示例。Render库重构中。 - 更新
ClearColorTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
ShaderIncludeTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
GreenFieldDiorama示例。使用Turbo::Core::TRefPtr<T>适配。 - 暂时移除
PureHelloTriangleAndFrameGraph示例。Render库重构中。 - 更新
VulkanDynamicRenderingTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
DynamicRenderingTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
NormalTexture示例。使用Turbo::Core::TRefPtr<T>适配。
- 暂时移除
-
2024/3/10
- 更新
BRDF示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
TessellationTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
GeometryShaderTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
TessellationAndGeometry示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
MeshShaderTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
SpecializationConstantsTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTest示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/11
- 更新
VulkanKHRRayTracingTestForLighting示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForLightingShadow示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/12
- 更新
VulkanKHRRayTracingTestForLightingShadowWithTexture示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingJitterCamera示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingAnyHitShader示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForInstances示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForReflections示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForReflections_WithoutLimited示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新
-
2024/3/13
- 更新
VulkanKHRRayTracingTestForMultiClosestHits示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForAnimationTLAS示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForAnimationBLAS示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForIntersectionShader示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForCallableShader示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanRayQueryTest示例。使用Turbo::Core::TRefPtr<T>适配。 - 更新
VulkanKHRRayTracingTestForGLTF示例。使用Turbo::Core::TRefPtr<T>适配。
- 更新