Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/shader/nodes/node_shader_tex_sky.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 "sky_model.h" | #include "sky_model.h" | ||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "UI_interface.h" | #include "UI_interface.h" | ||||
| #include "UI_resources.h" | #include "UI_resources.h" | ||||
| #include "NOD_socket_search_link.hh" | |||||
| namespace blender::nodes::node_shader_tex_sky_cc { | namespace blender::nodes::node_shader_tex_sky_cc { | ||||
| static void node_declare(NodeDeclarationBuilder &b) | static void node_declare(NodeDeclarationBuilder &b) | ||||
| { | { | ||||
| b.add_input<decl::Vector>(N_("Vector")).hide_value(); | b.add_input<decl::Vector>(N_("Vector")).hide_value(); | ||||
| b.add_output<decl::Color>(N_("Color")).no_muted_links(); | b.add_output<decl::Color>(N_("Color")).no_muted_links(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 203 Lines • ▼ Show 20 Lines | |||||
| static void node_shader_update_sky(bNodeTree *ntree, bNode *node) | static void node_shader_update_sky(bNodeTree *ntree, bNode *node) | ||||
| { | { | ||||
| bNodeSocket *sockVector = nodeFindSocket(node, SOCK_IN, "Vector"); | bNodeSocket *sockVector = nodeFindSocket(node, SOCK_IN, "Vector"); | ||||
| NodeTexSky *tex = (NodeTexSky *)node->storage; | NodeTexSky *tex = (NodeTexSky *)node->storage; | ||||
| nodeSetSocketAvailability(ntree, sockVector, !(tex->sky_model == 2 && tex->sun_disc == 1)); | nodeSetSocketAvailability(ntree, sockVector, !(tex->sky_model == 2 && tex->sun_disc == 1)); | ||||
| } | } | ||||
| static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms) | |||||
| { | |||||
| const NodeDeclaration &declaration = *params.node_type().fixed_declaration; | |||||
| if (params.in_out() == SOCK_OUT) { | |||||
| search_link_ops_for_declarations(params, declaration.outputs()); | |||||
| return; | |||||
| } | |||||
| else if (params.node_tree().typeinfo->validate_link( | |||||
| static_cast<eNodeSocketDatatype>(params.other_socket().type), SOCK_FLOAT)) { | |||||
| params.add_item(IFACE_("Vector"), [](LinkSearchOpParams ¶ms) { | |||||
| bNode &node = params.add_node("ShaderNodeTexSky"); | |||||
| NodeTexSky *tex = (NodeTexSky *)node.storage; | |||||
| tex->sun_disc = false; | |||||
| params.update_and_connect_available_socket(node, "Vector"); | |||||
| }); | |||||
| } | |||||
| } | |||||
| } // namespace blender::nodes::node_shader_tex_sky_cc | } // namespace blender::nodes::node_shader_tex_sky_cc | ||||
| /* node type definition */ | /* node type definition */ | ||||
| void register_node_type_sh_tex_sky() | void register_node_type_sh_tex_sky() | ||||
| { | { | ||||
| namespace file_ns = blender::nodes::node_shader_tex_sky_cc; | namespace file_ns = blender::nodes::node_shader_tex_sky_cc; | ||||
| static bNodeType ntype; | static bNodeType ntype; | ||||
| sh_node_type_base(&ntype, SH_NODE_TEX_SKY, "Sky Texture", NODE_CLASS_TEXTURE); | sh_node_type_base(&ntype, SH_NODE_TEX_SKY, "Sky Texture", NODE_CLASS_TEXTURE); | ||||
| ntype.declare = file_ns::node_declare; | ntype.declare = file_ns::node_declare; | ||||
| ntype.draw_buttons = file_ns::node_shader_buts_tex_sky; | ntype.draw_buttons = file_ns::node_shader_buts_tex_sky; | ||||
| node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); | node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); | ||||
| node_type_init(&ntype, file_ns::node_shader_init_tex_sky); | node_type_init(&ntype, file_ns::node_shader_init_tex_sky); | ||||
| node_type_storage(&ntype, "NodeTexSky", node_free_standard_storage, node_copy_standard_storage); | node_type_storage(&ntype, "NodeTexSky", node_free_standard_storage, node_copy_standard_storage); | ||||
| node_type_gpu(&ntype, file_ns::node_shader_gpu_tex_sky); | node_type_gpu(&ntype, file_ns::node_shader_gpu_tex_sky); | ||||
| /* Remove vector input for Nishita sky model. */ | /* Remove vector input for Nishita sky model. */ | ||||
| node_type_update(&ntype, file_ns::node_shader_update_sky); | node_type_update(&ntype, file_ns::node_shader_update_sky); | ||||
| ntype.gather_link_search_ops = file_ns::node_gather_link_searches; | |||||
| nodeRegisterType(&ntype); | nodeRegisterType(&ntype); | ||||
| } | } | ||||