rev |
line source |
nuclear@0
|
1 /*
|
nuclear@0
|
2 ---------------------------------------------------------------------------
|
nuclear@0
|
3 Open Asset Import Library (assimp)
|
nuclear@0
|
4 ---------------------------------------------------------------------------
|
nuclear@0
|
5
|
nuclear@0
|
6 Copyright (c) 2006-2012, assimp team
|
nuclear@0
|
7
|
nuclear@0
|
8 All rights reserved.
|
nuclear@0
|
9
|
nuclear@0
|
10 Redistribution and use of this software in source and binary forms,
|
nuclear@0
|
11 with or without modification, are permitted provided that the following
|
nuclear@0
|
12 conditions are met:
|
nuclear@0
|
13
|
nuclear@0
|
14 * Redistributions of source code must retain the above
|
nuclear@0
|
15 copyright notice, this list of conditions and the
|
nuclear@0
|
16 following disclaimer.
|
nuclear@0
|
17
|
nuclear@0
|
18 * Redistributions in binary form must reproduce the above
|
nuclear@0
|
19 copyright notice, this list of conditions and the
|
nuclear@0
|
20 following disclaimer in the documentation and/or other
|
nuclear@0
|
21 materials provided with the distribution.
|
nuclear@0
|
22
|
nuclear@0
|
23 * Neither the name of the assimp team, nor the names of its
|
nuclear@0
|
24 contributors may be used to endorse or promote products
|
nuclear@0
|
25 derived from this software without specific prior
|
nuclear@0
|
26 written permission of the assimp team.
|
nuclear@0
|
27
|
nuclear@0
|
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
nuclear@0
|
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
nuclear@0
|
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
nuclear@0
|
31 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
nuclear@0
|
32 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
nuclear@0
|
33 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
nuclear@0
|
34 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
nuclear@0
|
35 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
nuclear@0
|
36 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
nuclear@0
|
37 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
nuclear@0
|
38 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
nuclear@0
|
39 ---------------------------------------------------------------------------
|
nuclear@0
|
40 */
|
nuclear@0
|
41
|
nuclear@0
|
42 /** @file aiMaterial.inl
|
nuclear@0
|
43 * @brief Defines the C++ getters for the material system
|
nuclear@0
|
44 */
|
nuclear@0
|
45
|
nuclear@0
|
46 #ifndef AI_MATERIAL_INL_INC
|
nuclear@0
|
47 #define AI_MATERIAL_INL_INC
|
nuclear@0
|
48
|
nuclear@0
|
49 //! @cond never
|
nuclear@0
|
50
|
nuclear@0
|
51 // ---------------------------------------------------------------------------
|
nuclear@0
|
52 inline aiReturn aiMaterial::GetTexture( aiTextureType type,
|
nuclear@0
|
53 unsigned int index,
|
nuclear@0
|
54 C_STRUCT aiString* path,
|
nuclear@0
|
55 aiTextureMapping* mapping /*= NULL*/,
|
nuclear@0
|
56 unsigned int* uvindex /*= NULL*/,
|
nuclear@0
|
57 float* blend /*= NULL*/,
|
nuclear@0
|
58 aiTextureOp* op /*= NULL*/,
|
nuclear@0
|
59 aiTextureMapMode* mapmode /*= NULL*/) const
|
nuclear@0
|
60 {
|
nuclear@0
|
61 return ::aiGetMaterialTexture(this,type,index,path,mapping,uvindex,blend,op,mapmode);
|
nuclear@0
|
62 }
|
nuclear@0
|
63
|
nuclear@0
|
64 // ---------------------------------------------------------------------------
|
nuclear@0
|
65 inline unsigned int aiMaterial::GetTextureCount(aiTextureType type) const
|
nuclear@0
|
66 {
|
nuclear@0
|
67 return ::aiGetMaterialTextureCount(this,type);
|
nuclear@0
|
68 }
|
nuclear@0
|
69
|
nuclear@0
|
70 // ---------------------------------------------------------------------------
|
nuclear@0
|
71 template <typename Type>
|
nuclear@0
|
72 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
nuclear@0
|
73 unsigned int idx, Type* pOut,
|
nuclear@0
|
74 unsigned int* pMax) const
|
nuclear@0
|
75 {
|
nuclear@0
|
76 unsigned int iNum = pMax ? *pMax : 1;
|
nuclear@0
|
77
|
nuclear@0
|
78 const aiMaterialProperty* prop;
|
nuclear@0
|
79 const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
nuclear@0
|
80 (const aiMaterialProperty**)&prop);
|
nuclear@0
|
81 if ( AI_SUCCESS == ret ) {
|
nuclear@0
|
82
|
nuclear@0
|
83 if (prop->mDataLength < sizeof(Type)*iNum) {
|
nuclear@0
|
84 return AI_FAILURE;
|
nuclear@0
|
85 }
|
nuclear@0
|
86
|
nuclear@0
|
87 if (prop->mType != aiPTI_Buffer) {
|
nuclear@0
|
88 return AI_FAILURE;
|
nuclear@0
|
89 }
|
nuclear@0
|
90
|
nuclear@0
|
91 iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type));
|
nuclear@0
|
92 memcpy(pOut,prop->mData,iNum * sizeof(Type));
|
nuclear@0
|
93 if (pMax) {
|
nuclear@0
|
94 *pMax = iNum;
|
nuclear@0
|
95 }
|
nuclear@0
|
96 }
|
nuclear@0
|
97 return ret;
|
nuclear@0
|
98 }
|
nuclear@0
|
99
|
nuclear@0
|
100 // ---------------------------------------------------------------------------
|
nuclear@0
|
101 template <typename Type>
|
nuclear@0
|
102 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
nuclear@0
|
103 unsigned int idx,Type& pOut) const
|
nuclear@0
|
104 {
|
nuclear@0
|
105 const aiMaterialProperty* prop;
|
nuclear@0
|
106 const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
nuclear@0
|
107 (const aiMaterialProperty**)&prop);
|
nuclear@0
|
108 if ( AI_SUCCESS == ret ) {
|
nuclear@0
|
109
|
nuclear@0
|
110 if (prop->mDataLength < sizeof(Type)) {
|
nuclear@0
|
111 return AI_FAILURE;
|
nuclear@0
|
112 }
|
nuclear@0
|
113
|
nuclear@0
|
114 if (prop->mType != aiPTI_Buffer) {
|
nuclear@0
|
115 return AI_FAILURE;
|
nuclear@0
|
116 }
|
nuclear@0
|
117
|
nuclear@0
|
118 memcpy(&pOut,prop->mData,sizeof(Type));
|
nuclear@0
|
119 }
|
nuclear@0
|
120 return ret;
|
nuclear@0
|
121 }
|
nuclear@0
|
122
|
nuclear@0
|
123 // ---------------------------------------------------------------------------
|
nuclear@0
|
124 template <>
|
nuclear@0
|
125 inline aiReturn aiMaterial::Get<float>(const char* pKey,unsigned int type,
|
nuclear@0
|
126 unsigned int idx,float* pOut,
|
nuclear@0
|
127 unsigned int* pMax) const
|
nuclear@0
|
128 {
|
nuclear@0
|
129 return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax);
|
nuclear@0
|
130 }
|
nuclear@0
|
131 // ---------------------------------------------------------------------------
|
nuclear@0
|
132 template <>
|
nuclear@0
|
133 inline aiReturn aiMaterial::Get<int>(const char* pKey,unsigned int type,
|
nuclear@0
|
134 unsigned int idx,int* pOut,
|
nuclear@0
|
135 unsigned int* pMax) const
|
nuclear@0
|
136 {
|
nuclear@0
|
137 return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax);
|
nuclear@0
|
138 }
|
nuclear@0
|
139 // ---------------------------------------------------------------------------
|
nuclear@0
|
140 template <>
|
nuclear@0
|
141 inline aiReturn aiMaterial::Get<float>(const char* pKey,unsigned int type,
|
nuclear@0
|
142 unsigned int idx,float& pOut) const
|
nuclear@0
|
143 {
|
nuclear@0
|
144 return aiGetMaterialFloat(this,pKey,type,idx,&pOut);
|
nuclear@0
|
145 }
|
nuclear@0
|
146 // ---------------------------------------------------------------------------
|
nuclear@0
|
147 template <>
|
nuclear@0
|
148 inline aiReturn aiMaterial::Get<int>(const char* pKey,unsigned int type,
|
nuclear@0
|
149 unsigned int idx,int& pOut) const
|
nuclear@0
|
150 {
|
nuclear@0
|
151 return aiGetMaterialInteger(this,pKey,type,idx,&pOut);
|
nuclear@0
|
152 }
|
nuclear@0
|
153 // ---------------------------------------------------------------------------
|
nuclear@0
|
154 template <>
|
nuclear@0
|
155 inline aiReturn aiMaterial::Get<aiColor4D>(const char* pKey,unsigned int type,
|
nuclear@0
|
156 unsigned int idx,aiColor4D& pOut) const
|
nuclear@0
|
157 {
|
nuclear@0
|
158 return aiGetMaterialColor(this,pKey,type,idx,&pOut);
|
nuclear@0
|
159 }
|
nuclear@0
|
160 // ---------------------------------------------------------------------------
|
nuclear@0
|
161 template <>
|
nuclear@0
|
162 inline aiReturn aiMaterial::Get<aiColor3D>(const char* pKey,unsigned int type,
|
nuclear@0
|
163 unsigned int idx,aiColor3D& pOut) const
|
nuclear@0
|
164 {
|
nuclear@0
|
165 aiColor4D c;
|
nuclear@0
|
166 const aiReturn ret = aiGetMaterialColor(this,pKey,type,idx,&c);
|
nuclear@0
|
167 pOut = aiColor3D(c.r,c.g,c.b);
|
nuclear@0
|
168 return ret;
|
nuclear@0
|
169 }
|
nuclear@0
|
170 // ---------------------------------------------------------------------------
|
nuclear@0
|
171 template <>
|
nuclear@0
|
172 inline aiReturn aiMaterial::Get<aiString>(const char* pKey,unsigned int type,
|
nuclear@0
|
173 unsigned int idx,aiString& pOut) const
|
nuclear@0
|
174 {
|
nuclear@0
|
175 return aiGetMaterialString(this,pKey,type,idx,&pOut);
|
nuclear@0
|
176 }
|
nuclear@0
|
177
|
nuclear@0
|
178
|
nuclear@0
|
179 // ---------------------------------------------------------------------------
|
nuclear@0
|
180 template<class TYPE>
|
nuclear@0
|
181 aiReturn aiMaterial::AddProperty (const TYPE* pInput,
|
nuclear@0
|
182 const unsigned int pNumValues,
|
nuclear@0
|
183 const char* pKey,
|
nuclear@0
|
184 unsigned int type,
|
nuclear@0
|
185 unsigned int index)
|
nuclear@0
|
186 {
|
nuclear@0
|
187 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
188 pNumValues * sizeof(TYPE),
|
nuclear@0
|
189 pKey,type,index,aiPTI_Buffer);
|
nuclear@0
|
190 }
|
nuclear@0
|
191
|
nuclear@0
|
192 // ---------------------------------------------------------------------------
|
nuclear@0
|
193 template<>
|
nuclear@0
|
194 inline aiReturn aiMaterial::AddProperty<float> (const float* pInput,
|
nuclear@0
|
195 const unsigned int pNumValues,
|
nuclear@0
|
196 const char* pKey,
|
nuclear@0
|
197 unsigned int type,
|
nuclear@0
|
198 unsigned int index)
|
nuclear@0
|
199 {
|
nuclear@0
|
200 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
201 pNumValues * sizeof(float),
|
nuclear@0
|
202 pKey,type,index,aiPTI_Float);
|
nuclear@0
|
203 }
|
nuclear@0
|
204
|
nuclear@0
|
205 // ---------------------------------------------------------------------------
|
nuclear@0
|
206 template<>
|
nuclear@0
|
207 inline aiReturn aiMaterial::AddProperty<aiUVTransform> (const aiUVTransform* pInput,
|
nuclear@0
|
208 const unsigned int pNumValues,
|
nuclear@0
|
209 const char* pKey,
|
nuclear@0
|
210 unsigned int type,
|
nuclear@0
|
211 unsigned int index)
|
nuclear@0
|
212 {
|
nuclear@0
|
213 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
214 pNumValues * sizeof(aiUVTransform),
|
nuclear@0
|
215 pKey,type,index,aiPTI_Float);
|
nuclear@0
|
216 }
|
nuclear@0
|
217
|
nuclear@0
|
218 // ---------------------------------------------------------------------------
|
nuclear@0
|
219 template<>
|
nuclear@0
|
220 inline aiReturn aiMaterial::AddProperty<aiColor4D> (const aiColor4D* pInput,
|
nuclear@0
|
221 const unsigned int pNumValues,
|
nuclear@0
|
222 const char* pKey,
|
nuclear@0
|
223 unsigned int type,
|
nuclear@0
|
224 unsigned int index)
|
nuclear@0
|
225 {
|
nuclear@0
|
226 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
227 pNumValues * sizeof(aiColor4D),
|
nuclear@0
|
228 pKey,type,index,aiPTI_Float);
|
nuclear@0
|
229 }
|
nuclear@0
|
230
|
nuclear@0
|
231 // ---------------------------------------------------------------------------
|
nuclear@0
|
232 template<>
|
nuclear@0
|
233 inline aiReturn aiMaterial::AddProperty<aiColor3D> (const aiColor3D* pInput,
|
nuclear@0
|
234 const unsigned int pNumValues,
|
nuclear@0
|
235 const char* pKey,
|
nuclear@0
|
236 unsigned int type,
|
nuclear@0
|
237 unsigned int index)
|
nuclear@0
|
238 {
|
nuclear@0
|
239 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
240 pNumValues * sizeof(aiColor3D),
|
nuclear@0
|
241 pKey,type,index,aiPTI_Float);
|
nuclear@0
|
242 }
|
nuclear@0
|
243
|
nuclear@0
|
244 // ---------------------------------------------------------------------------
|
nuclear@0
|
245 template<>
|
nuclear@0
|
246 inline aiReturn aiMaterial::AddProperty<aiVector3D> (const aiVector3D* pInput,
|
nuclear@0
|
247 const unsigned int pNumValues,
|
nuclear@0
|
248 const char* pKey,
|
nuclear@0
|
249 unsigned int type,
|
nuclear@0
|
250 unsigned int index)
|
nuclear@0
|
251 {
|
nuclear@0
|
252 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
253 pNumValues * sizeof(aiVector3D),
|
nuclear@0
|
254 pKey,type,index,aiPTI_Float);
|
nuclear@0
|
255 }
|
nuclear@0
|
256
|
nuclear@0
|
257 // ---------------------------------------------------------------------------
|
nuclear@0
|
258 template<>
|
nuclear@0
|
259 inline aiReturn aiMaterial::AddProperty<int> (const int* pInput,
|
nuclear@0
|
260 const unsigned int pNumValues,
|
nuclear@0
|
261 const char* pKey,
|
nuclear@0
|
262 unsigned int type,
|
nuclear@0
|
263 unsigned int index)
|
nuclear@0
|
264 {
|
nuclear@0
|
265 return AddBinaryProperty((const void*)pInput,
|
nuclear@0
|
266 pNumValues * sizeof(int),
|
nuclear@0
|
267 pKey,type,index,aiPTI_Integer);
|
nuclear@0
|
268 }
|
nuclear@0
|
269
|
nuclear@0
|
270 //! @endcond
|
nuclear@0
|
271
|
nuclear@0
|
272 #endif //! AI_MATERIAL_INL_INC
|