From 0aaec981b252e3b250ff0d16888a7e26812bffff Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 14 Dec 2019 13:42:16 +0800 Subject: [PATCH] to improved the CreateDefaultVertexShader() --- inc/hgl/graph/shader/node/node.h | 4 +++- src/RenderDevice/Shader/DefaultShader.cpp | 22 ++++++++++++-------- src/RenderDevice/Shader/node/shader_node.cpp | 8 +++---- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/inc/hgl/graph/shader/node/node.h b/inc/hgl/graph/shader/node/node.h index 1236e033..4bb4b370 100644 --- a/inc/hgl/graph/shader/node/node.h +++ b/inc/hgl/graph/shader/node/node.h @@ -39,6 +39,8 @@ protected: void AddInput (bool mj,const UTF8String &n,const param::ParamType &pt); void AddOutput (const UTF8String &n,const param::ParamType &pt); +public: + param::InputParam * GetInput (const UTF8String &n) ///<根据名称获取输入参数 {return GetListObject(input_params_by_name,n);} @@ -61,7 +63,7 @@ public: //参数相关 InputParamList & GetInputParamList (){return input_params;} OutputParamList & GetOutputParamList (){return output_params;} - virtual bool JoinInput (const UTF8String &,node::Node *,const UTF8String &); + virtual bool JoinInput (const UTF8String &,node::Node *,param::OutputParam *); public: //参数相关 diff --git a/src/RenderDevice/Shader/DefaultShader.cpp b/src/RenderDevice/Shader/DefaultShader.cpp index a6ac6373..4bf68609 100644 --- a/src/RenderDevice/Shader/DefaultShader.cpp +++ b/src/RenderDevice/Shader/DefaultShader.cpp @@ -7,20 +7,24 @@ BEGIN_SHADER_NAMESPACE namespace { - #define SHADER_VERTEX_INPUT_POSITION "Position" + #define SHADER_VERTEX_INPUT_STREAM_PARAM_NAME "Position" //<顶点数据输入流,输出参数名称 + #define SHADER_VERTEX_POSITION_INPUT_PARAM_NAME "Position" //<顶点shader最终节点,输入参数名称 + + //**********************************************************************注:它们两个名字一样只是碰巧**************** bool CreateDefaultVertexShader() { - node::VertexFinished vs_fin_node; //创建一个vs最终节点 + node::VertexFinished vs_fin_node; //创建一个vs最终节点 - //创建一个顶点输入节点 - node::VertexInput ni( SHADER_VERTEX_INPUT_POSITION, //该节点shader名称 - param::ParamType::Float3); //该节点数据类型 + //创建一个顶点输入节点 + node::VertexInput ni( SHADER_VERTEX_INPUT_STREAM_PARAM_NAME, //该节点shader名称 + param::ParamType::Float3); //该节点数据类型 - //对接顶点输入节点到VS最终节点 - vs_fin_node.JoinInput( SHADER_VERTEX_INPUT_POSITION, //最终节点名称 - &ni, //要接入的节点 - SHADER_VERTEX_INPUT_POSITION); //要入节点的输出参数名称 (注:这里只是碰巧名字一样,所以共用一个宏) + param::OutputParam *op=ni.GetOutput(SHADER_VERTEX_INPUT_STREAM_PARAM_NAME); //获取节点中的输出参数 + + //对接顶点输入节点到VS最终节点 + vs_fin_node.JoinInput( SHADER_VERTEX_POSITION_INPUT_PARAM_NAME, //最终节点中这个输入参数的名称 + &ni,op); //要接入的节点以及它的输出参数 ShaderMaker vs_maker(&vs_fin_node); diff --git a/src/RenderDevice/Shader/node/shader_node.cpp b/src/RenderDevice/Shader/node/shader_node.cpp index 0da884dc..7f468757 100644 --- a/src/RenderDevice/Shader/node/shader_node.cpp +++ b/src/RenderDevice/Shader/node/shader_node.cpp @@ -19,14 +19,12 @@ void Node::AddOutput(const UTF8String &n,const param::ParamType &pt) output_params_by_name.Add(n,op); } -bool Node::JoinInput(const UTF8String ¶m_name,node::Node *n,const UTF8String &op_name) +bool Node::JoinInput(const UTF8String ¶m_name,node::Node *n,param::OutputParam *op) { - if(param_name.IsEmpty()||!n) + if(param_name.IsEmpty()||!n||op) return(false); - param::OutputParam *op=n->GetOutput(op_name); - - if(!op) + if(!n->IsOutput(op)) return(false); param::InputParam *ip=GetInput(param_name);