miniassimp

annotate include/miniassimp/material.inl @ 0:879c81d94345

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 28 Jan 2019 18:19:26 +0200
parents
children
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-2018, assimp team
nuclear@0 7
nuclear@0 8
nuclear@0 9
nuclear@0 10 All rights reserved.
nuclear@0 11
nuclear@0 12 Redistribution and use of this software in source and binary forms,
nuclear@0 13 with or without modification, are permitted provided that the following
nuclear@0 14 conditions are met:
nuclear@0 15
nuclear@0 16 * Redistributions of source code must retain the above
nuclear@0 17 copyright notice, this list of conditions and the
nuclear@0 18 following disclaimer.
nuclear@0 19
nuclear@0 20 * Redistributions in binary form must reproduce the above
nuclear@0 21 copyright notice, this list of conditions and the
nuclear@0 22 following disclaimer in the documentation and/or other
nuclear@0 23 materials provided with the distribution.
nuclear@0 24
nuclear@0 25 * Neither the name of the assimp team, nor the names of its
nuclear@0 26 contributors may be used to endorse or promote products
nuclear@0 27 derived from this software without specific prior
nuclear@0 28 written permission of the assimp team.
nuclear@0 29
nuclear@0 30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
nuclear@0 31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
nuclear@0 32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
nuclear@0 33 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
nuclear@0 34 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
nuclear@0 35 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
nuclear@0 36 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
nuclear@0 37 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
nuclear@0 38 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
nuclear@0 39 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nuclear@0 40 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nuclear@0 41 ---------------------------------------------------------------------------
nuclear@0 42 */
nuclear@0 43
nuclear@0 44 /** @file material.inl
nuclear@0 45 * @brief Defines the C++ getters for the material system
nuclear@0 46 */
nuclear@0 47
nuclear@0 48 #pragma once
nuclear@0 49 #ifndef AI_MATERIAL_INL_INC
nuclear@0 50 #define AI_MATERIAL_INL_INC
nuclear@0 51
nuclear@0 52 // ---------------------------------------------------------------------------
nuclear@0 53 inline aiPropertyTypeInfo ai_real_to_property_type_info(float)
nuclear@0 54 {
nuclear@0 55 return aiPTI_Float;
nuclear@0 56 }
nuclear@0 57
nuclear@0 58 inline aiPropertyTypeInfo ai_real_to_property_type_info(double)
nuclear@0 59 {
nuclear@0 60 return aiPTI_Double;
nuclear@0 61 }
nuclear@0 62 // ---------------------------------------------------------------------------
nuclear@0 63
nuclear@0 64 //! @cond never
nuclear@0 65
nuclear@0 66 // ---------------------------------------------------------------------------
nuclear@0 67 inline aiReturn aiMaterial::GetTexture( aiTextureType type,
nuclear@0 68 unsigned int index,
nuclear@0 69 C_STRUCT aiString* path,
nuclear@0 70 aiTextureMapping* mapping /*= NULL*/,
nuclear@0 71 unsigned int* uvindex /*= NULL*/,
nuclear@0 72 ai_real* blend /*= NULL*/,
nuclear@0 73 aiTextureOp* op /*= NULL*/,
nuclear@0 74 aiTextureMapMode* mapmode /*= NULL*/) const
nuclear@0 75 {
nuclear@0 76 return ::aiGetMaterialTexture(this,type,index,path,mapping,uvindex,blend,op,mapmode);
nuclear@0 77 }
nuclear@0 78
nuclear@0 79 // ---------------------------------------------------------------------------
nuclear@0 80 inline unsigned int aiMaterial::GetTextureCount(aiTextureType type) const
nuclear@0 81 {
nuclear@0 82 return ::aiGetMaterialTextureCount(this,type);
nuclear@0 83 }
nuclear@0 84
nuclear@0 85 // ---------------------------------------------------------------------------
nuclear@0 86 template <typename Type>
nuclear@0 87 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 88 unsigned int idx, Type* pOut,
nuclear@0 89 unsigned int* pMax) const
nuclear@0 90 {
nuclear@0 91 unsigned int iNum = pMax ? *pMax : 1;
nuclear@0 92
nuclear@0 93 const aiMaterialProperty* prop;
nuclear@0 94 const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
nuclear@0 95 (const aiMaterialProperty**)&prop);
nuclear@0 96 if ( AI_SUCCESS == ret ) {
nuclear@0 97
nuclear@0 98 if (prop->mDataLength < sizeof(Type)*iNum) {
nuclear@0 99 return AI_FAILURE;
nuclear@0 100 }
nuclear@0 101
nuclear@0 102 if (prop->mType != aiPTI_Buffer) {
nuclear@0 103 return AI_FAILURE;
nuclear@0 104 }
nuclear@0 105
nuclear@0 106 iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type));
nuclear@0 107 ::memcpy(pOut,prop->mData,iNum * sizeof(Type));
nuclear@0 108 if (pMax) {
nuclear@0 109 *pMax = iNum;
nuclear@0 110 }
nuclear@0 111 }
nuclear@0 112 return ret;
nuclear@0 113 }
nuclear@0 114
nuclear@0 115 // ---------------------------------------------------------------------------
nuclear@0 116 template <typename Type>
nuclear@0 117 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 118 unsigned int idx,Type& pOut) const
nuclear@0 119 {
nuclear@0 120 const aiMaterialProperty* prop;
nuclear@0 121 const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
nuclear@0 122 (const aiMaterialProperty**)&prop);
nuclear@0 123 if ( AI_SUCCESS == ret ) {
nuclear@0 124
nuclear@0 125 if (prop->mDataLength < sizeof(Type)) {
nuclear@0 126 return AI_FAILURE;
nuclear@0 127 }
nuclear@0 128
nuclear@0 129 if (prop->mType != aiPTI_Buffer) {
nuclear@0 130 return AI_FAILURE;
nuclear@0 131 }
nuclear@0 132
nuclear@0 133 ::memcpy( &pOut, prop->mData, sizeof( Type ) );
nuclear@0 134 }
nuclear@0 135 return ret;
nuclear@0 136 }
nuclear@0 137
nuclear@0 138 // ---------------------------------------------------------------------------
nuclear@0 139 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 140 unsigned int idx,ai_real* pOut,
nuclear@0 141 unsigned int* pMax) const
nuclear@0 142 {
nuclear@0 143 return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax);
nuclear@0 144 }
nuclear@0 145 // ---------------------------------------------------------------------------
nuclear@0 146 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 147 unsigned int idx,int* pOut,
nuclear@0 148 unsigned int* pMax) const
nuclear@0 149 {
nuclear@0 150 return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax);
nuclear@0 151 }
nuclear@0 152 // ---------------------------------------------------------------------------
nuclear@0 153 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 154 unsigned int idx,ai_real& pOut) const
nuclear@0 155 {
nuclear@0 156 return aiGetMaterialFloat(this,pKey,type,idx,&pOut);
nuclear@0 157 }
nuclear@0 158 // ---------------------------------------------------------------------------
nuclear@0 159 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 160 unsigned int idx,int& pOut) const
nuclear@0 161 {
nuclear@0 162 return aiGetMaterialInteger(this,pKey,type,idx,&pOut);
nuclear@0 163 }
nuclear@0 164 // ---------------------------------------------------------------------------
nuclear@0 165 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 166 unsigned int idx,aiColor4D& pOut) const
nuclear@0 167 {
nuclear@0 168 return aiGetMaterialColor(this,pKey,type,idx,&pOut);
nuclear@0 169 }
nuclear@0 170 // ---------------------------------------------------------------------------
nuclear@0 171 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 172 unsigned int idx,aiColor3D& pOut) const
nuclear@0 173 {
nuclear@0 174 aiColor4D c;
nuclear@0 175 const aiReturn ret = aiGetMaterialColor(this,pKey,type,idx,&c);
nuclear@0 176 pOut = aiColor3D(c.r,c.g,c.b);
nuclear@0 177 return ret;
nuclear@0 178 }
nuclear@0 179 // ---------------------------------------------------------------------------
nuclear@0 180 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 181 unsigned int idx,aiString& pOut) const
nuclear@0 182 {
nuclear@0 183 return aiGetMaterialString(this,pKey,type,idx,&pOut);
nuclear@0 184 }
nuclear@0 185 // ---------------------------------------------------------------------------
nuclear@0 186 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
nuclear@0 187 unsigned int idx,aiUVTransform& pOut) const
nuclear@0 188 {
nuclear@0 189 return aiGetMaterialUVTransform(this,pKey,type,idx,&pOut);
nuclear@0 190 }
nuclear@0 191
nuclear@0 192
nuclear@0 193 // ---------------------------------------------------------------------------
nuclear@0 194 template<class TYPE>
nuclear@0 195 aiReturn aiMaterial::AddProperty (const TYPE* pInput,
nuclear@0 196 const unsigned int pNumValues,
nuclear@0 197 const char* pKey,
nuclear@0 198 unsigned int type,
nuclear@0 199 unsigned int index)
nuclear@0 200 {
nuclear@0 201 return AddBinaryProperty((const void*)pInput,
nuclear@0 202 pNumValues * sizeof(TYPE),
nuclear@0 203 pKey,type,index,aiPTI_Buffer);
nuclear@0 204 }
nuclear@0 205
nuclear@0 206 // ---------------------------------------------------------------------------
nuclear@0 207 inline aiReturn aiMaterial::AddProperty(const float* 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(float),
nuclear@0 215 pKey,type,index,aiPTI_Float);
nuclear@0 216 }
nuclear@0 217
nuclear@0 218 // ---------------------------------------------------------------------------
nuclear@0 219 inline aiReturn aiMaterial::AddProperty(const double* pInput,
nuclear@0 220 const unsigned int pNumValues,
nuclear@0 221 const char* pKey,
nuclear@0 222 unsigned int type,
nuclear@0 223 unsigned int index)
nuclear@0 224 {
nuclear@0 225 return AddBinaryProperty((const void*)pInput,
nuclear@0 226 pNumValues * sizeof(double),
nuclear@0 227 pKey,type,index,aiPTI_Double);
nuclear@0 228 }
nuclear@0 229
nuclear@0 230 // ---------------------------------------------------------------------------
nuclear@0 231 inline aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput,
nuclear@0 232 const unsigned int pNumValues,
nuclear@0 233 const char* pKey,
nuclear@0 234 unsigned int type,
nuclear@0 235 unsigned int index)
nuclear@0 236 {
nuclear@0 237 return AddBinaryProperty((const void*)pInput,
nuclear@0 238 pNumValues * sizeof(aiUVTransform),
nuclear@0 239 pKey,type,index,ai_real_to_property_type_info(pInput->mRotation));
nuclear@0 240 }
nuclear@0 241
nuclear@0 242 // ---------------------------------------------------------------------------
nuclear@0 243 inline aiReturn aiMaterial::AddProperty(const aiColor4D* pInput,
nuclear@0 244 const unsigned int pNumValues,
nuclear@0 245 const char* pKey,
nuclear@0 246 unsigned int type,
nuclear@0 247 unsigned int index)
nuclear@0 248 {
nuclear@0 249 return AddBinaryProperty((const void*)pInput,
nuclear@0 250 pNumValues * sizeof(aiColor4D),
nuclear@0 251 pKey,type,index,ai_real_to_property_type_info(pInput->a));
nuclear@0 252 }
nuclear@0 253
nuclear@0 254 // ---------------------------------------------------------------------------
nuclear@0 255 inline aiReturn aiMaterial::AddProperty(const aiColor3D* pInput,
nuclear@0 256 const unsigned int pNumValues,
nuclear@0 257 const char* pKey,
nuclear@0 258 unsigned int type,
nuclear@0 259 unsigned int index)
nuclear@0 260 {
nuclear@0 261 return AddBinaryProperty((const void*)pInput,
nuclear@0 262 pNumValues * sizeof(aiColor3D),
nuclear@0 263 pKey,type,index,ai_real_to_property_type_info(pInput->b));
nuclear@0 264 }
nuclear@0 265
nuclear@0 266 // ---------------------------------------------------------------------------
nuclear@0 267 inline aiReturn aiMaterial::AddProperty(const aiVector3D* pInput,
nuclear@0 268 const unsigned int pNumValues,
nuclear@0 269 const char* pKey,
nuclear@0 270 unsigned int type,
nuclear@0 271 unsigned int index)
nuclear@0 272 {
nuclear@0 273 return AddBinaryProperty((const void*)pInput,
nuclear@0 274 pNumValues * sizeof(aiVector3D),
nuclear@0 275 pKey,type,index,ai_real_to_property_type_info(pInput->x));
nuclear@0 276 }
nuclear@0 277
nuclear@0 278 // ---------------------------------------------------------------------------
nuclear@0 279 inline aiReturn aiMaterial::AddProperty(const int* pInput,
nuclear@0 280 const unsigned int pNumValues,
nuclear@0 281 const char* pKey,
nuclear@0 282 unsigned int type,
nuclear@0 283 unsigned int index)
nuclear@0 284 {
nuclear@0 285 return AddBinaryProperty((const void*)pInput,
nuclear@0 286 pNumValues * sizeof(int),
nuclear@0 287 pKey,type,index,aiPTI_Integer);
nuclear@0 288 }
nuclear@0 289
nuclear@0 290
nuclear@0 291 // ---------------------------------------------------------------------------
nuclear@0 292 // The template specializations below are for backwards compatibility.
nuclear@0 293 // The recommended way to add material properties is using the non-template
nuclear@0 294 // overloads.
nuclear@0 295 // ---------------------------------------------------------------------------
nuclear@0 296
nuclear@0 297 // ---------------------------------------------------------------------------
nuclear@0 298 template<>
nuclear@0 299 inline aiReturn aiMaterial::AddProperty<float>(const float* pInput,
nuclear@0 300 const unsigned int pNumValues,
nuclear@0 301 const char* pKey,
nuclear@0 302 unsigned int type,
nuclear@0 303 unsigned int index)
nuclear@0 304 {
nuclear@0 305 return AddBinaryProperty((const void*)pInput,
nuclear@0 306 pNumValues * sizeof(float),
nuclear@0 307 pKey,type,index,aiPTI_Float);
nuclear@0 308 }
nuclear@0 309
nuclear@0 310 // ---------------------------------------------------------------------------
nuclear@0 311 template<>
nuclear@0 312 inline aiReturn aiMaterial::AddProperty<double>(const double* pInput,
nuclear@0 313 const unsigned int pNumValues,
nuclear@0 314 const char* pKey,
nuclear@0 315 unsigned int type,
nuclear@0 316 unsigned int index)
nuclear@0 317 {
nuclear@0 318 return AddBinaryProperty((const void*)pInput,
nuclear@0 319 pNumValues * sizeof(double),
nuclear@0 320 pKey,type,index,aiPTI_Double);
nuclear@0 321 }
nuclear@0 322
nuclear@0 323 // ---------------------------------------------------------------------------
nuclear@0 324 template<>
nuclear@0 325 inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput,
nuclear@0 326 const unsigned int pNumValues,
nuclear@0 327 const char* pKey,
nuclear@0 328 unsigned int type,
nuclear@0 329 unsigned int index)
nuclear@0 330 {
nuclear@0 331 return AddBinaryProperty((const void*)pInput,
nuclear@0 332 pNumValues * sizeof(aiUVTransform),
nuclear@0 333 pKey,type,index,aiPTI_Float);
nuclear@0 334 }
nuclear@0 335
nuclear@0 336 // ---------------------------------------------------------------------------
nuclear@0 337 template<>
nuclear@0 338 inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput,
nuclear@0 339 const unsigned int pNumValues,
nuclear@0 340 const char* pKey,
nuclear@0 341 unsigned int type,
nuclear@0 342 unsigned int index)
nuclear@0 343 {
nuclear@0 344 return AddBinaryProperty((const void*)pInput,
nuclear@0 345 pNumValues * sizeof(aiColor4D),
nuclear@0 346 pKey,type,index,aiPTI_Float);
nuclear@0 347 }
nuclear@0 348
nuclear@0 349 // ---------------------------------------------------------------------------
nuclear@0 350 template<>
nuclear@0 351 inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput,
nuclear@0 352 const unsigned int pNumValues,
nuclear@0 353 const char* pKey,
nuclear@0 354 unsigned int type,
nuclear@0 355 unsigned int index)
nuclear@0 356 {
nuclear@0 357 return AddBinaryProperty((const void*)pInput,
nuclear@0 358 pNumValues * sizeof(aiColor3D),
nuclear@0 359 pKey,type,index,aiPTI_Float);
nuclear@0 360 }
nuclear@0 361
nuclear@0 362 // ---------------------------------------------------------------------------
nuclear@0 363 template<>
nuclear@0 364 inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput,
nuclear@0 365 const unsigned int pNumValues,
nuclear@0 366 const char* pKey,
nuclear@0 367 unsigned int type,
nuclear@0 368 unsigned int index)
nuclear@0 369 {
nuclear@0 370 return AddBinaryProperty((const void*)pInput,
nuclear@0 371 pNumValues * sizeof(aiVector3D),
nuclear@0 372 pKey,type,index,aiPTI_Float);
nuclear@0 373 }
nuclear@0 374
nuclear@0 375 // ---------------------------------------------------------------------------
nuclear@0 376 template<>
nuclear@0 377 inline aiReturn aiMaterial::AddProperty<int>(const int* pInput,
nuclear@0 378 const unsigned int pNumValues,
nuclear@0 379 const char* pKey,
nuclear@0 380 unsigned int type,
nuclear@0 381 unsigned int index)
nuclear@0 382 {
nuclear@0 383 return AddBinaryProperty((const void*)pInput,
nuclear@0 384 pNumValues * sizeof(int),
nuclear@0 385 pKey,type,index,aiPTI_Integer);
nuclear@0 386 }
nuclear@0 387
nuclear@0 388 //! @endcond
nuclear@0 389
nuclear@0 390 #endif //! AI_MATERIAL_INL_INC