Blender
V5.0
source
blender
nodes
shader
materialx
node_parser.h
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2011-2022 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#pragma once
6
7
#include "
material.h
"
8
#include "
node_graph.h
"
9
#include "
node_item.h
"
10
11
#include "
DNA_node_types.h
"
12
13
#include "
CLG_log.h
"
14
15
namespace
blender::nodes::materialx
{
16
17
extern
struct
CLG_LogRef *
LOG_IO_MATERIALX
;
18
19
class
GroupNodeParser
;
20
25
class
NodeParser
{
26
protected
:
27
NodeGraph
&
graph_
;
28
const
bNode
*
node_
;
29
const
bNodeSocket
*
socket_out_
;
30
NodeItem::Type
to_type_
;
31
GroupNodeParser
*
group_parser_
;
32
33
public
:
34
NodeParser
(
NodeGraph
&graph,
35
const
bNode
*node,
36
const
bNodeSocket
*socket_out,
37
NodeItem::Type
to_type
,
38
GroupNodeParser
*group_parser);
39
virtual
~NodeParser
() =
default
;
40
41
virtual
NodeItem
compute
() = 0;
42
virtual
NodeItem
compute_full
();
43
44
protected
:
45
std::string
node_name
(
const
char
*override_output_name =
nullptr
)
const
;
46
NodeItem
create_node
(
const
std::string &category,
NodeItem::Type
type);
47
NodeItem
create_node
(
const
std::string &category,
48
NodeItem::Type
type,
49
const
NodeItem::Inputs
&
inputs
);
50
NodeItem
create_input
(
const
std::string &
name
,
const
NodeItem
&item);
51
NodeItem
create_output
(
const
std::string &
name
,
const
NodeItem
&item);
52
NodeItem
get_input_default
(
const
std::string &
name
,
NodeItem::Type
to_type
);
53
NodeItem
get_input_default
(
int
index,
NodeItem::Type
to_type
);
54
NodeItem
get_output_default
(
const
std::string &
name
,
NodeItem::Type
to_type
);
55
NodeItem
get_output_default
(
int
index,
NodeItem::Type
to_type
);
56
NodeItem
get_input_link
(
const
std::string &
name
,
NodeItem::Type
to_type
);
57
NodeItem
get_input_link
(
int
index,
NodeItem::Type
to_type
);
58
NodeItem
get_input_value
(
const
std::string &
name
,
NodeItem::Type
to_type
);
59
NodeItem
get_input_value
(
int
index,
NodeItem::Type
to_type
);
60
NodeItem
empty
()
const
;
61
template
<
class
T>
NodeItem
val
(
const
T
&
data
)
const
;
62
NodeItem
texcoord_node
(
NodeItem::Type
type =
NodeItem::Type::Vector2
,
63
const
std::string &attribute_name =
""
);
64
65
private
:
66
NodeItem
get_default(
const
bNodeSocket
&socket,
NodeItem::Type
to_type
);
67
NodeItem
get_input_link
(
const
bNodeSocket
&socket,
68
NodeItem::Type
to_type
,
69
bool
use_group_default);
70
NodeItem
get_input_value
(
const
bNodeSocket
&socket,
NodeItem::Type
to_type
);
71
};
72
73
template
<
class
T>
NodeItem
NodeParser::val
(
const
T
&
data
)
const
74
{
75
return
empty
().
val
(
data
);
76
}
77
94
struct
NodeParserData
{
95
NodeGraph
&
graph
;
96
NodeItem::Type
to_type
;
97
GroupNodeParser
*
group_parser
;
98
NodeItem
result
;
99
ExportParams
export_params
;
100
};
101
102
#define NODE_SHADER_MATERIALX_BEGIN \
103
class MaterialXNodeParser : public materialx::NodeParser { \
104
public: \
105
using materialx::NodeParser::NodeParser; \
106
materialx::NodeItem compute() override; \
107
}; \
108
\
109
materialx::NodeItem MaterialXNodeParser::compute() \
110
{ \
111
using NodeItem = materialx::NodeItem;
112
113
#define NODE_SHADER_MATERIALX_END \
114
} \
115
\
116
static void node_shader_materialx(void *data, struct bNode *node, struct bNodeSocket *out) \
117
{ \
118
materialx::NodeParserData *d = reinterpret_cast<materialx::NodeParserData *>(data); \
119
d->result = \
120
MaterialXNodeParser(d->graph, node, out, d->to_type, d->group_parser).compute_full(); \
121
}
122
123
}
// namespace blender::nodes::materialx
CLG_log.h
DNA_node_types.h
data
BMesh const char void * data
Definition
bmesh_iterators_inline.hh:37
blender::nodes::materialx::GroupNodeParser
Definition
group_nodes.h:17
blender::nodes::materialx::NodeItem
Definition
node_item.h:18
blender::nodes::materialx::NodeItem::Type
Type
Definition
node_item.h:22
blender::nodes::materialx::NodeItem::Type::Vector2
@ Vector2
Definition
node_item.h:35
blender::nodes::materialx::NodeItem::val
NodeItem val(const T &data) const
Definition
node_item.h:148
blender::nodes::materialx::NodeItem::Inputs
std::vector< std::pair< std::string, NodeItem > > Inputs
Definition
node_item.h:20
blender::nodes::materialx::NodeParser::group_parser_
GroupNodeParser * group_parser_
Definition
node_parser.h:31
blender::nodes::materialx::NodeParser::get_input_value
NodeItem get_input_value(const std::string &name, NodeItem::Type to_type)
Definition
node_parser.cc:110
blender::nodes::materialx::NodeParser::node_
const bNode * node_
Definition
node_parser.h:28
blender::nodes::materialx::NodeParser::compute
virtual NodeItem compute()=0
blender::nodes::materialx::NodeParser::compute_full
virtual NodeItem compute_full()
Definition
node_parser.cc:30
blender::nodes::materialx::NodeParser::socket_out_
const bNodeSocket * socket_out_
Definition
node_parser.h:29
blender::nodes::materialx::NodeParser::graph_
NodeGraph & graph_
Definition
node_parser.h:27
blender::nodes::materialx::NodeParser::node_name
std::string node_name(const char *override_output_name=nullptr) const
Definition
node_parser.cc:56
blender::nodes::materialx::NodeParser::NodeParser
NodeParser(NodeGraph &graph, const bNode *node, const bNodeSocket *socket_out, NodeItem::Type to_type, GroupNodeParser *group_parser)
Definition
node_parser.cc:17
blender::nodes::materialx::NodeParser::create_input
NodeItem create_input(const std::string &name, const NodeItem &item)
Definition
node_parser.cc:80
blender::nodes::materialx::NodeParser::get_input_link
NodeItem get_input_link(const std::string &name, NodeItem::Type to_type)
Definition
node_parser.cc:100
blender::nodes::materialx::NodeParser::texcoord_node
NodeItem texcoord_node(NodeItem::Type type=NodeItem::Type::Vector2, const std::string &attribute_name="")
Definition
node_parser.cc:135
blender::nodes::materialx::NodeParser::get_input_default
NodeItem get_input_default(const std::string &name, NodeItem::Type to_type)
Definition
node_parser.cc:90
blender::nodes::materialx::NodeParser::~NodeParser
virtual ~NodeParser()=default
blender::nodes::materialx::NodeParser::get_output_default
NodeItem get_output_default(const std::string &name, NodeItem::Type to_type)
Definition
node_parser.cc:120
blender::nodes::materialx::NodeParser::create_node
NodeItem create_node(const std::string &category, NodeItem::Type type)
Definition
node_parser.cc:68
blender::nodes::materialx::NodeParser::empty
NodeItem empty() const
Definition
node_parser.cc:130
blender::nodes::materialx::NodeParser::create_output
NodeItem create_output(const std::string &name, const NodeItem &item)
Definition
node_parser.cc:85
blender::nodes::materialx::NodeParser::val
NodeItem val(const T &data) const
Definition
node_parser.h:73
blender::nodes::materialx::NodeParser::to_type_
NodeItem::Type to_type_
Definition
node_parser.h:30
T
#define T
Definition
mball_tessellate.cc:274
blender::gpu::shader::to_type
static Type to_type(const GPUType type)
Definition
gpu_shader_create_info.hh:338
blender::nodes::materialx
Definition
group_nodes.cc:14
blender::nodes::materialx::LOG_IO_MATERIALX
struct CLG_LogRef * LOG_IO_MATERIALX
node_graph.h
node_item.h
inputs
static blender::bke::bNodeSocketTemplate inputs[]
Definition
node_texture_at.cc:11
name
const char * name
Definition
python_compat.hh:32
material.h
bNodeSocket
Definition
DNA_node_types.h:121
bNode
Definition
DNA_node_types.h:422
blender::nodes::materialx::ExportParams
Definition
source/blender/nodes/shader/materialx/material.h:21
blender::nodes::materialx::NodeGraph
Definition
node_graph.h:27
blender::nodes::materialx::NodeParserData
Definition
node_parser.h:94
blender::nodes::materialx::NodeParserData::graph
NodeGraph & graph
Definition
node_parser.h:95
blender::nodes::materialx::NodeParserData::to_type
NodeItem::Type to_type
Definition
node_parser.h:96
blender::nodes::materialx::NodeParserData::result
NodeItem result
Definition
node_parser.h:98
blender::nodes::materialx::NodeParserData::group_parser
GroupNodeParser * group_parser
Definition
node_parser.h:97
blender::nodes::materialx::NodeParserData::export_params
ExportParams export_params
Definition
node_parser.h:99
Generated on
for Blender by
doxygen
1.16.1