1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
14#ifndef OSGUTIL_CONVERTVEC
15#define OSGUTIL_CONVERTVEC 1
19template <typename InType, typename OutType,
20 unsigned int InSize = InType::num_components,
21 unsigned int OutSize = OutType::num_components>
24 static void convert(InType & in, OutType & out)
30template <typename InType, typename OutType>
31struct ConvertVec<InType, OutType, 2, 2>
33 static void convert(InType & in, OutType & out)
35 out.set(static_cast<typename OutType::value_type>(in.x()),
36 static_cast<typename OutType::value_type>(in.y()));
40template <typename InType, typename OutType>
41struct ConvertVec<InType, OutType, 2, 3>
43 static void convert(InType & in, OutType & out)
45 out.set(static_cast<typename OutType::value_type>(in.x()),
46 static_cast<typename OutType::value_type>(in.y()),
47 static_cast<typename OutType::value_type>(0.0));
51template <typename InType, typename OutType>
52struct ConvertVec<InType, OutType, 2, 4>
54 static void convert(InType & in, OutType & out)
56 out.set(static_cast<typename OutType::value_type>(in.x()),
57 static_cast<typename OutType::value_type>(in.y()),
58 static_cast<typename OutType::value_type>(0.0),
59 static_cast<typename OutType::value_type>(1.0));
67template <typename InType, typename OutType>
68struct ConvertVec<InType, OutType, 3, 2>
70 static void convert(InType & in, OutType & out)
72 out.set(static_cast<typename OutType::value_type>(in.x()),
73 static_cast<typename OutType::value_type>(in.y()));
77template <typename InType, typename OutType>
78struct ConvertVec<InType, OutType, 3, 3>
80 static void convert(InType & in, OutType & out)
82 out.set(static_cast<typename OutType::value_type>(in.x()),
83 static_cast<typename OutType::value_type>(in.y()),
84 static_cast<typename OutType::value_type>(in.z()));
88template <typename InType, typename OutType>
89struct ConvertVec<InType, OutType, 3, 4>
91 static void convert(InType & in, OutType & out)
93 out.set(static_cast<typename OutType::value_type>(in.x()),
94 static_cast<typename OutType::value_type>(in.y()),
95 static_cast<typename OutType::value_type>(in.z()),
96 static_cast<typename OutType::value_type>(1.0));
104template <typename InType, typename OutType>
105struct ConvertVec<InType, OutType, 4, 2>
107 static void convert(InType & in, OutType & out)
109 out.set(static_cast<typename OutType::value_type>(in.x()/in.w()),
110 static_cast<typename OutType::value_type>(in.y()/in.w()));
114template <typename InType, typename OutType>
115struct ConvertVec<InType, OutType, 4, 3>
117 static void convert(InType & in, OutType & out)
119 out.set(static_cast<typename OutType::value_type>(in.x()/in.w()),
120 static_cast<typename OutType::value_type>(in.y()/in.w()),
121 static_cast<typename OutType::value_type>(in.z()/in.w()));
125template <typename InType, typename OutType>
126struct ConvertVec<InType, OutType, 4, 4>
128 static void convert(InType & in, OutType & out)
130 out.set(static_cast<typename OutType::value_type>(in.x()),
131 static_cast<typename OutType::value_type>(in.y()),
132 static_cast<typename OutType::value_type>(in.z()),
133 static_cast<typename OutType::value_type>(in.w()));
137} // end of osg namespace
139#endif // ** OSG_CONVERTVEC ** //