vrshoot

annotate libs/assimp/assimp/material.inl @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +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-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