From 793b61b6a85e4d247c26aa1d4de96c566e819281 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 6 Dec 2019 21:45:51 +0800 Subject: [PATCH] add shader node header files. --- inc/hgl/graph/shader/ShaderNode.h | 80 +++++++++++++++++++++ inc/hgl/graph/shader/ShaderNodeDefine.h | 15 ++++ inc/hgl/graph/shader/ShaderParam.h | 94 +++++++++++++++++++++++++ inc/hgl/graph/shader/TextureNode.h | 46 ++++++++++++ inc/hgl/graph/shader/VectorNode.h | 55 +++++++++++++++ src/RenderDevice/Shader/CMakeLists.txt | 6 +- src/RenderDevice/Vulkan/CMakeLists.txt | 21 +++--- src/SceneGraph/CMakeLists.txt | 6 +- src/Util/CMakeLists.txt | 6 +- 9 files changed, 305 insertions(+), 24 deletions(-) create mode 100644 inc/hgl/graph/shader/ShaderNode.h create mode 100644 inc/hgl/graph/shader/ShaderNodeDefine.h create mode 100644 inc/hgl/graph/shader/ShaderParam.h create mode 100644 inc/hgl/graph/shader/TextureNode.h create mode 100644 inc/hgl/graph/shader/VectorNode.h diff --git a/inc/hgl/graph/shader/ShaderNode.h b/inc/hgl/graph/shader/ShaderNode.h new file mode 100644 index 00000000..64d3f88b --- /dev/null +++ b/inc/hgl/graph/shader/ShaderNode.h @@ -0,0 +1,80 @@ +#ifndef HGL_SHADER_NODE_INCLUDE +#define HGL_SHADER_NODE_INCLUDE + +#define SHADER_NODE_NAMESPACE hgl::graph::shader::node +#define BEGIN_SHADER_NODE_NAMESPACE namespace hgl{namespace graph{namespace shader{namespace node{ +#define END_SHADER_NODE_NAMESPACE }}}} + +BEGIN_SHADER_NODE_NAMESPACE + /** + * Shader 节点是所有Shader的基础,它可以是一个简单的计算,也可以是一段复杂的函数 + */ + class Node + { + UTF8String type_name; ///<节点类型本身的名称 + UTF8String name; ///<节点用户自定义名称 + + public: + + Node(const UTF8String &n){type_name=n;} + virtual ~Node()=default; + };//class Node + + /** + * 纯输入节点 + */ + class Input:virtual public Node + { + public: + + ObjectList input_params; + + public: + + using Node::Node; + virtual ~InputNode()=default; + };//class InputNode + + /** + * 纯输出节点,用于固管行为的向下一级节点输入数据,无输入部分 + */ + class Output:virtual public Node + { + public: + + ObjectList output_params; + + public: + + using Node::Node; + virtual ~OutputNode()=default; + };// + + /** + * 输入输出节点 + */ + class InputOutput:public Node + { + public: + + ObjectList input_params; + ObjectList output_params; + + public: + + using Node::Node; + virtual ~InputOutputNode()=default; + };// + + /** + * 最终节点,用于最终结果的一类节点,无输出部分 + */ + class Finish:virtual public InputNode + { + public: + + using InputNode::InputNode; + virtual ~FinishNode()=default; + };// +BEGIN_SHADER_NODE_NAMESPACE +#endif//HGL_SHADER_NODE_INCLUDE diff --git a/inc/hgl/graph/shader/ShaderNodeDefine.h b/inc/hgl/graph/shader/ShaderNodeDefine.h new file mode 100644 index 00000000..ae71bc2d --- /dev/null +++ b/inc/hgl/graph/shader/ShaderNodeDefine.h @@ -0,0 +1,15 @@ +#ifndef HGL_SHADER_NODE_DEFINE_INCLUDE +#define HGL_SHADER_NODE_DEFINE_INCLUDE + +BEGIN_SHADER_NAMESPACE +namespace node +{ + class Bool + { + public: + + + };//class Bool +}//namespace node +END_SHADER_NAMESPACE +#endif//HGL_SHADER_NODE_DEFINE_INCLUDE diff --git a/inc/hgl/graph/shader/ShaderParam.h b/inc/hgl/graph/shader/ShaderParam.h new file mode 100644 index 00000000..67634703 --- /dev/null +++ b/inc/hgl/graph/shader/ShaderParam.h @@ -0,0 +1,94 @@ +#ifndef HGL_SHADER_PARAM_TYPE_INCLUDE +#define HGL_SHADER_PARAM_TYPE_INCLUDE + +#define BEGIN_SHADER_NAMESPACE namespace hgl{namespace graph{namespace shader{ +#undef END_SHADER_NAMESPACE }}} + +BEGIN_SHADER_NAMESPACE + /** + * 参数类型 + */ + enum class ParamType + { + BOOL=1, + + FLOAT,INT,UINT,MATRIX, //不区分1/2/3/4通道数量的类型 + + FLOAT_1, + FLOAT_2, + FLOAT_3, + FLOAT_4, + + INT_1, + INT_2, + INT_3, + INT_4, + + UINT_1, + UINT_2, + UINT_3, + UINT_4, + + MAT3x3, + MAT3x4, + MAT4x4, + + TEXTURE_1D, + TEXTURE_2D, + TEXTURE_3D, + TEXTURE_CUBE, + + TEXTURE_1D_ARRAY, + TEXTURE_2D_ARRAY, + TEXTURE_CUBE_ARRAY, + + FLOAT_1_STREAM, + FLOAT_2_STREAM, + FLOAT_3_STREAM, + FLOAT_4_STREAM, + + INT_1_STREAM, + INT_2_STREAM, + INT_3_STREAM, + INT_4_STREAM, + + UINT_1_STREAM, + UINT_2_STREAM, + UINT_3_STREAM, + UINT_4_STREAM, + + ARRAY_1D, //阵列 + ARRAY_2D, //2D阵列 + + UBO, //UBO name + NODE, //另一个节点,只可做为输入参数 + + BEGIN_RANGE =FLOAT_1, + END_RANGE =NODE, + RANGE_SIZE =(END_RAGE-BEGIN_RANGE+1) + };//enum class ParamType + + /** + * 参数定义 + */ + struct Param + { + UTF8String name; //参数名称 + ParamType type; //类型 + };//struct Param + /** + * 数值类输入参数定义 + */ + template + struct ParamNumber:public Param + { + bool is_const; + T min_value; + T max_value; + };//struct ParamNumber:public Param + +#define SHADER_INPUT_PARAM(name,type) input_params.Add(new Param(#name,ParamType::type); +#define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new Param(#name,ParamType::type); + +END_SHADER_NAMESPACE +#endif//HGL_SHADER_PARAM_TYPE_INCLUDE diff --git a/inc/hgl/graph/shader/TextureNode.h b/inc/hgl/graph/shader/TextureNode.h new file mode 100644 index 00000000..cde0ef06 --- /dev/null +++ b/inc/hgl/graph/shader/TextureNode.h @@ -0,0 +1,46 @@ +#ifndef HGL_SHADER_TEXTURE_NODE_INCLUDE +#define HGL_SHADER_TEXTURE_NODE_INCLUDE + +#include +BEGIN_SHADER_NODE_NAMESPACE +class texture1D:public InputOutput +{ +public: + + texture1D():InputOutput("texture1D") + { + SHADER_INPUT_PARAM(U,FLOAT1) + } +};//class texture1D:public InputOutput + +class texture2D:public InputOutput +{ +public: + + texture2D():InputOutput("texture2D") + { + SHADER_INPUT_PARAM(UV,FLOAT2) + } +};//class texture2D:public InputOutput + +class texture3D:public InputOutput +{ +public: + + texture3D():InputOutput("texture3D") + { + SHADER_INPUT_PARAM(UVD,FLOAT3) + } +};//class texture3D:public InputOutput + +class TextureCube:public InputOutput +{ +public: + + textureCube():InputOutput("textureCube") + { + SHADER_INPUT_PARAM(XYZ,FLOAT3) + } +};//class TextureCube:public InputOutput +END_SHADER_NODE_NAMESPACE +#endif//HGL_SHADER_TEXTURE_NODE_INCLUDE diff --git a/inc/hgl/graph/shader/VectorNode.h b/inc/hgl/graph/shader/VectorNode.h new file mode 100644 index 00000000..249b7b72 --- /dev/null +++ b/inc/hgl/graph/shader/VectorNode.h @@ -0,0 +1,55 @@ +#ifndef HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE +#define HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE + +#include +#include +BEGIN_SHADER_NAMESPACE +class float1:public Output +{ + float x; + +public: + + float1():Output("float1") + { + SHADER_OUTPUT_PARAM(X,FLOAT_1) + } +};//class float1:public Output + +class float2:public Output +{ + float x,y; + +public: + + float2():Output("float2") + { + SHADER_OUTPUT_PARAM(XY,FLOAT_2) + } +};//class float2:public Output + +class float3:public Output +{ + float x,y,z; + +public: + + float3():Output("float3") + { + SHADER_OUTPUT_PARAM(XYZ,FLOAT_3) + } +};//class float3:public Output + +class float4:public Output +{ + float x,y,z,w; + +public: + + float4():Output("float4") + { + SHADER_OUTPUT_PARAM(XYZW,FLOAT_4) + } +};//class float4:public Output +END_SHADER_NAMESPACE +#endif//HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE diff --git a/src/RenderDevice/Shader/CMakeLists.txt b/src/RenderDevice/Shader/CMakeLists.txt index b8eeb9ab..ff82cf6d 100644 --- a/src/RenderDevice/Shader/CMakeLists.txt +++ b/src/RenderDevice/Shader/CMakeLists.txt @@ -7,7 +7,5 @@ SET(GRAPH_SHADER_SOURCE glsl2spv.cpp) SOURCE_GROUP("Header Files" FILES ${GRAPH_SHADER_HEADER}) SOURCE_GROUP("Source Files" FILES ${GRAPH_SHADER_SOURCE}) -add_library(ULRE.Shader STATIC ${GRAPH_SHADER_HEADER} - ${GRAPH_SHADER_SOURCE}) - -set_property(TARGET ULRE.Shader PROPERTY FOLDER "ULRE") \ No newline at end of file +add_cm_library(ULRE.Shader "ULRE" ${GRAPH_SHADER_HEADER} + ${GRAPH_SHADER_SOURCE}) \ No newline at end of file diff --git a/src/RenderDevice/Vulkan/CMakeLists.txt b/src/RenderDevice/Vulkan/CMakeLists.txt index 81a8a45b..83fe548b 100644 --- a/src/RenderDevice/Vulkan/CMakeLists.txt +++ b/src/RenderDevice/Vulkan/CMakeLists.txt @@ -28,7 +28,6 @@ SET(VK_RENDER_PASS_SOURCE VKFramebuffer.cpp VKSwapchain.cpp VKCommandBuffer.cpp) - SET(RENDER_DEVICE_VULKAN_SOURCE VKFormat.cpp VKMemory.cpp VKProperties.cpp @@ -57,15 +56,13 @@ SOURCE_GROUP("Header Files" FILES ${RENDER_DEVICE_VULKAN_HEADER}) SOURCE_GROUP("Source Files" FILES ${RENDER_DEVICE_VULKAN_SOURCE}) SOURCE_GROUP("POD Source Files" FILES ${RENDER_DEVICE_VULKAN_POD_SOURCE}) -add_library(ULRE.RenderDevice.Vulkan STATIC ${RENDER_DEVICE_VULKAN_HEADER} - ${RENDER_DEVICE_VULKAN_SOURCE} - ${RENDER_DEVICE_VULKAN_POD_SOURCE} +add_cm_library(ULRE.RenderDevice.Vulkan "ULRE" ${RENDER_DEVICE_VULKAN_HEADER} + ${RENDER_DEVICE_VULKAN_SOURCE} + ${RENDER_DEVICE_VULKAN_POD_SOURCE} - ${VK_DEVICE_SOURCE} - ${VK_DESCRIPTOR_SETS_SOURCE} - ${VK_SHADER_SOURCE} - ${VK_MATERIAL_SOURCE} - ${VK_RENDER_PASS_SOURCE} - ${RENDER_DEVICE_VULKAN_SOURCE}) - -set_property(TARGET ULRE.RenderDevice.Vulkan PROPERTY FOLDER "ULRE") + ${VK_DEVICE_SOURCE} + ${VK_DESCRIPTOR_SETS_SOURCE} + ${VK_SHADER_SOURCE} + ${VK_MATERIAL_SOURCE} + ${VK_RENDER_PASS_SOURCE} + ${RENDER_DEVICE_VULKAN_SOURCE}) diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index bf1cb6a4..ca0a4142 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -32,7 +32,5 @@ SET(SCENE_GRAPH_SOURCE Coordinate.cpp SOURCE_GROUP("Header Files" FILES ${SCENE_GRAPH_HEADER}) SOURCE_GROUP("Source Files" FILES ${SCENE_GRAPH_SOURCE}) -add_library(ULRE.SceneGraph STATIC ${SCENE_GRAPH_HEADER} - ${SCENE_GRAPH_SOURCE}) - -set_property(TARGET ULRE.SceneGraph PROPERTY FOLDER "ULRE") \ No newline at end of file +add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_HEADER} + ${SCENE_GRAPH_SOURCE}) \ No newline at end of file diff --git a/src/Util/CMakeLists.txt b/src/Util/CMakeLists.txt index dfe995ff..c6668331 100644 --- a/src/Util/CMakeLists.txt +++ b/src/Util/CMakeLists.txt @@ -10,7 +10,5 @@ SET(UTIL_SOURCE #Field.cpp SOURCE_GROUP("Header Files" FILES ${UTIL_HEADER}) SOURCE_GROUP("Source Files" FILES ${UTIL_SOURCE}) -add_library(ULRE.Util STATIC ${UTIL_HEADER} - ${UTIL_SOURCE}) - -set_property(TARGET ULRE.Util PROPERTY FOLDER "ULRE") \ No newline at end of file +add_cm_library(ULRE.Util "ULRE" ${UTIL_HEADER} + ${UTIL_SOURCE}) \ No newline at end of file