ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / kernel / shaders / node_geometry.osl
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "stdosl.h"
18
19 shader node_geometry(normal NormalIn = N,
20                      string bump_offset = "center",
21
22                      output point Position = point(0.0, 0.0, 0.0),
23                      output normal Normal = normal(0.0, 0.0, 0.0),
24                      output normal Tangent = normal(0.0, 0.0, 0.0),
25                      output normal TrueNormal = normal(0.0, 0.0, 0.0),
26                      output vector Incoming = vector(0.0, 0.0, 0.0),
27                      output point Parametric = point(0.0, 0.0, 0.0),
28                      output float Backfacing = 0.0,
29                      output float Pointiness = 0.0)
30 {
31   Position = P;
32   Normal = NormalIn;
33   TrueNormal = Ng;
34   Incoming = I;
35   Parametric = point(u, v, 0.0);
36   Backfacing = backfacing();
37
38   if (bump_offset == "dx") {
39     Position += Dx(Position);
40     Parametric += Dx(Parametric);
41   }
42   else if (bump_offset == "dy") {
43     Position += Dy(Position);
44     Parametric += Dy(Parametric);
45   }
46
47   /* first try to get tangent attribute */
48   point generated;
49
50   /* try to create spherical tangent from generated coordinates */
51   if (getattribute("geom:generated", generated)) {
52     normal data = normal(-(generated[1] - 0.5), (generated[0] - 0.5), 0.0);
53     vector T = transform("object", "world", data);
54     Tangent = cross(Normal, normalize(cross(T, Normal)));
55   }
56   else {
57     /* otherwise use surface derivatives */
58     Tangent = normalize(dPdu);
59   }
60
61   getattribute("geom:pointiness", Pointiness);
62   if (bump_offset == "dx") {
63     Pointiness += Dx(Pointiness);
64   }
65   else if (bump_offset == "dy") {
66     Pointiness += Dy(Pointiness);
67   }
68 }