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 types.h
|
nuclear@0
|
43 * Basic data types and primitives, such as vectors or colors.
|
nuclear@0
|
44 */
|
nuclear@0
|
45 #ifndef AI_TYPES_H_INC
|
nuclear@0
|
46 #define AI_TYPES_H_INC
|
nuclear@0
|
47
|
nuclear@0
|
48 // Some runtime headers
|
nuclear@0
|
49 #include <sys/types.h>
|
nuclear@0
|
50 #include <memory.h>
|
nuclear@0
|
51 #include <math.h>
|
nuclear@0
|
52 #include <stddef.h>
|
nuclear@0
|
53 #include <limits.h>
|
nuclear@0
|
54
|
nuclear@0
|
55 // Our compile configuration
|
nuclear@0
|
56 #include "defs.h"
|
nuclear@0
|
57
|
nuclear@0
|
58 // Some types moved to separate header due to size of operators
|
nuclear@0
|
59 #include "vector3.h"
|
nuclear@0
|
60 #include "vector2.h"
|
nuclear@0
|
61 #include "color4.h"
|
nuclear@0
|
62 #include "matrix3x3.h"
|
nuclear@0
|
63 #include "matrix4x4.h"
|
nuclear@0
|
64 #include "quaternion.h"
|
nuclear@0
|
65
|
nuclear@0
|
66 #ifdef __cplusplus
|
nuclear@0
|
67 #include <new> // for std::nothrow_t
|
nuclear@0
|
68 #include <string> // for aiString::Set(const std::string&)
|
nuclear@0
|
69
|
nuclear@0
|
70 namespace Assimp {
|
nuclear@0
|
71 //! @cond never
|
nuclear@0
|
72 namespace Intern {
|
nuclear@0
|
73 // --------------------------------------------------------------------
|
nuclear@0
|
74 /** @brief Internal helper class to utilize our internal new/delete
|
nuclear@0
|
75 * routines for allocating object of this and derived classes.
|
nuclear@0
|
76 *
|
nuclear@0
|
77 * By doing this you can safely share class objects between Assimp
|
nuclear@0
|
78 * and the application - it works even over DLL boundaries. A good
|
nuclear@0
|
79 * example is the #IOSystem where the application allocates its custom
|
nuclear@0
|
80 * #IOSystem, then calls #Importer::SetIOSystem(). When the Importer
|
nuclear@0
|
81 * destructs, Assimp calls operator delete on the stored #IOSystem.
|
nuclear@0
|
82 * If it lies on a different heap than Assimp is working with,
|
nuclear@0
|
83 * the application is determined to crash.
|
nuclear@0
|
84 */
|
nuclear@0
|
85 // --------------------------------------------------------------------
|
nuclear@0
|
86 #ifndef SWIG
|
nuclear@0
|
87 struct ASSIMP_API AllocateFromAssimpHeap {
|
nuclear@0
|
88 // http://www.gotw.ca/publications/mill15.htm
|
nuclear@0
|
89
|
nuclear@0
|
90 // new/delete overload
|
nuclear@0
|
91 void *operator new ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
nuclear@0
|
92 void *operator new ( size_t num_bytes, const std::nothrow_t& ) throw();
|
nuclear@0
|
93 void operator delete ( void* data);
|
nuclear@0
|
94
|
nuclear@0
|
95 // array new/delete overload
|
nuclear@0
|
96 void *operator new[] ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
nuclear@0
|
97 void *operator new[] ( size_t num_bytes, const std::nothrow_t& ) throw();
|
nuclear@0
|
98 void operator delete[] ( void* data);
|
nuclear@0
|
99
|
nuclear@0
|
100 }; // struct AllocateFromAssimpHeap
|
nuclear@0
|
101 #endif
|
nuclear@0
|
102 } // namespace Intern
|
nuclear@0
|
103 //! @endcond
|
nuclear@0
|
104 } // namespace Assimp
|
nuclear@0
|
105
|
nuclear@0
|
106 extern "C" {
|
nuclear@0
|
107 #endif
|
nuclear@0
|
108
|
nuclear@0
|
109 /** Maximum dimension for strings, ASSIMP strings are zero terminated. */
|
nuclear@0
|
110 #ifdef __cplusplus
|
nuclear@0
|
111 const size_t MAXLEN = 1024;
|
nuclear@0
|
112 #else
|
nuclear@0
|
113 # define MAXLEN 1024
|
nuclear@0
|
114 #endif
|
nuclear@0
|
115
|
nuclear@0
|
116 #include "./Compiler/pushpack1.h"
|
nuclear@0
|
117
|
nuclear@0
|
118 // ----------------------------------------------------------------------------------
|
nuclear@0
|
119 /** Represents a plane in a three-dimensional, euclidean space
|
nuclear@0
|
120 */
|
nuclear@0
|
121 struct aiPlane
|
nuclear@0
|
122 {
|
nuclear@0
|
123 #ifdef __cplusplus
|
nuclear@0
|
124 aiPlane () : a(0.f), b(0.f), c(0.f), d(0.f) {}
|
nuclear@0
|
125 aiPlane (float _a, float _b, float _c, float _d)
|
nuclear@0
|
126 : a(_a), b(_b), c(_c), d(_d) {}
|
nuclear@0
|
127
|
nuclear@0
|
128 aiPlane (const aiPlane& o) : a(o.a), b(o.b), c(o.c), d(o.d) {}
|
nuclear@0
|
129
|
nuclear@0
|
130 #endif // !__cplusplus
|
nuclear@0
|
131
|
nuclear@0
|
132 //! Plane equation
|
nuclear@0
|
133 float a,b,c,d;
|
nuclear@0
|
134 } PACK_STRUCT; // !struct aiPlane
|
nuclear@0
|
135
|
nuclear@0
|
136 // ----------------------------------------------------------------------------------
|
nuclear@0
|
137 /** Represents a ray
|
nuclear@0
|
138 */
|
nuclear@0
|
139 struct aiRay
|
nuclear@0
|
140 {
|
nuclear@0
|
141 #ifdef __cplusplus
|
nuclear@0
|
142 aiRay () {}
|
nuclear@0
|
143 aiRay (const aiVector3D& _pos, const aiVector3D& _dir)
|
nuclear@0
|
144 : pos(_pos), dir(_dir) {}
|
nuclear@0
|
145
|
nuclear@0
|
146 aiRay (const aiRay& o) : pos (o.pos), dir (o.dir) {}
|
nuclear@0
|
147
|
nuclear@0
|
148 #endif // !__cplusplus
|
nuclear@0
|
149
|
nuclear@0
|
150 //! Position and direction of the ray
|
nuclear@0
|
151 C_STRUCT aiVector3D pos, dir;
|
nuclear@0
|
152 } PACK_STRUCT; // !struct aiRay
|
nuclear@0
|
153
|
nuclear@0
|
154 // ----------------------------------------------------------------------------------
|
nuclear@0
|
155 /** Represents a color in Red-Green-Blue space.
|
nuclear@0
|
156 */
|
nuclear@0
|
157 struct aiColor3D
|
nuclear@0
|
158 {
|
nuclear@0
|
159 #ifdef __cplusplus
|
nuclear@0
|
160 aiColor3D () : r(0.0f), g(0.0f), b(0.0f) {}
|
nuclear@0
|
161 aiColor3D (float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
|
nuclear@0
|
162 aiColor3D (float _r) : r(_r), g(_r), b(_r) {}
|
nuclear@0
|
163 aiColor3D (const aiColor3D& o) : r(o.r), g(o.g), b(o.b) {}
|
nuclear@0
|
164
|
nuclear@0
|
165 /** Component-wise comparison */
|
nuclear@0
|
166 // TODO: add epsilon?
|
nuclear@0
|
167 bool operator == (const aiColor3D& other) const
|
nuclear@0
|
168 {return r == other.r && g == other.g && b == other.b;}
|
nuclear@0
|
169
|
nuclear@0
|
170 /** Component-wise inverse comparison */
|
nuclear@0
|
171 // TODO: add epsilon?
|
nuclear@0
|
172 bool operator != (const aiColor3D& other) const
|
nuclear@0
|
173 {return r != other.r || g != other.g || b != other.b;}
|
nuclear@0
|
174
|
nuclear@0
|
175 /** Component-wise addition */
|
nuclear@0
|
176 aiColor3D operator+(const aiColor3D& c) const {
|
nuclear@0
|
177 return aiColor3D(r+c.r,g+c.g,b+c.b);
|
nuclear@0
|
178 }
|
nuclear@0
|
179
|
nuclear@0
|
180 /** Component-wise subtraction */
|
nuclear@0
|
181 aiColor3D operator-(const aiColor3D& c) const {
|
nuclear@0
|
182 return aiColor3D(r-c.r,g-c.g,b-c.b);
|
nuclear@0
|
183 }
|
nuclear@0
|
184
|
nuclear@0
|
185 /** Component-wise multiplication */
|
nuclear@0
|
186 aiColor3D operator*(const aiColor3D& c) const {
|
nuclear@0
|
187 return aiColor3D(r*c.r,g*c.g,b*c.b);
|
nuclear@0
|
188 }
|
nuclear@0
|
189
|
nuclear@0
|
190 /** Multiply with a scalar */
|
nuclear@0
|
191 aiColor3D operator*(float f) const {
|
nuclear@0
|
192 return aiColor3D(r*f,g*f,b*f);
|
nuclear@0
|
193 }
|
nuclear@0
|
194
|
nuclear@0
|
195 /** Access a specific color component */
|
nuclear@0
|
196 float operator[](unsigned int i) const {
|
nuclear@0
|
197 return *(&r + i);
|
nuclear@0
|
198 }
|
nuclear@0
|
199
|
nuclear@0
|
200 /** Access a specific color component */
|
nuclear@0
|
201 float& operator[](unsigned int i) {
|
nuclear@0
|
202 return *(&r + i);
|
nuclear@0
|
203 }
|
nuclear@0
|
204
|
nuclear@0
|
205 /** Check whether a color is black */
|
nuclear@0
|
206 bool IsBlack() const {
|
nuclear@0
|
207 static const float epsilon = 10e-3f;
|
nuclear@0
|
208 return fabs( r ) < epsilon && fabs( g ) < epsilon && fabs( b ) < epsilon;
|
nuclear@0
|
209 }
|
nuclear@0
|
210
|
nuclear@0
|
211 #endif // !__cplusplus
|
nuclear@0
|
212
|
nuclear@0
|
213 //! Red, green and blue color values
|
nuclear@0
|
214 float r, g, b;
|
nuclear@0
|
215 } PACK_STRUCT; // !struct aiColor3D
|
nuclear@0
|
216 #include "./Compiler/poppack1.h"
|
nuclear@0
|
217
|
nuclear@0
|
218 // ----------------------------------------------------------------------------------
|
nuclear@0
|
219 /** Represents an UTF-8 string, zero byte terminated.
|
nuclear@0
|
220 *
|
nuclear@0
|
221 * The character set of an aiString is explicitly defined to be UTF-8. This Unicode
|
nuclear@0
|
222 * transformation was chosen in the belief that most strings in 3d files are limited
|
nuclear@0
|
223 * to ASCII, thus the character set needed to be strictly ASCII compatible.
|
nuclear@0
|
224 *
|
nuclear@0
|
225 * Most text file loaders provide proper Unicode input file handling, special unicode
|
nuclear@0
|
226 * characters are correctly transcoded to UTF8 and are kept throughout the libraries'
|
nuclear@0
|
227 * import pipeline.
|
nuclear@0
|
228 *
|
nuclear@0
|
229 * For most applications, it will be absolutely sufficient to interpret the
|
nuclear@0
|
230 * aiString as ASCII data and work with it as one would work with a plain char*.
|
nuclear@0
|
231 * Windows users in need of proper support for i.e asian characters can use the
|
nuclear@0
|
232 * #MultiByteToWideChar(), #WideCharToMultiByte() WinAPI functionality to convert the
|
nuclear@0
|
233 * UTF-8 strings to their working character set (i.e. MBCS, WideChar).
|
nuclear@0
|
234 *
|
nuclear@0
|
235 * We use this representation instead of std::string to be C-compatible. The
|
nuclear@0
|
236 * (binary) length of such a string is limited to MAXLEN characters (including the
|
nuclear@0
|
237 * the terminating zero).
|
nuclear@0
|
238 */
|
nuclear@0
|
239 struct aiString
|
nuclear@0
|
240 {
|
nuclear@0
|
241 #ifdef __cplusplus
|
nuclear@0
|
242 /** Default constructor, the string is set to have zero length */
|
nuclear@0
|
243 aiString() :
|
nuclear@0
|
244 length(0)
|
nuclear@0
|
245 {
|
nuclear@0
|
246 data[0] = '\0';
|
nuclear@0
|
247
|
nuclear@0
|
248 #ifdef _DEBUG
|
nuclear@0
|
249 // Debug build: overwrite the string on its full length with ESC (27)
|
nuclear@0
|
250 memset(data+1,27,MAXLEN-1);
|
nuclear@0
|
251 #endif
|
nuclear@0
|
252 }
|
nuclear@0
|
253
|
nuclear@0
|
254 /** Copy constructor */
|
nuclear@0
|
255 aiString(const aiString& rOther) :
|
nuclear@0
|
256 length(rOther.length)
|
nuclear@0
|
257 {
|
nuclear@0
|
258 // Crop the string to the maximum length
|
nuclear@0
|
259 length = length>=MAXLEN?MAXLEN-1:length;
|
nuclear@0
|
260 memcpy( data, rOther.data, length);
|
nuclear@0
|
261 data[length] = '\0';
|
nuclear@0
|
262 }
|
nuclear@0
|
263
|
nuclear@0
|
264 /** Constructor from std::string */
|
nuclear@0
|
265 explicit aiString(const std::string& pString) :
|
nuclear@0
|
266 length(pString.length())
|
nuclear@0
|
267 {
|
nuclear@0
|
268 length = length>=MAXLEN?MAXLEN-1:length;
|
nuclear@0
|
269 memcpy( data, pString.c_str(), length);
|
nuclear@0
|
270 data[length] = '\0';
|
nuclear@0
|
271 }
|
nuclear@0
|
272
|
nuclear@0
|
273 /** Copy a std::string to the aiString */
|
nuclear@0
|
274 void Set( const std::string& pString) {
|
nuclear@0
|
275 if( pString.length() > MAXLEN - 1) {
|
nuclear@0
|
276 return;
|
nuclear@0
|
277 }
|
nuclear@0
|
278 length = pString.length();
|
nuclear@0
|
279 memcpy( data, pString.c_str(), length);
|
nuclear@0
|
280 data[length] = 0;
|
nuclear@0
|
281 }
|
nuclear@0
|
282
|
nuclear@0
|
283 /** Copy a const char* to the aiString */
|
nuclear@0
|
284 void Set( const char* sz) {
|
nuclear@0
|
285 const size_t len = ::strlen(sz);
|
nuclear@0
|
286 if( len > MAXLEN - 1) {
|
nuclear@0
|
287 return;
|
nuclear@0
|
288 }
|
nuclear@0
|
289 length = len;
|
nuclear@0
|
290 memcpy( data, sz, len);
|
nuclear@0
|
291 data[len] = 0;
|
nuclear@0
|
292 }
|
nuclear@0
|
293
|
nuclear@0
|
294 /** Assign a const char* to the string */
|
nuclear@0
|
295 aiString& operator = (const char* sz) {
|
nuclear@0
|
296 Set(sz);
|
nuclear@0
|
297 return *this;
|
nuclear@0
|
298 }
|
nuclear@0
|
299
|
nuclear@0
|
300 /** Assign a cstd::string to the string */
|
nuclear@0
|
301 aiString& operator = ( const std::string& pString) {
|
nuclear@0
|
302 Set(pString);
|
nuclear@0
|
303 return *this;
|
nuclear@0
|
304 }
|
nuclear@0
|
305
|
nuclear@0
|
306 /** Comparison operator */
|
nuclear@0
|
307 bool operator==(const aiString& other) const {
|
nuclear@0
|
308 return (length == other.length && 0 == memcmp(data,other.data,length));
|
nuclear@0
|
309 }
|
nuclear@0
|
310
|
nuclear@0
|
311 /** Inverse comparison operator */
|
nuclear@0
|
312 bool operator!=(const aiString& other) const {
|
nuclear@0
|
313 return (length != other.length || 0 != memcmp(data,other.data,length));
|
nuclear@0
|
314 }
|
nuclear@0
|
315
|
nuclear@0
|
316 /** Append a string to the string */
|
nuclear@0
|
317 void Append (const char* app) {
|
nuclear@0
|
318 const size_t len = ::strlen(app);
|
nuclear@0
|
319 if (!len) {
|
nuclear@0
|
320 return;
|
nuclear@0
|
321 }
|
nuclear@0
|
322 if (length + len >= MAXLEN) {
|
nuclear@0
|
323 return;
|
nuclear@0
|
324 }
|
nuclear@0
|
325
|
nuclear@0
|
326 memcpy(&data[length],app,len+1);
|
nuclear@0
|
327 length += len;
|
nuclear@0
|
328 }
|
nuclear@0
|
329
|
nuclear@0
|
330 /** Clear the string - reset its length to zero */
|
nuclear@0
|
331 void Clear () {
|
nuclear@0
|
332 length = 0;
|
nuclear@0
|
333 data[0] = '\0';
|
nuclear@0
|
334
|
nuclear@0
|
335 #ifdef _DEBUG
|
nuclear@0
|
336 // Debug build: overwrite the string on its full length with ESC (27)
|
nuclear@0
|
337 memset(data+1,27,MAXLEN-1);
|
nuclear@0
|
338 #endif
|
nuclear@0
|
339 }
|
nuclear@0
|
340
|
nuclear@0
|
341 /** Returns a pointer to the underlying zero-terminated array of characters */
|
nuclear@0
|
342 const char* C_Str() const {
|
nuclear@0
|
343 return data;
|
nuclear@0
|
344 }
|
nuclear@0
|
345
|
nuclear@0
|
346 #endif // !__cplusplus
|
nuclear@0
|
347
|
nuclear@0
|
348 /** Binary length of the string excluding the terminal 0. This is NOT the
|
nuclear@0
|
349 * logical length of strings containing UTF-8 multibyte sequences! It's
|
nuclear@0
|
350 * the number of bytes from the beginning of the string to its end.*/
|
nuclear@0
|
351 size_t length;
|
nuclear@0
|
352
|
nuclear@0
|
353 /** String buffer. Size limit is MAXLEN */
|
nuclear@0
|
354 char data[MAXLEN];
|
nuclear@0
|
355 } ; // !struct aiString
|
nuclear@0
|
356
|
nuclear@0
|
357
|
nuclear@0
|
358 // ----------------------------------------------------------------------------------
|
nuclear@0
|
359 /** Standard return type for some library functions.
|
nuclear@0
|
360 * Rarely used, and if, mostly in the C API.
|
nuclear@0
|
361 */
|
nuclear@0
|
362 enum aiReturn
|
nuclear@0
|
363 {
|
nuclear@0
|
364 /** Indicates that a function was successful */
|
nuclear@0
|
365 aiReturn_SUCCESS = 0x0,
|
nuclear@0
|
366
|
nuclear@0
|
367 /** Indicates that a function failed */
|
nuclear@0
|
368 aiReturn_FAILURE = -0x1,
|
nuclear@0
|
369
|
nuclear@0
|
370 /** Indicates that not enough memory was available
|
nuclear@0
|
371 * to perform the requested operation
|
nuclear@0
|
372 */
|
nuclear@0
|
373 aiReturn_OUTOFMEMORY = -0x3,
|
nuclear@0
|
374
|
nuclear@0
|
375 /** @cond never
|
nuclear@0
|
376 * Force 32-bit size enum
|
nuclear@0
|
377 */
|
nuclear@0
|
378 _AI_ENFORCE_ENUM_SIZE = 0x7fffffff
|
nuclear@0
|
379 }; // !enum aiReturn
|
nuclear@0
|
380
|
nuclear@0
|
381 // just for backwards compatibility, don't use these constants anymore
|
nuclear@0
|
382 #define AI_SUCCESS aiReturn_SUCCESS
|
nuclear@0
|
383 #define AI_FAILURE aiReturn_FAILURE
|
nuclear@0
|
384 #define AI_OUTOFMEMORY aiReturn_OUTOFMEMORY
|
nuclear@0
|
385
|
nuclear@0
|
386 // ----------------------------------------------------------------------------------
|
nuclear@0
|
387 /** Seek origins (for the virtual file system API).
|
nuclear@0
|
388 * Much cooler than using SEEK_SET, SEEK_CUR or SEEK_END.
|
nuclear@0
|
389 */
|
nuclear@0
|
390 enum aiOrigin
|
nuclear@0
|
391 {
|
nuclear@0
|
392 /** Beginning of the file */
|
nuclear@0
|
393 aiOrigin_SET = 0x0,
|
nuclear@0
|
394
|
nuclear@0
|
395 /** Current position of the file pointer */
|
nuclear@0
|
396 aiOrigin_CUR = 0x1,
|
nuclear@0
|
397
|
nuclear@0
|
398 /** End of the file, offsets must be negative */
|
nuclear@0
|
399 aiOrigin_END = 0x2,
|
nuclear@0
|
400
|
nuclear@0
|
401 /** @cond never
|
nuclear@0
|
402 * Force 32-bit size enum
|
nuclear@0
|
403 */
|
nuclear@0
|
404 _AI_ORIGIN_ENFORCE_ENUM_SIZE = 0x7fffffff
|
nuclear@0
|
405 }; // !enum aiOrigin
|
nuclear@0
|
406
|
nuclear@0
|
407 // ----------------------------------------------------------------------------------
|
nuclear@0
|
408 /** @brief Enumerates predefined log streaming destinations.
|
nuclear@0
|
409 * Logging to these streams can be enabled with a single call to
|
nuclear@0
|
410 * #LogStream::createDefaultStream or #aiAttachPredefinedLogStream(),
|
nuclear@0
|
411 * respectively.
|
nuclear@0
|
412 */
|
nuclear@0
|
413 enum aiDefaultLogStream
|
nuclear@0
|
414 {
|
nuclear@0
|
415 /** Stream the log to a file */
|
nuclear@0
|
416 aiDefaultLogStream_FILE = 0x1,
|
nuclear@0
|
417
|
nuclear@0
|
418 /** Stream the log to std::cout */
|
nuclear@0
|
419 aiDefaultLogStream_STDOUT = 0x2,
|
nuclear@0
|
420
|
nuclear@0
|
421 /** Stream the log to std::cerr */
|
nuclear@0
|
422 aiDefaultLogStream_STDERR = 0x4,
|
nuclear@0
|
423
|
nuclear@0
|
424 /** MSVC only: Stream the log the the debugger
|
nuclear@0
|
425 * (this relies on OutputDebugString from the Win32 SDK)
|
nuclear@0
|
426 */
|
nuclear@0
|
427 aiDefaultLogStream_DEBUGGER = 0x8,
|
nuclear@0
|
428
|
nuclear@0
|
429 /** @cond never
|
nuclear@0
|
430 * Force 32-bit size enum
|
nuclear@0
|
431 */
|
nuclear@0
|
432 _AI_DLS_ENFORCE_ENUM_SIZE = 0x7fffffff
|
nuclear@0
|
433 }; // !enum aiDefaultLogStream
|
nuclear@0
|
434
|
nuclear@0
|
435 // just for backwards compatibility, don't use these constants anymore
|
nuclear@0
|
436 #define DLS_FILE aiDefaultLogStream_FILE
|
nuclear@0
|
437 #define DLS_STDOUT aiDefaultLogStream_STDOUT
|
nuclear@0
|
438 #define DLS_STDERR aiDefaultLogStream_STDERR
|
nuclear@0
|
439 #define DLS_DEBUGGER aiDefaultLogStream_DEBUGGER
|
nuclear@0
|
440
|
nuclear@0
|
441 // ----------------------------------------------------------------------------------
|
nuclear@0
|
442 /** Stores the memory requirements for different components (e.g. meshes, materials,
|
nuclear@0
|
443 * animations) of an import. All sizes are in bytes.
|
nuclear@0
|
444 * @see Importer::GetMemoryRequirements()
|
nuclear@0
|
445 */
|
nuclear@0
|
446 struct aiMemoryInfo
|
nuclear@0
|
447 {
|
nuclear@0
|
448 #ifdef __cplusplus
|
nuclear@0
|
449
|
nuclear@0
|
450 /** Default constructor */
|
nuclear@0
|
451 aiMemoryInfo()
|
nuclear@0
|
452 : textures (0)
|
nuclear@0
|
453 , materials (0)
|
nuclear@0
|
454 , meshes (0)
|
nuclear@0
|
455 , nodes (0)
|
nuclear@0
|
456 , animations (0)
|
nuclear@0
|
457 , cameras (0)
|
nuclear@0
|
458 , lights (0)
|
nuclear@0
|
459 , total (0)
|
nuclear@0
|
460 {}
|
nuclear@0
|
461
|
nuclear@0
|
462 #endif
|
nuclear@0
|
463
|
nuclear@0
|
464 /** Storage allocated for texture data */
|
nuclear@0
|
465 unsigned int textures;
|
nuclear@0
|
466
|
nuclear@0
|
467 /** Storage allocated for material data */
|
nuclear@0
|
468 unsigned int materials;
|
nuclear@0
|
469
|
nuclear@0
|
470 /** Storage allocated for mesh data */
|
nuclear@0
|
471 unsigned int meshes;
|
nuclear@0
|
472
|
nuclear@0
|
473 /** Storage allocated for node data */
|
nuclear@0
|
474 unsigned int nodes;
|
nuclear@0
|
475
|
nuclear@0
|
476 /** Storage allocated for animation data */
|
nuclear@0
|
477 unsigned int animations;
|
nuclear@0
|
478
|
nuclear@0
|
479 /** Storage allocated for camera data */
|
nuclear@0
|
480 unsigned int cameras;
|
nuclear@0
|
481
|
nuclear@0
|
482 /** Storage allocated for light data */
|
nuclear@0
|
483 unsigned int lights;
|
nuclear@0
|
484
|
nuclear@0
|
485 /** Total storage allocated for the full import. */
|
nuclear@0
|
486 unsigned int total;
|
nuclear@0
|
487 }; // !struct aiMemoryInfo
|
nuclear@0
|
488
|
nuclear@0
|
489 #ifdef __cplusplus
|
nuclear@0
|
490 }
|
nuclear@0
|
491 #endif //! __cplusplus
|
nuclear@0
|
492
|
nuclear@0
|
493 // Include implementation files
|
nuclear@0
|
494 #include "vector2.inl"
|
nuclear@0
|
495 #include "vector3.inl"
|
nuclear@0
|
496 #include "color4.inl"
|
nuclear@0
|
497 #include "quaternion.inl"
|
nuclear@0
|
498 #include "matrix3x3.inl"
|
nuclear@0
|
499 #include "matrix4x4.inl"
|
nuclear@0
|
500 #endif
|