Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/shader/nodes/node_shader_vectTransform.c
- This file was moved from source/blender/nodes/shader/nodes/node_shader_vector_transform.cc.
| Show All 15 Lines | |||||
| * The Original Code is Copyright (C) 2013 Blender Foundation. | * The Original Code is Copyright (C) 2013 Blender Foundation. | ||||
| * All rights reserved. | * All rights reserved. | ||||
| */ | */ | ||||
| /** \file | /** \file | ||||
| * \ingroup shdnodes | * \ingroup shdnodes | ||||
| */ | */ | ||||
| #include "node_shader_util.hh" | #include "../node_shader_util.h" | ||||
| /* **************** Vector Transform ******************** */ | /* **************** Vector Transform ******************** */ | ||||
| namespace blender::nodes::node_shader_vector_transform_cc { | |||||
| static bNodeSocketTemplate sh_node_vect_transform_in[] = { | static bNodeSocketTemplate sh_node_vect_transform_in[] = { | ||||
| {SOCK_VECTOR, N_("Vector"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE}, {-1, ""}}; | {SOCK_VECTOR, N_("Vector"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE}, {-1, ""}}; | ||||
| static bNodeSocketTemplate sh_node_vect_transform_out[] = { | static bNodeSocketTemplate sh_node_vect_transform_out[] = { | ||||
| {SOCK_VECTOR, N_("Vector")}, | {SOCK_VECTOR, N_("Vector")}, | ||||
| {-1, ""}, | {-1, ""}, | ||||
| }; | }; | ||||
| static void node_shader_init_vect_transform(bNodeTree *UNUSED(ntree), bNode *node) | static void node_shader_init_vect_transform(bNodeTree *UNUSED(ntree), bNode *node) | ||||
| { | { | ||||
| NodeShaderVectTransform *vect = (NodeShaderVectTransform *)MEM_callocN( | NodeShaderVectTransform *vect = MEM_callocN(sizeof(NodeShaderVectTransform), | ||||
| sizeof(NodeShaderVectTransform), "NodeShaderVectTransform"); | "NodeShaderVectTransform"); | ||||
| /* Convert World into Object Space per default */ | /* Convert World into Object Space per default */ | ||||
| vect->convert_to = 1; | vect->convert_to = 1; | ||||
| node->storage = vect; | node->storage = vect; | ||||
| } | } | ||||
| static void node_shader_exec_vect_transform(void *UNUSED(data), | static void node_shader_exec_vect_transform(void *UNUSED(data), | ||||
| int UNUSED(thread), | int UNUSED(thread), | ||||
| bNode *UNUSED(node), | bNode *UNUSED(node), | ||||
| bNodeExecData *UNUSED(execdata), | bNodeExecData *UNUSED(execdata), | ||||
| bNodeStack **UNUSED(in), | bNodeStack **UNUSED(in), | ||||
| bNodeStack **UNUSED(out)) | bNodeStack **UNUSED(out)) | ||||
| { | { | ||||
| } | } | ||||
| static GPUNodeLink *get_gpulink_matrix_from_to(short from, short to) | static GPUNodeLink *get_gpulink_matrix_from_to(short from, short to) | ||||
| { | { | ||||
| switch (from) { | switch (from) { | ||||
| case SHD_VECT_TRANSFORM_SPACE_OBJECT: | case SHD_VECT_TRANSFORM_SPACE_OBJECT: | ||||
| switch (to) { | switch (to) { | ||||
| case SHD_VECT_TRANSFORM_SPACE_OBJECT: | case SHD_VECT_TRANSFORM_SPACE_OBJECT: | ||||
| return nullptr; | return NULL; | ||||
| case SHD_VECT_TRANSFORM_SPACE_WORLD: | case SHD_VECT_TRANSFORM_SPACE_WORLD: | ||||
| return GPU_builtin(GPU_OBJECT_MATRIX); | return GPU_builtin(GPU_OBJECT_MATRIX); | ||||
| case SHD_VECT_TRANSFORM_SPACE_CAMERA: | case SHD_VECT_TRANSFORM_SPACE_CAMERA: | ||||
| return GPU_builtin(GPU_LOC_TO_VIEW_MATRIX); | return GPU_builtin(GPU_LOC_TO_VIEW_MATRIX); | ||||
| } | } | ||||
| break; | break; | ||||
| case SHD_VECT_TRANSFORM_SPACE_WORLD: | case SHD_VECT_TRANSFORM_SPACE_WORLD: | ||||
| switch (to) { | switch (to) { | ||||
| case SHD_VECT_TRANSFORM_SPACE_WORLD: | case SHD_VECT_TRANSFORM_SPACE_WORLD: | ||||
| return nullptr; | return NULL; | ||||
| case SHD_VECT_TRANSFORM_SPACE_CAMERA: | case SHD_VECT_TRANSFORM_SPACE_CAMERA: | ||||
| return GPU_builtin(GPU_VIEW_MATRIX); | return GPU_builtin(GPU_VIEW_MATRIX); | ||||
| case SHD_VECT_TRANSFORM_SPACE_OBJECT: | case SHD_VECT_TRANSFORM_SPACE_OBJECT: | ||||
| return GPU_builtin(GPU_INVERSE_OBJECT_MATRIX); | return GPU_builtin(GPU_INVERSE_OBJECT_MATRIX); | ||||
| } | } | ||||
| break; | break; | ||||
| case SHD_VECT_TRANSFORM_SPACE_CAMERA: | case SHD_VECT_TRANSFORM_SPACE_CAMERA: | ||||
| switch (to) { | switch (to) { | ||||
| case SHD_VECT_TRANSFORM_SPACE_CAMERA: | case SHD_VECT_TRANSFORM_SPACE_CAMERA: | ||||
| return nullptr; | return NULL; | ||||
| case SHD_VECT_TRANSFORM_SPACE_WORLD: | case SHD_VECT_TRANSFORM_SPACE_WORLD: | ||||
| return GPU_builtin(GPU_INVERSE_VIEW_MATRIX); | return GPU_builtin(GPU_INVERSE_VIEW_MATRIX); | ||||
| case SHD_VECT_TRANSFORM_SPACE_OBJECT: | case SHD_VECT_TRANSFORM_SPACE_OBJECT: | ||||
| return GPU_builtin(GPU_INVERSE_LOC_TO_VIEW_MATRIX); | return GPU_builtin(GPU_INVERSE_LOC_TO_VIEW_MATRIX); | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| return nullptr; | return NULL; | ||||
| } | } | ||||
| static int gpu_shader_vect_transform(GPUMaterial *mat, | static int gpu_shader_vect_transform(GPUMaterial *mat, | ||||
| bNode *node, | bNode *node, | ||||
| bNodeExecData *UNUSED(execdata), | bNodeExecData *UNUSED(execdata), | ||||
| GPUNodeStack *in, | GPUNodeStack *in, | ||||
| GPUNodeStack *out) | GPUNodeStack *out) | ||||
| { | { | ||||
| struct GPUNodeLink *inputlink; | struct GPUNodeLink *inputlink; | ||||
| struct GPUNodeLink *fromto; | struct GPUNodeLink *fromto; | ||||
| const char *vtransform = "direction_transform_m4v3"; | const char *vtransform = "direction_transform_m4v3"; | ||||
| const char *ptransform = "point_transform_m4v3"; | const char *ptransform = "point_transform_m4v3"; | ||||
| const char *func_name = nullptr; | const char *func_name = 0; | ||||
| NodeShaderVectTransform *nodeprop = (NodeShaderVectTransform *)node->storage; | NodeShaderVectTransform *nodeprop = (NodeShaderVectTransform *)node->storage; | ||||
| if (in[0].hasinput) { | if (in[0].hasinput) { | ||||
| inputlink = in[0].link; | inputlink = in[0].link; | ||||
| } | } | ||||
| else { | else { | ||||
| inputlink = GPU_constant(in[0].vec); | inputlink = GPU_constant(in[0].vec); | ||||
| Show All 21 Lines | static int gpu_shader_vect_transform(GPUMaterial *mat, | ||||
| if (nodeprop->type == SHD_VECT_TRANSFORM_TYPE_NORMAL) { | if (nodeprop->type == SHD_VECT_TRANSFORM_TYPE_NORMAL) { | ||||
| GPU_link(mat, "vector_normalize", out[0].link, &out[0].link); | GPU_link(mat, "vector_normalize", out[0].link, &out[0].link); | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| } // namespace blender::nodes::node_shader_vector_transform_cc | void register_node_type_sh_vect_transform(void) | ||||
| void register_node_type_sh_vect_transform() | |||||
| { | { | ||||
| namespace file_ns = blender::nodes::node_shader_vector_transform_cc; | |||||
| static bNodeType ntype; | static bNodeType ntype; | ||||
| sh_node_type_base(&ntype, SH_NODE_VECT_TRANSFORM, "Vector Transform", NODE_CLASS_OP_VECTOR, 0); | sh_node_type_base(&ntype, SH_NODE_VECT_TRANSFORM, "Vector Transform", NODE_CLASS_OP_VECTOR, 0); | ||||
| node_type_init(&ntype, file_ns::node_shader_init_vect_transform); | node_type_init(&ntype, node_shader_init_vect_transform); | ||||
| node_type_socket_templates( | node_type_socket_templates(&ntype, sh_node_vect_transform_in, sh_node_vect_transform_out); | ||||
| &ntype, file_ns::sh_node_vect_transform_in, file_ns::sh_node_vect_transform_out); | |||||
| node_type_storage( | node_type_storage( | ||||
| &ntype, "NodeShaderVectTransform", node_free_standard_storage, node_copy_standard_storage); | &ntype, "NodeShaderVectTransform", node_free_standard_storage, node_copy_standard_storage); | ||||
| node_type_exec(&ntype, nullptr, nullptr, file_ns::node_shader_exec_vect_transform); | node_type_exec(&ntype, NULL, NULL, node_shader_exec_vect_transform); | ||||
| node_type_gpu(&ntype, file_ns::gpu_shader_vect_transform); | node_type_gpu(&ntype, gpu_shader_vect_transform); | ||||
| nodeRegisterType(&ntype); | nodeRegisterType(&ntype); | ||||
| } | } | ||||