ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / kernel / shaders / node_vector_math.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_vector_math(string type = "add",
20                         vector Vector1 = vector(0.0, 0.0, 0.0),
21                         vector Vector2 = vector(0.0, 0.0, 0.0),
22                         output float Value = 0.0,
23                         output vector Vector = vector(0.0, 0.0, 0.0))
24 {
25   if (type == "add") {
26     Vector = Vector1 + Vector2;
27     Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2])) / 3.0;
28   }
29   else if (type == "subtract") {
30     Vector = Vector1 - Vector2;
31     Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2])) / 3.0;
32   }
33   else if (type == "average") {
34     Value = length(Vector1 + Vector2);
35     Vector = normalize(Vector1 + Vector2);
36   }
37   else if (type == "dot_product") {
38     Value = dot(Vector1, Vector2);
39   }
40   else if (type == "cross_product") {
41     vector c = cross(Vector1, Vector2);
42     Value = length(c);
43     Vector = normalize(c);
44   }
45   else if (type == "normalize") {
46     Value = length(Vector1);
47     Vector = normalize(Vector1);
48   }
49 }