Geometry Nodes: new Material input node
[blender.git] / source / blender / nodes / geometry / nodes / node_geo_input_material.cc
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 #include "UI_interface.h"
18 #include "UI_resources.h"
19
20 #include "node_geometry_util.hh"
21
22 static bNodeSocketTemplate geo_node_input_material_out[] = {
23     {SOCK_MATERIAL, N_("Material")},
24     {-1, ""},
25 };
26
27 static void geo_node_input_material_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
28 {
29   uiItemR(layout, ptr, "material", 0, "", ICON_NONE);
30 }
31
32 namespace blender::nodes {
33
34 static void geo_node_input_material_exec(GeoNodeExecParams params)
35 {
36   Material *material = (Material *)params.node().id;
37   params.set_output("Material", material);
38 }
39
40 }  // namespace blender::nodes
41
42 void register_node_type_geo_input_material()
43 {
44   static bNodeType ntype;
45
46   geo_node_type_base(&ntype, GEO_NODE_INPUT_MATERIAL, "Material", NODE_CLASS_INPUT, 0);
47   node_type_socket_templates(&ntype, nullptr, geo_node_input_material_out);
48   ntype.draw_buttons = geo_node_input_material_layout;
49   ntype.geometry_node_execute = blender::nodes::geo_node_input_material_exec;
50   nodeRegisterType(&ntype);
51 }