/* SPDX-License-Identifier: Apache-2.0 * Copyright 2011-2022 Blender Foundation */ #include "stdcycles.h" shader node_texture_coordinate( int is_background = 0, int is_volume = 0, int from_dupli = 0, int use_transform = 0, string bump_offset = "center", matrix object_itfm = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), output point Generated = point(0.0, 0.0, 0.0), output point UV = point(0.0, 0.0, 0.0), output point Object = point(0.0, 0.0, 0.0), output point Camera = point(0.0, 0.0, 0.0), output point Window = point(0.0, 0.0, 0.0), output normal Normal = normal(0.0, 0.0, 0.0), output point Reflection = point(0.0, 0.0, 0.0)) { if (is_background) { Generated = P; UV = point(0.0, 0.0, 0.0); Object = P; point Pcam = transform("camera", "world", point(0, 0, 0)); Camera = transform("camera", P + Pcam); getattribute("NDC", Window); Normal = N; Reflection = I; } else { if (from_dupli) { getattribute("geom:dupli_generated", Generated); getattribute("geom:dupli_uv", UV); } else if (is_volume) { Generated = transform("object", P); matrix tfm; if (getattribute("geom:generated_transform", tfm)) Generated = transform(tfm, Generated); getattribute("geom:uv", UV); } else { if (!getattribute("geom:generated", Generated)) { Generated = transform("object", P); } getattribute("geom:uv", UV); } if (use_transform) { Object = transform(object_itfm, P); } else { Object = transform("object", P); } Camera = transform("camera", P); Window = transform("NDC", P); Normal = transform("world", "object", N); Reflection = -reflect(I, N); } if (bump_offset == "dx") { if (!from_dupli) { Generated += Dx(Generated); UV += Dx(UV); } Object += Dx(Object); Camera += Dx(Camera); Window += Dx(Window); } else if (bump_offset == "dy") { if (!from_dupli) { Generated += Dy(Generated); UV += Dy(UV); } Object += Dy(Object); Camera += Dy(Camera); Window += Dy(Window); } Window[2] = 0.0; }