1//////////////////////////////////////////////////////////////////////////////////
2// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
3//////////////////////////////////////////////////////////////////////////////////
4// Created : 2007-09-28
5// Updated : 2008-10-07
6// Licence : This source is under MIT License
7// File    : glm/gtx/normalize_dot.inl
8//////////////////////////////////////////////////////////////////////////////////
9
10namespace glm
11{
12	template <typename genType>
13	GLM_FUNC_QUALIFIER genType normalizeDot
14	(
15		genType const & x,
16		genType const & y
17	)
18	{
19		return
20			glm::dot(x, y) *
21			glm::inversesqrt(glm::dot(x, x) *
22			glm::dot(y, y));
23	}
24
25	template <typename T, precision P>
26	GLM_FUNC_QUALIFIER T normalizeDot
27	(
28		detail::tvec2<T, P> const & x,
29		detail::tvec2<T, P> const & y
30	)
31	{
32		return
33			glm::dot(x, y) *
34			glm::inversesqrt(glm::dot(x, x) *
35			glm::dot(y, y));
36	}
37
38	template <typename T, precision P>
39	GLM_FUNC_QUALIFIER T normalizeDot
40	(
41		detail::tvec3<T, P> const & x,
42		detail::tvec3<T, P> const & y
43	)
44	{
45		return
46			glm::dot(x, y) *
47			glm::inversesqrt(glm::dot(x, x) *
48			glm::dot(y, y));
49	}
50
51	template <typename T, precision P>
52	GLM_FUNC_QUALIFIER T normalizeDot
53	(
54		detail::tvec4<T, P> const & x,
55		detail::tvec4<T, P> const & y
56	)
57	{
58		return
59			glm::dot(x, y) *
60			glm::inversesqrt(glm::dot(x, x) *
61			glm::dot(y, y));
62	}
63
64	template <typename genType>
65	GLM_FUNC_QUALIFIER genType fastNormalizeDot
66	(
67		genType const & x,
68		genType const & y
69	)
70	{
71		return
72			glm::dot(x, y) *
73			fastInverseSqrt(glm::dot(x, x) *
74			glm::dot(y, y));
75	}
76
77	template <typename T, precision P>
78	GLM_FUNC_QUALIFIER T fastNormalizeDot
79	(
80		detail::tvec2<T, P> const & x,
81		detail::tvec2<T, P> const & y
82	)
83	{
84		return
85			glm::dot(x, y) *
86			fastInverseSqrt(glm::dot(x, x) *
87			glm::dot(y, y));
88	}
89
90	template <typename T, precision P>
91	GLM_FUNC_QUALIFIER T fastNormalizeDot
92	(
93		detail::tvec3<T, P> const & x,
94		detail::tvec3<T, P> const & y
95	)
96	{
97		return
98			glm::dot(x, y) *
99			fastInverseSqrt(glm::dot(x, x) *
100			glm::dot(y, y));
101	}
102
103	template <typename T, precision P>
104	GLM_FUNC_QUALIFIER T fastNormalizeDot
105	(
106		detail::tvec4<T, P> const & x,
107		detail::tvec4<T, P> const & y
108	)
109	{
110		return
111			glm::dot(x, y) *
112			fastInverseSqrt(glm::dot(x, x) *
113			glm::dot(y, y));
114	}
115}//namespace glm
116