Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/shader/nodes/node_shader_vertex_color.cc
| /* SPDX-License-Identifier: GPL-2.0-or-later | /* SPDX-License-Identifier: GPL-2.0-or-later | ||||
| * Copyright 2005 Blender Foundation. All rights reserved. */ | * Copyright 2005 Blender Foundation. All rights reserved. */ | ||||
| #include "node_shader_util.hh" | #include "node_shader_util.hh" | ||||
| #include "NOD_geometry_exec.hh" | |||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "UI_interface.h" | #include "UI_interface.h" | ||||
| #include "UI_resources.h" | #include "UI_resources.h" | ||||
| namespace blender::nodes::node_shader_vertex_color_cc { | namespace blender::nodes::node_shader_vertex_color_cc { | ||||
| static void node_declare(NodeDeclarationBuilder &b) | static void node_declare(NodeDeclarationBuilder &b) | ||||
| Show All 40 Lines | static int node_shader_gpu_vertex_color(GPUMaterial *mat, | ||||
| } | } | ||||
| else { /* Fall back on active render color attribute. */ | else { /* Fall back on active render color attribute. */ | ||||
| vertexColorLink = GPU_attribute(mat, CD_MCOL, vertexColor->layer_name); | vertexColorLink = GPU_attribute(mat, CD_MCOL, vertexColor->layer_name); | ||||
| } | } | ||||
| return GPU_stack_link(mat, node, "node_vertex_color", in, out, vertexColorLink); | return GPU_stack_link(mat, node, "node_vertex_color", in, out, vertexColorLink); | ||||
| } | } | ||||
| static void node_geo_exec(GeoNodeExecParams params) | |||||
| { | |||||
| const NodeShaderVertexColor *attr = static_cast<const NodeShaderVertexColor *>( | |||||
| params.node().storage); | |||||
| if (params.output_is_required("Color")) { | |||||
| Field<ColorGeometry4f> field{AttributeFieldInput::Create<ColorGeometry4f>( | |||||
| (attr->layer_name[0]) ? attr->layer_name : ".color_active")}; | |||||
| params.set_output("Color", std::move(field)); | |||||
| } | |||||
| if (params.output_is_required("Alpha")) { | |||||
| /* TODO: how to extract alpha channel? */ | |||||
| } | |||||
| } | |||||
| } // namespace blender::nodes::node_shader_vertex_color_cc | } // namespace blender::nodes::node_shader_vertex_color_cc | ||||
| void register_node_type_sh_vertex_color() | void register_node_type_sh_vertex_color() | ||||
| { | { | ||||
| namespace file_ns = blender::nodes::node_shader_vertex_color_cc; | namespace file_ns = blender::nodes::node_shader_vertex_color_cc; | ||||
| static bNodeType ntype; | static bNodeType ntype; | ||||
| sh_node_type_base(&ntype, SH_NODE_VERTEX_COLOR, "Color Attribute", NODE_CLASS_INPUT); | sh_fn_node_type_base(&ntype, SH_NODE_VERTEX_COLOR, "Color Attribute", NODE_CLASS_INPUT); | ||||
| ntype.declare = file_ns::node_declare; | ntype.declare = file_ns::node_declare; | ||||
| ntype.draw_buttons = file_ns::node_shader_buts_vertex_color; | ntype.draw_buttons = file_ns::node_shader_buts_vertex_color; | ||||
| node_type_init(&ntype, file_ns::node_shader_init_vertex_color); | node_type_init(&ntype, file_ns::node_shader_init_vertex_color); | ||||
| node_type_storage( | node_type_storage( | ||||
| &ntype, "NodeShaderVertexColor", node_free_standard_storage, node_copy_standard_storage); | &ntype, "NodeShaderVertexColor", node_free_standard_storage, node_copy_standard_storage); | ||||
| node_type_gpu(&ntype, file_ns::node_shader_gpu_vertex_color); | node_type_gpu(&ntype, file_ns::node_shader_gpu_vertex_color); | ||||
| ntype.geometry_node_execute = file_ns::node_geo_exec; | |||||
| nodeRegisterType(&ntype); | nodeRegisterType(&ntype); | ||||
| } | } | ||||