| 1 | /* | 
|---|
| 2 | ----------------------------------------------------------------------------- | 
|---|
| 3 | This source file is part of OGRE | 
|---|
| 4 |     (Object-oriented Graphics Rendering Engine) | 
|---|
| 5 | For the latest info, see http://www.ogre3d.org/ | 
|---|
| 6 |  | 
|---|
| 7 | Copyright (c) 2000-2006 Torus Knot Software Ltd | 
|---|
| 8 | Also see acknowledgements in Readme.html | 
|---|
| 9 |  | 
|---|
| 10 | This program is free software; you can redistribute it and/or modify it under | 
|---|
| 11 | the terms of the GNU Lesser General Public License as published by the Free Software | 
|---|
| 12 | Foundation; either version 2 of the License, or (at your option) any later | 
|---|
| 13 | version. | 
|---|
| 14 |  | 
|---|
| 15 | This program is distributed in the hope that it will be useful, but WITHOUT | 
|---|
| 16 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 
|---|
| 17 | FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. | 
|---|
| 18 |  | 
|---|
| 19 | You should have received a copy of the GNU Lesser General Public License along with | 
|---|
| 20 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | 
|---|
| 21 | Place - Suite 330, Boston, MA 02111-1307, USA, or go to | 
|---|
| 22 | http://www.gnu.org/copyleft/lesser.txt. | 
|---|
| 23 |  | 
|---|
| 24 | You may alternatively use this source under the terms of a specific version of | 
|---|
| 25 | the OGRE Unrestricted License provided you have obtained such a license from | 
|---|
| 26 | Torus Knot Software Ltd. | 
|---|
| 27 | ----------------------------------------------------------------------------- | 
|---|
| 28 | */ | 
|---|
| 29 | #ifndef __Common_H__ | 
|---|
| 30 | #define __Common_H__ | 
|---|
| 31 | // Common stuff | 
|---|
| 32 |  | 
|---|
| 33 | #include "OgreString.h" | 
|---|
| 34 |  | 
|---|
| 35 | #if defined ( OGRE_GCC_VISIBILITY ) | 
|---|
| 36 | #   pragma GCC visibility push(default) | 
|---|
| 37 | #endif | 
|---|
| 38 |  | 
|---|
| 39 | #include <utility> | 
|---|
| 40 | #include <vector> | 
|---|
| 41 | #include <map> | 
|---|
| 42 |  | 
|---|
| 43 | #if defined ( OGRE_GCC_VISIBILITY ) | 
|---|
| 44 | #   pragma GCC visibility pop | 
|---|
| 45 | #endif | 
|---|
| 46 |  | 
|---|
| 47 | namespace Ogre { | 
|---|
| 48 |  | 
|---|
| 49 |  | 
|---|
| 50 |     /** Comparison functions used for the depth/stencil buffer operations and  | 
|---|
| 51 |                 others. */ | 
|---|
| 52 |     enum CompareFunction | 
|---|
| 53 |     { | 
|---|
| 54 |         CMPF_ALWAYS_FAIL, | 
|---|
| 55 |         CMPF_ALWAYS_PASS, | 
|---|
| 56 |         CMPF_LESS, | 
|---|
| 57 |         CMPF_LESS_EQUAL, | 
|---|
| 58 |         CMPF_EQUAL, | 
|---|
| 59 |         CMPF_NOT_EQUAL, | 
|---|
| 60 |         CMPF_GREATER_EQUAL, | 
|---|
| 61 |         CMPF_GREATER | 
|---|
| 62 |     }; | 
|---|
| 63 |  | 
|---|
| 64 |     /** High-level filtering options providing shortcuts to settings the | 
|---|
| 65 |         minification, magnification and mip filters. */ | 
|---|
| 66 |     enum TextureFilterOptions | 
|---|
| 67 |     { | 
|---|
| 68 |         /// Equal to: min=FO_POINT, mag=FO_POINT, mip=FO_NONE | 
|---|
| 69 |         TFO_NONE, | 
|---|
| 70 |         /// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_POINT | 
|---|
| 71 |         TFO_BILINEAR, | 
|---|
| 72 |         /// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_LINEAR | 
|---|
| 73 |         TFO_TRILINEAR, | 
|---|
| 74 |         /// Equal to: min=FO_ANISOTROPIC, max=FO_ANISOTROPIC, mip=FO_LINEAR | 
|---|
| 75 |                 TFO_ANISOTROPIC | 
|---|
| 76 |     }; | 
|---|
| 77 |  | 
|---|
| 78 |     enum FilterType | 
|---|
| 79 |     { | 
|---|
| 80 |         /// The filter used when shrinking a texture | 
|---|
| 81 |         FT_MIN, | 
|---|
| 82 |         /// The filter used when magnifiying a texture | 
|---|
| 83 |         FT_MAG, | 
|---|
| 84 |         /// The filter used when determining the mipmap | 
|---|
| 85 |         FT_MIP | 
|---|
| 86 |     }; | 
|---|
| 87 |     /** Filtering options for textures / mipmaps. */ | 
|---|
| 88 |     enum FilterOptions | 
|---|
| 89 |     { | 
|---|
| 90 |         /// No filtering, used for FILT_MIP to turn off mipmapping | 
|---|
| 91 |         FO_NONE, | 
|---|
| 92 |         /// Use the closest pixel | 
|---|
| 93 |         FO_POINT, | 
|---|
| 94 |         /// Average of a 2x2 pixel area, denotes bilinear for MIN and MAG, trilinear for MIP | 
|---|
| 95 |         FO_LINEAR, | 
|---|
| 96 |         /// Similar to FO_LINEAR, but compensates for the angle of the texture plane | 
|---|
| 97 |         FO_ANISOTROPIC | 
|---|
| 98 |     }; | 
|---|
| 99 |  | 
|---|
| 100 |     /** Light shading modes. */ | 
|---|
| 101 |     enum ShadeOptions | 
|---|
| 102 |     { | 
|---|
| 103 |         SO_FLAT, | 
|---|
| 104 |         SO_GOURAUD, | 
|---|
| 105 |         SO_PHONG | 
|---|
| 106 |     }; | 
|---|
| 107 |  | 
|---|
| 108 |     /** Fog modes. */ | 
|---|
| 109 |     enum FogMode | 
|---|
| 110 |     { | 
|---|
| 111 |         /// No fog. Duh. | 
|---|
| 112 |         FOG_NONE, | 
|---|
| 113 |         /// Fog density increases  exponentially from the camera (fog = 1/e^(distance * density)) | 
|---|
| 114 |         FOG_EXP, | 
|---|
| 115 |         /// Fog density increases at the square of FOG_EXP, i.e. even quicker (fog = 1/e^(distance * density)^2) | 
|---|
| 116 |         FOG_EXP2, | 
|---|
| 117 |         /// Fog density increases linearly between the start and end distances | 
|---|
| 118 |         FOG_LINEAR | 
|---|
| 119 |     }; | 
|---|
| 120 |  | 
|---|
| 121 |     /** Hardware culling modes based on vertex winding. | 
|---|
| 122 |         This setting applies to how the hardware API culls triangles it is sent. */ | 
|---|
| 123 |     enum CullingMode | 
|---|
| 124 |     { | 
|---|
| 125 |         /// Hardware never culls triangles and renders everything it receives. | 
|---|
| 126 |         CULL_NONE = 1, | 
|---|
| 127 |         /// Hardware culls triangles whose vertices are listed clockwise in the view (default). | 
|---|
| 128 |         CULL_CLOCKWISE = 2, | 
|---|
| 129 |         /// Hardware culls triangles whose vertices are listed anticlockwise in the view. | 
|---|
| 130 |         CULL_ANTICLOCKWISE = 3 | 
|---|
| 131 |     }; | 
|---|
| 132 |  | 
|---|
| 133 |     /** Manual culling modes based on vertex normals. | 
|---|
| 134 |         This setting applies to how the software culls triangles before sending them to the  | 
|---|
| 135 |                 hardware API. This culling mode is used by scene managers which choose to implement it - | 
|---|
| 136 |                 normally those which deal with large amounts of fixed world geometry which is often  | 
|---|
| 137 |                 planar (software culling movable variable geometry is expensive). */ | 
|---|
| 138 |     enum ManualCullingMode | 
|---|
| 139 |     { | 
|---|
| 140 |         /// No culling so everything is sent to the hardware. | 
|---|
| 141 |         MANUAL_CULL_NONE = 1, | 
|---|
| 142 |         /// Cull triangles whose normal is pointing away from the camera (default). | 
|---|
| 143 |         MANUAL_CULL_BACK = 2, | 
|---|
| 144 |         /// Cull triangles whose normal is pointing towards the camera. | 
|---|
| 145 |         MANUAL_CULL_FRONT = 3 | 
|---|
| 146 |     }; | 
|---|
| 147 |  | 
|---|
| 148 |     /** Enumerates the wave types usable with the Ogre engine. */ | 
|---|
| 149 |     enum WaveformType | 
|---|
| 150 |     { | 
|---|
| 151 |         /// Standard sine wave which smoothly changes from low to high and back again. | 
|---|
| 152 |         WFT_SINE, | 
|---|
| 153 |         /// An angular wave with a constant increase / decrease speed with pointed peaks. | 
|---|
| 154 |         WFT_TRIANGLE, | 
|---|
| 155 |         /// Half of the time is spent at the min, half at the max with instant transition between. | 
|---|
| 156 |         WFT_SQUARE, | 
|---|
| 157 |         /// Gradual steady increase from min to max over the period with an instant return to min at the end. | 
|---|
| 158 |         WFT_SAWTOOTH, | 
|---|
| 159 |         /// Gradual steady decrease from max to min over the period, with an instant return to max at the end. | 
|---|
| 160 |         WFT_INVERSE_SAWTOOTH, | 
|---|
| 161 |                 /// Pulse Width Modulation. Works like WFT_SQUARE, except the high to low transition is controlled by duty cycle.  | 
|---|
| 162 |                 /// With a duty cycle of 50% (0.5) will give the same output as WFT_SQUARE. | 
|---|
| 163 |                 WFT_PWM | 
|---|
| 164 |     }; | 
|---|
| 165 |  | 
|---|
| 166 |     /** The polygon mode to use when rasterising. */ | 
|---|
| 167 |     enum PolygonMode | 
|---|
| 168 |     { | 
|---|
| 169 |                 /// Only points are rendered. | 
|---|
| 170 |         PM_POINTS = 1, | 
|---|
| 171 |                 /// Wireframe models are rendered. | 
|---|
| 172 |         PM_WIREFRAME = 2, | 
|---|
| 173 |                 /// Solid polygons are rendered. | 
|---|
| 174 |         PM_SOLID = 3 | 
|---|
| 175 |     }; | 
|---|
| 176 |  | 
|---|
| 177 |     /** An enumeration of broad shadow techniques */ | 
|---|
| 178 |     enum ShadowTechnique | 
|---|
| 179 |     { | 
|---|
| 180 |         /** No shadows */ | 
|---|
| 181 |         SHADOWTYPE_NONE = 0x00, | 
|---|
| 182 |                 /** Mask for additive shadows (not for direct use, use  SHADOWTYPE_ enum instead) | 
|---|
| 183 |                 */ | 
|---|
| 184 |                 SHADOWDETAILTYPE_ADDITIVE = 0x01, | 
|---|
| 185 |                 /** Mask for modulative shadows (not for direct use, use  SHADOWTYPE_ enum instead) | 
|---|
| 186 |                 */ | 
|---|
| 187 |                 SHADOWDETAILTYPE_MODULATIVE = 0x02, | 
|---|
| 188 |                 /** Mask for integrated shadows (not for direct use, use SHADOWTYPE_ enum instead) | 
|---|
| 189 |                 */ | 
|---|
| 190 |                 SHADOWDETAILTYPE_INTEGRATED = 0x04, | 
|---|
| 191 |                 /** Mask for stencil shadows (not for direct use, use  SHADOWTYPE_ enum instead) | 
|---|
| 192 |                 */ | 
|---|
| 193 |                 SHADOWDETAILTYPE_STENCIL = 0x10, | 
|---|
| 194 |                 /** Mask for texture shadows (not for direct use, use  SHADOWTYPE_ enum instead) | 
|---|
| 195 |                 */ | 
|---|
| 196 |                 SHADOWDETAILTYPE_TEXTURE = 0x20, | 
|---|
| 197 |                  | 
|---|
| 198 |         /** Stencil shadow technique which renders all shadow volumes as | 
|---|
| 199 |             a modulation after all the non-transparent areas have been  | 
|---|
| 200 |             rendered. This technique is considerably less fillrate intensive  | 
|---|
| 201 |             than the additive stencil shadow approach when there are multiple | 
|---|
| 202 |             lights, but is not an accurate model.  | 
|---|
| 203 |         */ | 
|---|
| 204 |         SHADOWTYPE_STENCIL_MODULATIVE = 0x12, | 
|---|
| 205 |         /** Stencil shadow technique which renders each light as a separate | 
|---|
| 206 |             additive pass to the scene. This technique can be very fillrate | 
|---|
| 207 |             intensive because it requires at least 2 passes of the entire | 
|---|
| 208 |             scene, more if there are multiple lights. However, it is a more | 
|---|
| 209 |             accurate model than the modulative stencil approach and this is | 
|---|
| 210 |             especially apparant when using coloured lights or bump mapping. | 
|---|
| 211 |         */ | 
|---|
| 212 |         SHADOWTYPE_STENCIL_ADDITIVE = 0x11, | 
|---|
| 213 |         /** Texture-based shadow technique which involves a monochrome render-to-texture | 
|---|
| 214 |             of the shadow caster and a projection of that texture onto the  | 
|---|
| 215 |             shadow receivers as a modulative pass.  | 
|---|
| 216 |         */ | 
|---|
| 217 |         SHADOWTYPE_TEXTURE_MODULATIVE = 0x22, | 
|---|
| 218 |                  | 
|---|
| 219 |         /** Texture-based shadow technique which involves a render-to-texture | 
|---|
| 220 |             of the shadow caster and a projection of that texture onto the  | 
|---|
| 221 |             shadow receivers, built up per light as additive passes.  | 
|---|
| 222 |                         This technique can be very fillrate intensive because it requires numLights + 2  | 
|---|
| 223 |                         passes of the entire scene. However, it is a more accurate model than the  | 
|---|
| 224 |                         modulative approach and this is especially apparant when using coloured lights  | 
|---|
| 225 |                         or bump mapping. | 
|---|
| 226 |         */ | 
|---|
| 227 |         SHADOWTYPE_TEXTURE_ADDITIVE = 0x21, | 
|---|
| 228 |  | 
|---|
| 229 |                 /** Texture-based shadow technique which involves a render-to-texture | 
|---|
| 230 |                 of the shadow caster and a projection of that texture on to the shadow | 
|---|
| 231 |                 receivers, with the usage of those shadow textures completely controlled | 
|---|
| 232 |                 by the materials of the receivers. | 
|---|
| 233 |                 This technique is easily the most flexible of all techniques because  | 
|---|
| 234 |                 the material author is in complete control over how the shadows are | 
|---|
| 235 |                 combined with regular rendering. It can perform shadows as accurately | 
|---|
| 236 |                 as SHADOWTYPE_TEXTURE_ADDITIVE but more efficiently because it requires | 
|---|
| 237 |                 less passes. However it also requires more expertise to use, and  | 
|---|
| 238 |                 in almost all cases, shader capable hardware to really use to the full. | 
|---|
| 239 |                 @note The 'additive' part of this mode means that the colour of | 
|---|
| 240 |                 the rendered shadow texture is by default plain black. It does | 
|---|
| 241 |                 not mean it does the adding on your receivers automatically though, how you | 
|---|
| 242 |                 use that result is up to you. | 
|---|
| 243 |                 */ | 
|---|
| 244 |                 SHADOWTYPE_TEXTURE_ADDITIVE_INTEGRATED = 0x25, | 
|---|
| 245 |                 /** Texture-based shadow technique which involves a render-to-texture | 
|---|
| 246 |                         of the shadow caster and a projection of that texture on to the shadow | 
|---|
| 247 |                         receivers, with the usage of those shadow textures completely controlled | 
|---|
| 248 |                         by the materials of the receivers. | 
|---|
| 249 |                         This technique is easily the most flexible of all techniques because  | 
|---|
| 250 |                         the material author is in complete control over how the shadows are | 
|---|
| 251 |                         combined with regular rendering. It can perform shadows as accurately | 
|---|
| 252 |                         as SHADOWTYPE_TEXTURE_ADDITIVE but more efficiently because it requires | 
|---|
| 253 |                         less passes. However it also requires more expertise to use, and  | 
|---|
| 254 |                         in almost all cases, shader capable hardware to really use to the full. | 
|---|
| 255 |                         @note The 'modulative' part of this mode means that the colour of | 
|---|
| 256 |                         the rendered shadow texture is by default the 'shadow colour'. It does | 
|---|
| 257 |                         not mean it modulates on your receivers automatically though, how you | 
|---|
| 258 |                         use that result is up to you. | 
|---|
| 259 |                 */ | 
|---|
| 260 |                 SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED = 0x26 | 
|---|
| 261 |     }; | 
|---|
| 262 |  | 
|---|
| 263 |     /** An enumeration describing which material properties should track the vertex colours */ | 
|---|
| 264 |     typedef int TrackVertexColourType; | 
|---|
| 265 |     enum TrackVertexColourEnum { | 
|---|
| 266 |         TVC_NONE        = 0x0, | 
|---|
| 267 |         TVC_AMBIENT     = 0x1,         | 
|---|
| 268 |         TVC_DIFFUSE     = 0x2, | 
|---|
| 269 |         TVC_SPECULAR    = 0x4, | 
|---|
| 270 |         TVC_EMISSIVE    = 0x8 | 
|---|
| 271 |     }; | 
|---|
| 272 |  | 
|---|
| 273 |     /** Sort mode for billboard-set and particle-system */ | 
|---|
| 274 |     enum SortMode | 
|---|
| 275 |     { | 
|---|
| 276 |         /** Sort by direction of the camera */ | 
|---|
| 277 |         SM_DIRECTION, | 
|---|
| 278 |         /** Sort by distance from the camera */ | 
|---|
| 279 |         SM_DISTANCE | 
|---|
| 280 |     }; | 
|---|
| 281 |  | 
|---|
| 282 |     /** Defines the frame buffer types. */ | 
|---|
| 283 |     enum FrameBufferType { | 
|---|
| 284 |         FBT_COLOUR  = 0x1, | 
|---|
| 285 |         FBT_DEPTH   = 0x2, | 
|---|
| 286 |         FBT_STENCIL = 0x4 | 
|---|
| 287 |     }; | 
|---|
| 288 |      | 
|---|
| 289 |          | 
|---|
| 290 |     class Light; | 
|---|
| 291 |         typedef std::vector<Light*> LightList; | 
|---|
| 292 |  | 
|---|
| 293 |     typedef std::map<String, bool> UnaryOptionList; | 
|---|
| 294 |     typedef std::map<String, String> BinaryOptionList; | 
|---|
| 295 |  | 
|---|
| 296 |         /// Name / value parameter pair (first = name, second = value) | 
|---|
| 297 |         typedef std::map<String, String> NameValuePairList; | 
|---|
| 298 |  | 
|---|
| 299 |     /// Alias / Texture name pair (first = alias, second = texture name) | 
|---|
| 300 |     typedef std::map<String, String> AliasTextureNamePairList; | 
|---|
| 301 |  | 
|---|
| 302 |         template< typename T > struct TRect | 
|---|
| 303 |         { | 
|---|
| 304 |           T left, top, right, bottom; | 
|---|
| 305 |           TRect() {} | 
|---|
| 306 |           TRect( T const & l, T const & t, T const & r, T const & b ) | 
|---|
| 307 |             : left( l ), top( t ), right( r ), bottom( b ) | 
|---|
| 308 |           { | 
|---|
| 309 |           } | 
|---|
| 310 |           TRect( TRect const & o ) | 
|---|
| 311 |             : left( o.left ), top( o.top ), right( o.right ), bottom( o.bottom ) | 
|---|
| 312 |           { | 
|---|
| 313 |           } | 
|---|
| 314 |           TRect & operator=( TRect const & o ) | 
|---|
| 315 |           { | 
|---|
| 316 |             left = o.left; | 
|---|
| 317 |             top = o.top; | 
|---|
| 318 |             right = o.right; | 
|---|
| 319 |             bottom = o.bottom; | 
|---|
| 320 |             return *this; | 
|---|
| 321 |           } | 
|---|
| 322 |           T width() const | 
|---|
| 323 |           { | 
|---|
| 324 |             return right - left; | 
|---|
| 325 |           } | 
|---|
| 326 |           T height() const | 
|---|
| 327 |           { | 
|---|
| 328 |             return bottom - top; | 
|---|
| 329 |           } | 
|---|
| 330 |         }; | 
|---|
| 331 |  | 
|---|
| 332 |         /** Structure used to define a rectangle in a 2-D floating point space. | 
|---|
| 333 |         */ | 
|---|
| 334 |         typedef TRect<float> FloatRect; | 
|---|
| 335 |  | 
|---|
| 336 |         /** Structure used to define a rectangle in a 2-D integer space. | 
|---|
| 337 |         */ | 
|---|
| 338 |         typedef TRect< long > Rect; | 
|---|
| 339 |  | 
|---|
| 340 |         /** Structure used to define a box in a 3-D integer space. | 
|---|
| 341 |                 Note that the left, top, and front edges are included but the right,  | 
|---|
| 342 |                 bottom and back ones are not. | 
|---|
| 343 |          */ | 
|---|
| 344 |         struct Box | 
|---|
| 345 |         { | 
|---|
| 346 |             size_t left, top, right, bottom, front, back; | 
|---|
| 347 |                         /// Parameterless constructor for setting the members manually | 
|---|
| 348 |             Box() | 
|---|
| 349 |             { | 
|---|
| 350 |             } | 
|---|
| 351 |             /** Define a box from left, top, right and bottom coordinates | 
|---|
| 352 |                 This box will have depth one (front=0 and back=1). | 
|---|
| 353 |                 @param  l       x value of left edge | 
|---|
| 354 |                 @param  t       y value of top edge | 
|---|
| 355 |                 @param  r       x value of right edge | 
|---|
| 356 |                 @param  b       y value of bottom edge | 
|---|
| 357 |                 @note Note that the left, top, and front edges are included  | 
|---|
| 358 |                                 but the right, bottom and back ones are not. | 
|---|
| 359 |             */ | 
|---|
| 360 |             Box( size_t l, size_t t, size_t r, size_t b ): | 
|---|
| 361 |                 left(l), | 
|---|
| 362 |                 top(t),    | 
|---|
| 363 |                 right(r), | 
|---|
| 364 |                 bottom(b), | 
|---|
| 365 |                 front(0), | 
|---|
| 366 |                 back(1) | 
|---|
| 367 |             { | 
|---|
| 368 |                         assert(right >= left && bottom >= top && back >= front); | 
|---|
| 369 |             } | 
|---|
| 370 |             /** Define a box from left, top, front, right, bottom and back | 
|---|
| 371 |                 coordinates. | 
|---|
| 372 |                 @param  l       x value of left edge | 
|---|
| 373 |                 @param  t       y value of top edge | 
|---|
| 374 |                 @param  ff  z value of front edge | 
|---|
| 375 |                 @param  r       x value of right edge | 
|---|
| 376 |                 @param  b       y value of bottom edge | 
|---|
| 377 |                 @param  bb  z value of back edge | 
|---|
| 378 |                 @note Note that the left, top, and front edges are included  | 
|---|
| 379 |                                 but the right, bottom and back ones are not. | 
|---|
| 380 |             */ | 
|---|
| 381 |             Box( size_t l, size_t t, size_t ff, size_t r, size_t b, size_t bb ): | 
|---|
| 382 |                 left(l), | 
|---|
| 383 |                 top(t),    | 
|---|
| 384 |                 right(r), | 
|---|
| 385 |                 bottom(b), | 
|---|
| 386 |                 front(ff), | 
|---|
| 387 |                 back(bb) | 
|---|
| 388 |             { | 
|---|
| 389 |                         assert(right >= left && bottom >= top && back >= front); | 
|---|
| 390 |             } | 
|---|
| 391 |              | 
|---|
| 392 |             /// Return true if the other box is a part of this one | 
|---|
| 393 |             bool contains(const Box &def) const | 
|---|
| 394 |             { | 
|---|
| 395 |                 return (def.left >= left && def.top >= top && def.front >= front && | 
|---|
| 396 |                                         def.right <= right && def.bottom <= bottom && def.back <= back); | 
|---|
| 397 |             } | 
|---|
| 398 |              | 
|---|
| 399 |             /// Get the width of this box | 
|---|
| 400 |             size_t getWidth() const { return right-left; } | 
|---|
| 401 |             /// Get the height of this box | 
|---|
| 402 |             size_t getHeight() const { return bottom-top; } | 
|---|
| 403 |             /// Get the depth of this box | 
|---|
| 404 |             size_t getDepth() const { return back-front; } | 
|---|
| 405 |         }; | 
|---|
| 406 |  | 
|---|
| 407 |      | 
|---|
| 408 |          | 
|---|
| 409 |         /** Locate command-line options of the unary form '-blah' and of the | 
|---|
| 410 |         binary form '-blah foo', passing back the index of the next non-option. | 
|---|
| 411 |     @param numargs, argv The standard parameters passed to the main method | 
|---|
| 412 |     @param unaryOptList Map of unary options (ie those that do not require a parameter). | 
|---|
| 413 |         Should be pre-populated with, for example '-e' in the key and false in the  | 
|---|
| 414 |         value. Options which are found will be set to true on return. | 
|---|
| 415 |     @param binOptList Map of binnary options (ie those that require a parameter | 
|---|
| 416 |         e.g. '-e afile.txt'). | 
|---|
| 417 |         Should be pre-populated with, for example '-e' and the default setting.  | 
|---|
| 418 |         Options which are found will have the value updated. | 
|---|
| 419 |     */ | 
|---|
| 420 |     int _OgreExport findCommandLineOpts(int numargs, char** argv, UnaryOptionList& unaryOptList,  | 
|---|
| 421 |         BinaryOptionList& binOptList); | 
|---|
| 422 |  | 
|---|
| 423 | } | 
|---|
| 424 |  | 
|---|
| 425 | #endif | 
|---|