From 3e88b0b77fa4ffca1da7ccc70e6f9e36e6aec084 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 30 Oct 2024 00:29:20 +0800 Subject: [PATCH] Added RenderBufferName.h,RenderWorkflow.h and few update. --- inc/hgl/graph/LightCullMode.h | 2 +- inc/hgl/graph/RenderBufferName.h | 61 +++++++++++++++++++++++ inc/hgl/graph/RenderFramework.h | 14 ------ inc/hgl/graph/RenderWorkflow.h | 30 +++++++++++ inc/hgl/graph/VK.h | 5 ++ src/SceneGraph/CMakeLists.txt | 2 + src/SceneGraph/Vulkan/VKDeviceCreater.cpp | 5 +- 7 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 inc/hgl/graph/RenderBufferName.h create mode 100644 inc/hgl/graph/RenderWorkflow.h diff --git a/inc/hgl/graph/LightCullMode.h b/inc/hgl/graph/LightCullMode.h index 9788d752..1eef99c0 100644 --- a/inc/hgl/graph/LightCullMode.h +++ b/inc/hgl/graph/LightCullMode.h @@ -20,7 +20,7 @@ enum class LightingCullingMode /** * 基于Tile的剔除模式的改进型 - * 同Tile方法,得出Tile后,再通过Compute Shader遍历Tile内所有象素,得出当前Tile的最远z值和最近z值。 + * 同Tile方法,得出Tile后,再通过遍历Tile内所有象素,得出当前Tile的最远z值和最近z值。 * 根据XY与zNear/zFar得出一个Volume,计算所有光源与Volume相交性。 */ TileVolume, ///<瓦片体积剔除 diff --git a/inc/hgl/graph/RenderBufferName.h b/inc/hgl/graph/RenderBufferName.h new file mode 100644 index 00000000..353e453d --- /dev/null +++ b/inc/hgl/graph/RenderBufferName.h @@ -0,0 +1,61 @@ +#pragma once + +#include + +VK_NAMESPACE_BEGIN + +const RENDER_BUFFER_NAME RenderBuffer_Swapchain ="Swapchain"; + +const RENDER_BUFFER_NAME RenderBuffer_Depth ="Depth"; +const RENDER_BUFFER_NAME RenderBuffer_Stencil ="Stencil"; + +const RENDER_BUFFER_NAME VBuffer_MeshID ="VB_MeshID"; ///< 所绘制的Mesh编号, R32UI格式 +const RENDER_BUFFER_NAME VBuffer_TriangleID ="VB_TriangleID"; ///< 三角形编号, R8UI格式 +const RENDER_BUFFER_NAME VBuffer_MaterialID ="VB_MaterialID"; ///< 材质ID与材质实例ID, RG8UI格式 + +const RENDER_BUFFER_NAME GBuffer_BaseColor ="GB_BaseColor"; ///<基础颜色(RGB565/RGB5A1/RGBA8/RGB10A2/RG11B10,RGBA16F) +const RENDER_BUFFER_NAME GBuffer_Luminance ="GB_Luminance"; ///<亮度(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_CbCr ="GB_CbCr"; ///<色度(RG8/RG16F) + +const RENDER_BUFFER_NAME GBuffer_Normal ="GB_Normal"; ///<法线(RG8,RG16F) +const RENDER_BUFFER_NAME GBuffer_BentNormal ="GB_BentNormal"; ///<弯曲法线(RG8,RG16F) + +const RENDER_BUFFER_NAME GBuffer_Metallic ="GB_Metallic"; ///<金属度(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_Roughness ="GB_Roughness"; ///<粗糙度(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_Specular ="GB_Specular"; ///<高光(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_Glossiness ="GB_Glossiness"; ///<光泽度(R8/R16F/R32F) + +const RENDER_BUFFER_NAME GBuffer_Reflection ="GB_Reflection"; ///<反射(R8) +const RENDER_BUFFER_NAME GBuffer_Refraction ="GB_Refraction"; ///<折射(R8) + +const RENDER_BUFFER_NAME GBuffer_ClearCoat ="GB_ClearCoat"; ///<透明涂层(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_ClearCoatRoughness ="GB_ClearCoatRoughness"; ///<透明涂层粗糙度(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_ClearCoatNormal ="GB_ClearCoatNormal"; ///<透明涂层法线(RG8/RG16F) + +const RENDER_BUFFER_NAME GBuffer_IOR ="GB_IOR"; ///<折射率(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_Tranmission ="GB_Tranmission"; ///<透射率(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_Absorption ="GB_Absorption"; ///<吸收率(R8/R16F/R32F) + +const RENDER_BUFFER_NAME GBuffer_MicroThickness ="GB_MicroThickness"; ///<微厚度(R8/R16F/R32F) + +const RENDER_BUFFER_NAME GBuffer_AmbientOcclusion ="GB_AmbientOcclusion"; ///<环境光遮蔽(R8/R16F/R32F) + +const RENDER_BUFFER_NAME GBuffer_Anisotropy ="GB_Anisotropy"; ///<各向异性(R8/R16F/R32F) +const RENDER_BUFFER_NAME GBuffer_AnisotropyDirection="GB_AnisotropyDirection"; ///<各向异性方向(RG8/RG16F/RG32F) + +const RENDER_BUFFER_NAME GBuffer_Emissive ="GB_Emissive"; ///<自发光(RGB565/RGB5A1/RGBA8/RGB10A2/RG11B10,RGBA16F) + +const RENDER_BUFFER_NAME GBuffer_SheenColor ="GB_SheenColor"; ///<光泽颜色(RGB565/RGB5A1/RGBA8/RGB10A2/RG11B10,RGBA16F) +const RENDER_BUFFER_NAME GBuffer_SheenRoughness ="GB_SheenRoughness"; ///<光泽粗糙度(R8/R16F/R32F) + +const RENDER_BUFFER_NAME GBuffer_SubsurfaceColor ="GB_SubsurfaceColor"; ///<次表面颜色(RGB565/RGB5A1/RGBA8/RGB10A2/RG11B10,RGBA16F) + +const RENDER_BUFFER_NAME GBuffer_ShadingModel ="GB_ShadingModel"; ///<着色模型(R4UI/R8UI) + +const RENDER_BUFFER_NAME GBuffer_LightingChannels ="GB_LightingChannels"; ///<光照通道(R8UI) + +const RENDER_BUFFER_NAME GBuffer_MotionVector ="GB_MotionVector"; ///<运动矢量(RG16F) + +const RENDER_BUFFER_NAME GBuffer_LastScreenPosition ="GB_LastScreenPosition"; ///<上一帧屏幕位置(RG16I) + +VK_NAMESPACE_END diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 2f2cc79e..373a3981 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -6,20 +6,6 @@ VK_NAMESPACE_BEGIN - -enum class RenderOrder -{ - First, ///<最先渲染 - - NearToFar, ///<从近到远 - Irrorder, ///<无序渲染 - FarToNear, ///<从远到近 - - Last, ///<最后渲染 - - ENUM_CLASS_RANGE(First,Last) -};//enum class RenderOrder - class GraphModule; /** diff --git a/inc/hgl/graph/RenderWorkflow.h b/inc/hgl/graph/RenderWorkflow.h new file mode 100644 index 00000000..1e59b7f1 --- /dev/null +++ b/inc/hgl/graph/RenderWorkflow.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include + +VK_NAMESPACE_BEGIN + +enum class RenderOrder +{ + First, ///<最先渲染 + + NearToFar, ///<从近到远 + Irrorder, ///<无序渲染 + FarToNear, ///<从远到近 + + Last, ///<最后渲染 + + ENUM_CLASS_RANGE(First,Last) +};//enum class RenderOrder + +struct RenderWorkConfig +{ + BlendMode blend_mode; + RenderOrder render_order; + + SortedSets output_buffer; +};//struct RenderWorkConfig; + +VK_NAMESPACE_END diff --git a/inc/hgl/graph/VK.h b/inc/hgl/graph/VK.h index 8036e277..716e654e 100644 --- a/inc/hgl/graph/VK.h +++ b/inc/hgl/graph/VK.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,10 @@ constexpr size_t VK_DESCRIPTOR_TYPE_END_RANGE=VK_DESCRIPTOR_TYPE_INPUT_ATTACHMEN constexpr size_t VK_DESCRIPTOR_TYPE_RANGE_SIZE=VK_DESCRIPTOR_TYPE_END_RANGE-VK_DESCRIPTOR_TYPE_BEGIN_RANGE+1; #endif//VK_DESCRIPTOR_TYPE_RANGE_SIZE +DefineIDName(TEXTURE_NAME,char) +DefineIDName(SHADER_NAME,char) +DefineIDName(RENDER_BUFFER_NAME,char) + class TextureManager; class GraphModule; diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index e51b2cc4..be54bb79 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -304,6 +304,8 @@ SET(GRAPH_MANAGER_SOURCE manager/GraphManager.cpp SOURCE_GROUP("Render Framework\\Manager" FILES ${GRAPH_MANAGER_HEADER} ${GRAPH_MANAGER_SOURCE}) SET(RENDER_FRAMEWORK_FILES ${SG_INCLUDE_PATH}/RenderFramework.h + ${SG_INCLUDE_PATH}/RenderBufferName.h + ${SG_INCLUDE_PATH}/RenderWorkflow.h RenderFramework.cpp) SOURCE_GROUP("Render Framework" FILES ${RENDER_FRAMEWORK_FILES}) diff --git a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp index 711df06a..9bb5a089 100644 --- a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp @@ -327,8 +327,11 @@ GPUDevice *VulkanDeviceCreater::CreateRenderDevice() device_attr->uint32_index_type=true; } - if(require.blendOperationAdvanced>=VulkanHardwareRequirement::SupportLevel::Want) + if(physical_device->SupportBlendOpAdvanced() + &&require.blendOperationAdvanced>=VulkanHardwareRequirement::SupportLevel::Want) + { device_attr->blendOpAdvance=true; + } device_attr->surface_format=surface_format;