Blender V5.0
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
16
17extern struct CLG_LogRef *LOG_IO_MATERIALX;
18
19class GroupNodeParser;
20
26 protected:
28 const bNode *node_;
32
33 public:
34 NodeParser(NodeGraph &graph,
35 const bNode *node,
36 const bNodeSocket *socket_out,
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,
50 NodeItem create_input(const std::string &name, const NodeItem &item);
51 NodeItem create_output(const std::string &name, const NodeItem &item);
60 NodeItem empty() const;
61 template<class T> NodeItem val(const T &data) const;
63 const std::string &attribute_name = "");
64
65 private:
66 NodeItem get_default(const bNodeSocket &socket, NodeItem::Type to_type);
69 bool use_group_default);
71};
72
73template<class T> NodeItem NodeParser::val(const T &data) const
74{
75 return empty().val(data);
76}
77
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
BMesh const char void * data
NodeItem val(const T &data) const
Definition node_item.h:148
std::vector< std::pair< std::string, NodeItem > > Inputs
Definition node_item.h:20
NodeItem get_input_value(const std::string &name, NodeItem::Type to_type)
std::string node_name(const char *override_output_name=nullptr) const
NodeParser(NodeGraph &graph, const bNode *node, const bNodeSocket *socket_out, NodeItem::Type to_type, GroupNodeParser *group_parser)
NodeItem create_input(const std::string &name, const NodeItem &item)
NodeItem get_input_link(const std::string &name, NodeItem::Type to_type)
NodeItem texcoord_node(NodeItem::Type type=NodeItem::Type::Vector2, const std::string &attribute_name="")
NodeItem get_input_default(const std::string &name, NodeItem::Type to_type)
NodeItem get_output_default(const std::string &name, NodeItem::Type to_type)
NodeItem create_node(const std::string &category, NodeItem::Type type)
NodeItem create_output(const std::string &name, const NodeItem &item)
NodeItem val(const T &data) const
Definition node_parser.h:73
#define T
static Type to_type(const GPUType type)
struct CLG_LogRef * LOG_IO_MATERIALX
static blender::bke::bNodeSocketTemplate inputs[]
const char * name