1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: gfx_SceneContext.h 4 5 Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain proprietary 8 information of Nintendo and/or its licensed developers and are protected by 9 national and international copyright laws. They may not be disclosed to third 10 parties or copied or duplicated in any form, in whole or in part, without the 11 prior written consent of Nintendo. 12 13 The content herein is highly confidential and should be handled accordingly. 14 15 $Revision: 31311 $ 16 *---------------------------------------------------------------------------*/ 17 18 #ifndef NW_GFX_SCENECONTEXT_H_ 19 #define NW_GFX_SCENECONTEXT_H_ 20 21 #include <nw/gfx/gfx_GfxObject.h> 22 23 namespace nw 24 { 25 namespace gfx 26 { 27 28 class SceneNode; 29 class UserRenderNode; 30 class Model; 31 class SkeletalModel; 32 class Light; 33 class FragmentLight; 34 class VertexLight; 35 class HemiSphereLight; 36 class AmbientLight; 37 class Camera; 38 class Fog; 39 class ParticleSet; 40 class ParticleEmitter; 41 class ParticleModel; 42 class LightSet; 43 44 //! @brief シーンノードの Array の定義です。 45 typedef ut::MoveArray<SceneNode*> SceneNodeArray; 46 47 //! @brief ユーザ定義の描画ノードの Array の定義です。 48 typedef ut::MoveArray<UserRenderNode*> UserRenderNodeArray; 49 50 //! @brief モデルの Array の定義です。 51 typedef ut::MoveArray<Model*> ModelArray; 52 53 //! @brief スケルタルモデルの Array の定義です。 54 typedef ut::MoveArray<SkeletalModel*> SkeletalModelArray; 55 56 //! @brief ライトの Array の定義です。 57 typedef ut::MoveArray<Light*> LightArray; 58 59 //! @brief フラグメントライトの Array の定義です。 60 typedef ut::MoveArray<FragmentLight*> FragmentLightArray; 61 62 //! @brief 頂点ライトの Array の定義です。 63 typedef ut::MoveArray<VertexLight*> VertexLightArray; 64 65 //! @brief 半球ライトの Array の定義です。 66 typedef ut::MoveArray<HemiSphereLight*> HemiSphereLightArray; 67 68 //! @brief アンビエントライトの Array の定義です。 69 typedef ut::MoveArray<AmbientLight*> AmbientLightArray; 70 71 //! @brief カメラの Array の定義です。 72 typedef ut::MoveArray<Camera*> CameraArray; 73 74 //! @brief フォグの Array の定義です。 75 typedef ut::MoveArray<Fog*> FogArray; 76 77 //! @brief パーティクルセットの Array の定義です。 78 typedef ut::MoveArray<ParticleSet*> ParticleSetArray; 79 80 //! @brief パーティクルエミッタの Array の定義です。 81 typedef ut::MoveArray<ParticleEmitter*> ParticleEmitterArray; 82 83 //! @brief パーティクルモデルの Array の定義です。 84 typedef ut::MoveArray<ParticleModel*> ParticleModelArray; 85 86 //! @brief ライトセットの配列です。 87 typedef ut::MoveArray<LightSet*> LightSetArray; 88 89 //! @brief アニメーションするノードの Array の定義です。 90 typedef ut::MoveArray<SceneNode*> AnimatableNodeArray; 91 92 //--------------------------------------------------------------------------- 93 //! @brief シーン解析時の内容を保持させるためのクラスです。 94 //--------------------------------------------------------------------------- 95 class SceneContext : public GfxObject 96 { 97 private: 98 NW_DISALLOW_COPY_AND_ASSIGN(SceneContext); 99 100 public: 101 102 // [非推奨] 互換性のために残してありますが、こちらの定義は用いないでください。 103 104 //! @details :private 105 typedef SceneNodeArray SceneNodeArray; 106 //! @details :private 107 typedef ModelArray ModelArray; 108 //! @details :private 109 typedef SkeletalModelArray SkeletalModelArray; 110 //! @details :private 111 typedef FragmentLightArray FragmentLightArray; 112 //! @details :private 113 typedef VertexLightArray VertexLightArray; 114 //! @details :private 115 typedef HemiSphereLightArray HemiSphereLightArray; 116 //! @details :private 117 typedef AmbientLightArray AmbientLightArray; 118 //! @details :private 119 typedef CameraArray CameraArray; 120 //! @details :private 121 typedef FogArray FogArray; 122 //! @details :private 123 typedef ParticleSetArray ParticleSetArray; 124 //! @details :private 125 typedef ParticleEmitterArray ParticleEmitterArray; 126 //! @details :private 127 typedef ParticleModelArray ParticleModelArray; 128 129 enum 130 { 131 DEFAULT_MAX_SCENE_NODES = 64, //!< シーンノードのデフォルト最大数です。 132 DEFAULT_MAX_MODELS = 64, //!< モデルのデフォルト最大数です。 133 DEFAULT_MAX_SKELETAL_MODELS = 64, //!< スケルタルモデルのデフォルト最大数です。 134 DEFAULT_MAX_CAMERAS = 4, //!< カメラのデフォルト最大数です。 135 DEFAULT_MAX_LIGHTS = 8, //!< フラグメントライトのデフォルト最大数です。 136 DEFAULT_MAX_FRAGMENT_LIGHTS = 8, //!< フラグメントライトのデフォルト最大数です。 137 DEFAULT_MAX_VERTEX_LIGHTS = 8, //!< 頂点ライトのデフォルト最大数です。 138 DEFAULT_MAX_HEMISPHERE_LIGHTS = 4, //!< 半球ライトのデフォルト最大数です。 139 DEFAULT_MAX_AMBIENT_LIGHTS = 4, //!< アンビエントライトのデフォルト最大数です。 140 DEFAULT_MAX_FOGS = 4, //!< フォグのデフォルト最大数です。 141 DEFAULT_MAX_PARTICLESETS = 64, //!< パーティクルセットのデフォルト最大数です。 142 DEFAULT_MAX_PARTICLEEMITTERS = 64, //!< パーティクルエミッタのデフォルト最大数です。 143 DEFAULT_MAX_PARTICLEMODELS = 64, //!< パーティクルモデルのデフォルト最大数です。 144 DEFAULT_MAX_ANIMATABLE_NODES = 64, //!< アニメーションを行うシーンノードのデフォルト最大数です。 145 DEFAULT_MAX_USER_RENDER_NODES = 0 //!< ユーザ定義の描画ノードのデフォルト最大数です。 146 }; 147 148 //---------------------------------------- 149 //! @name 作成 150 //@{ 151 152 //! @brief シーンコンテキストクラスを構築するためのクラスです。 153 //! 154 //! IsFixedSizeMemory の初期値は true です。false に変更すると、各種最大数の設定は無視されます。 155 class Builder 156 { 157 public: Builder()158 Builder() 159 : m_IsFixedSizeMemory(true), 160 m_MaxSceneNodes(DEFAULT_MAX_SCENE_NODES), 161 m_MaxUserRenderNodes(DEFAULT_MAX_USER_RENDER_NODES), 162 m_MaxModels(DEFAULT_MAX_MODELS), 163 m_MaxSkeletalModels(DEFAULT_MAX_SKELETAL_MODELS), 164 m_MaxCameras(DEFAULT_MAX_CAMERAS), 165 m_MaxLights(DEFAULT_MAX_LIGHTS), 166 m_MaxFragmentLights(DEFAULT_MAX_FRAGMENT_LIGHTS), 167 m_MaxVertexLights(DEFAULT_MAX_VERTEX_LIGHTS), 168 m_MaxHemiSphereLights(DEFAULT_MAX_HEMISPHERE_LIGHTS), 169 m_MaxAmbientLights(DEFAULT_MAX_AMBIENT_LIGHTS), 170 m_MaxFogs(DEFAULT_MAX_FOGS), 171 m_MaxParticleSets(DEFAULT_MAX_PARTICLESETS), 172 m_MaxParticleEmitters(DEFAULT_MAX_PARTICLEEMITTERS), 173 m_MaxParticleModels(DEFAULT_MAX_PARTICLEMODELS), 174 m_MaxAnimatableNodes(DEFAULT_MAX_ANIMATABLE_NODES) 175 {} 176 177 //! @brief 生成時以外にもメモリを確保するかどうかのフラグを設定します。 178 //! 179 //! true を指定すると、生成時のみ固定サイズのメモリ確保を行います。 180 //! 181 //! false を指定すると、生成時以外にも必要に応じて動的にメモリ確保が行われます。 IsFixedSizeMemory(bool isFixedSizeMemory)182 Builder& IsFixedSizeMemory(bool isFixedSizeMemory) 183 { 184 m_IsFixedSizeMemory = isFixedSizeMemory; 185 return *this; 186 } 187 188 //! @brief シーンノードの最大数を設定します。 MaxSceneNodes(s32 max)189 Builder& MaxSceneNodes(s32 max) { m_MaxSceneNodes = max; return *this; } 190 191 //! @brief ユーザ定義の描画ノードの最大数を設定します。 MaxUserRenderNodes(s32 max)192 Builder& MaxUserRenderNodes(s32 max) { m_MaxUserRenderNodes = max; return *this; } 193 194 //! @brief モデルの最大数を設定します。 MaxModels(s32 max)195 Builder& MaxModels(s32 max) { m_MaxModels = max; return *this; } 196 197 //! @brief スケルタルモデルの最大数を設定します。 MaxSkeletalModels(s32 max)198 Builder& MaxSkeletalModels(s32 max) { m_MaxSkeletalModels = max; return *this; } 199 200 //! @brief カメラの最大数を設定します。 MaxCameras(s32 max)201 Builder& MaxCameras(s32 max) { m_MaxCameras = max; return *this; } 202 203 //! @brief ライトの最大数を設定します。 MaxLights(s32 max)204 Builder& MaxLights(s32 max) { m_MaxLights = max; return *this; } 205 206 //! @brief フラグメントライトの最大数を設定します。 MaxFragmentLights(s32 max)207 Builder& MaxFragmentLights(s32 max) { m_MaxFragmentLights = max; return *this; } 208 209 //! @brief 頂点ライトの最大数を設定します。 MaxVertexLights(s32 max)210 Builder& MaxVertexLights(s32 max) { m_MaxVertexLights = max; return *this; } 211 212 //! @brief 半球ライトの最大数を設定します。 MaxHemiSphereLights(s32 max)213 Builder& MaxHemiSphereLights(s32 max) { m_MaxHemiSphereLights = max; return *this; } 214 215 //! @brief アンビエントライトの最大数を設定します。 MaxAmbientLights(s32 max)216 Builder& MaxAmbientLights(s32 max) { m_MaxAmbientLights = max; return *this; } 217 218 //! @brief フォグの最大数を設定します。 MaxFogs(s32 max)219 Builder& MaxFogs(s32 max) { m_MaxFogs = max; return *this; } 220 221 //! @brief パーティクルセットの最大数を設定します。 MaxParticleSets(s32 max)222 Builder& MaxParticleSets(s32 max) { m_MaxParticleSets = max; return *this; } 223 224 //! @brief パーティクルエミッタの最大数を設定します。 MaxParticleEmitters(s32 max)225 Builder& MaxParticleEmitters(s32 max) { m_MaxParticleEmitters = max; return *this; } 226 227 //! @brief パーティクルモデルの最大数を設定します。 MaxParticleModels(s32 max)228 Builder& MaxParticleModels(s32 max) { m_MaxParticleModels = max; return *this; } 229 230 //! @brief アニメーションを行うシーンノードの最大数を設定します。 MaxAnimatableNodes(s32 max)231 Builder& MaxAnimatableNodes(s32 max) { m_MaxAnimatableNodes = max; return *this; } 232 233 //! @brief シーンコンテキストを生成します。 234 SceneContext* Create(os::IAllocator* allocator); 235 236 private: 237 bool m_IsFixedSizeMemory; 238 s32 m_MaxSceneNodes; 239 s32 m_MaxUserRenderNodes; 240 s32 m_MaxModels; 241 s32 m_MaxSkeletalModels; 242 s32 m_MaxCameras; 243 s32 m_MaxLights; 244 s32 m_MaxFragmentLights; 245 s32 m_MaxVertexLights; 246 s32 m_MaxHemiSphereLights; 247 s32 m_MaxAmbientLights; 248 s32 m_MaxFogs; 249 s32 m_MaxParticleSets; 250 s32 m_MaxParticleEmitters; 251 s32 m_MaxParticleModels; 252 s32 m_MaxAnimatableNodes; 253 }; 254 255 //@} 256 257 //---------------------------------------- 258 //! @name 更新 259 //@{ 260 261 //! シーン解析結果をクリアします。 Clear()262 void Clear() 263 { 264 m_SceneNodes.clear(); 265 m_UserRenderNodes.clear(); 266 m_Models.clear(); 267 m_SkeletalModels.clear(); 268 m_Lights.clear(); 269 m_FragmentLights.clear(); 270 m_VertexLights.clear(); 271 m_HemiSphereLights.clear(); 272 m_AmbientLights.clear(); 273 m_Cameras.clear(); 274 m_Fogs.clear(); 275 m_ParticleSets.clear(); 276 m_ParticleEmitters.clear(); 277 m_ParticleModels.clear(); 278 m_AnimatableNodes.clear(); 279 } 280 281 //@} 282 283 //---------------------------------------- 284 //! @name 取得/設定 285 //@{ 286 287 //! @brief 直列化シーンノードを追加します。 288 //! 289 //! @param[in] node 追加するシーンノードです。 290 //! PushSceneNode(SceneNode * node)291 void PushSceneNode(SceneNode* node) 292 { 293 bool isPushed = m_SceneNodes.push_back(node); 294 NW_ASSERT(isPushed); 295 } 296 297 //! @brief 直列化シーンノードを追加します。 298 //! 299 //! @param[in] node 追加するシーンノードです。 300 //! 301 //! @return 追加に成功すると true が返ります。 302 //! TryPushSceneNode(SceneNode * node)303 bool TryPushSceneNode(SceneNode* node) 304 { 305 bool isPushed = m_SceneNodes.push_back(node); 306 return isPushed; 307 } 308 309 //! @brief 直列化したシーンノードの先頭を指すイテレータを取得します。 310 //! 311 //! @return シーンノードの先頭を指すイテレータです。 312 //! GetSceneNodesBegin()313 SceneNodeArray::iterator GetSceneNodesBegin() 314 { 315 return m_SceneNodes.begin(); 316 } 317 318 //! @brief 直列化したシーンノードの先頭を指すイテレータを取得します。 319 //! 320 //! @return シーンノードの先頭を指すイテレータです。 321 //! GetSceneNodesBegin()322 SceneNodeArray::const_iterator GetSceneNodesBegin() const 323 { 324 return m_SceneNodes.begin(); 325 } 326 327 //! @brief 直列化したシーンノードの終端を指すイテレータを取得します。 328 //! 329 //! @return シーンノードの終端を指すイテレータです。 330 //! GetSceneNodesEnd()331 SceneNodeArray::iterator GetSceneNodesEnd() 332 { 333 return m_SceneNodes.end(); 334 } 335 336 //! @brief 直列化したシーンノードの終端を指すイテレータを取得します。 337 //! 338 //! @return シーンノードの終端を指すイテレータです。 339 //! GetSceneNodesEnd()340 SceneNodeArray::const_iterator GetSceneNodesEnd() const 341 { 342 return m_SceneNodes.end(); 343 } 344 345 //! @brief 直列化したシーンノードの先頭と終端を指すイテレータを取得します。 346 //! 347 //! @return シーンノードの先頭と終端を指すイテレータです。 348 //! GetSceneNodes()349 std::pair<SceneNodeArray::iterator, SceneNodeArray::iterator> GetSceneNodes() 350 { 351 return std::make_pair(m_SceneNodes.begin(), m_SceneNodes.end()); 352 } 353 354 //! @brief 直列化したシーンノードの先頭と終端を指すイテレータを取得します。 355 //! 356 //! @return シーンノードの先頭と終端を指すイテレータです。 357 //! GetSceneNodes()358 std::pair<SceneNodeArray::const_iterator, SceneNodeArray::const_iterator> GetSceneNodes() const 359 { 360 return std::make_pair(m_SceneNodes.begin(), m_SceneNodes.end()); 361 } 362 363 //@} 364 365 //---------------------------------------- 366 //! @name UserRenderNode 関連 367 //@{ 368 369 //! @brief 直列化ユーザ定義の描画ノードを追加します。 370 //! 371 //! @param[in] node 追加するユーザ定義の描画ノードです。 372 //! PushUserRenderNode(UserRenderNode * node)373 void PushUserRenderNode(UserRenderNode* node) 374 { 375 bool isPushed = m_UserRenderNodes.push_back(node); 376 NW_ASSERT(isPushed); 377 } 378 379 //! @brief 直列化ユーザ定義の描画ノードを追加します。 380 //! 381 //! @param[in] node 追加するユーザ定義の描画ノードです。 382 //! 383 //! @return 追加に成功すると true が返ります。 384 //! TryPushUserRenderNode(UserRenderNode * node)385 bool TryPushUserRenderNode(UserRenderNode* node) 386 { 387 bool isPushed = m_UserRenderNodes.push_back(node); 388 return isPushed; 389 } 390 391 //! @brief 直列化したユーザ定義の描画ノードの先頭を指すイテレータを取得します。 392 //! 393 //! @return UserRenderNode の先頭を指すイテレータです。 394 //! GetUserRenderNodesBegin()395 UserRenderNodeArray::iterator GetUserRenderNodesBegin() 396 { 397 return m_UserRenderNodes.begin(); 398 } 399 400 //! @brief 直列化したユーザ定義の描画ノードの先頭を指すイテレータを取得します。 401 //! 402 //! @return ユーザ定義の描画ノードの先頭を指すイテレータです。 403 //! GetUserRenderNodesBegin()404 UserRenderNodeArray::const_iterator GetUserRenderNodesBegin() const 405 { 406 return m_UserRenderNodes.begin(); 407 } 408 409 //! @brief 直列化したユーザ定義の描画ノードの終端を指すイテレータを取得します。 410 //! 411 //! @return ユーザ定義の描画ノードの終端を指すイテレータです。 412 //! GetUserRenderNodesEnd()413 UserRenderNodeArray::iterator GetUserRenderNodesEnd() 414 { 415 return m_UserRenderNodes.end(); 416 } 417 418 //! @brief 直列化したユーザ定義の描画ノードの終端を指すイテレータを取得します。 419 //! 420 //! @return ユーザ定義の描画ノードの終端を指すイテレータです。 421 //! GetUserRenderNodesEnd()422 UserRenderNodeArray::const_iterator GetUserRenderNodesEnd() const 423 { 424 return m_UserRenderNodes.end(); 425 } 426 427 //! @brief 直列化したユーザ定義の描画ノードの先頭と終端を指すイテレータを取得します。 428 //! 429 //! @return ユーザ定義の描画ノードの先頭と終端を指すイテレータです。 430 //! GetUserRenderNodes()431 std::pair<UserRenderNodeArray::iterator, UserRenderNodeArray::iterator> GetUserRenderNodes() 432 { 433 return std::make_pair(m_UserRenderNodes.begin(), m_UserRenderNodes.end()); 434 } 435 436 //! @brief 直列化したユーザ定義の描画ノードの先頭と終端を指すイテレータを取得します。 437 //! 438 //! @return ユーザ定義の描画ノードの先頭と終端を指すイテレータです。 439 //! GetUserRenderNodes()440 std::pair<UserRenderNodeArray::const_iterator, UserRenderNodeArray::const_iterator> GetUserRenderNodes() const 441 { 442 return std::make_pair(m_UserRenderNodes.begin(), m_UserRenderNodes.end()); 443 } 444 445 //@} 446 447 //---------------------------------------- 448 //! @name モデル関連 449 //@{ 450 451 //! @brief モデルを追加します。 452 //! 「モデル」には、派生クラス(SkeletalModelなど)も含まれます。 453 //! 454 //! @param[in] model モデルです。 455 //! PushModel(Model * model)456 void PushModel(Model* model) 457 { 458 bool isPushed = m_Models.push_back(model); 459 NW_ASSERT(isPushed); 460 } 461 462 //! @brief モデルを追加します。 463 //! 「モデル」には、派生クラス(SkeletalModelなど)も含まれます。 464 //! 465 //! @param[in] model モデルです。 466 //! 467 //! @return 追加に成功すると true が返ります。 468 //! TryPushModel(Model * model)469 bool TryPushModel(Model* model) 470 { 471 bool isPushed = m_Models.push_back(model); 472 return isPushed; 473 } 474 475 //! @brief モデルの先頭を指すイテレータを取得します。 476 //! 477 //! @return モデルの先頭を指すイテレータです。 478 //! GetModelsBegin()479 ModelArray::iterator GetModelsBegin() 480 { 481 return m_Models.begin(); 482 } 483 484 //! @brief モデルの先頭を指すイテレータを取得します。 485 //! 486 //! @return モデルの先頭を指すイテレータです。 487 //! GetModelsBegin()488 ModelArray::const_iterator GetModelsBegin() const 489 { 490 return m_Models.begin(); 491 } 492 493 //! @brief モデルの終端を指すイテレータを取得します。 494 //! 495 //! @return モデルの終端を指すイテレータです。 496 //! GetModelsEnd()497 ModelArray::iterator GetModelsEnd() 498 { 499 return m_Models.end(); 500 } 501 502 //! @brief モデルの終端を指すイテレータを取得します。 503 //! 504 //! @return モデルの終端を指すイテレータです。 505 //! GetModelsEnd()506 ModelArray::const_iterator GetModelsEnd() const 507 { 508 return m_Models.end(); 509 } 510 511 //! @brief スケルタルモデルを追加します。 512 //! 513 //! @param[in] skeletalModel スケルタルモデルです。 514 //! PushSkeletalModel(SkeletalModel * skeletalModel)515 void PushSkeletalModel(SkeletalModel* skeletalModel) 516 { 517 bool isPushed = m_SkeletalModels.push_back(skeletalModel); 518 NW_ASSERT(isPushed); 519 } 520 521 //! @brief スケルタルモデルを追加します。 522 //! 523 //! @param[in] skeletalModel スケルタルモデルです。 524 //! 525 //! @return 追加に成功すると true が返ります。 526 //! TryPushSkeletalModel(SkeletalModel * skeletalModel)527 bool TryPushSkeletalModel(SkeletalModel* skeletalModel) 528 { 529 bool isPushed = m_SkeletalModels.push_back(skeletalModel); 530 return isPushed; 531 } 532 533 //! @brief スケルタルモデルの先頭を指すイテレータを取得します。 534 //! 535 //! @return スケルタルモデルの先頭を指すイテレータです。 536 //! GetSkeletalModelsBegin()537 SkeletalModelArray::iterator GetSkeletalModelsBegin() 538 { 539 return m_SkeletalModels.begin(); 540 } 541 542 //! @brief スケルタルモデルの先頭を指すイテレータを取得します。 543 //! 544 //! @return スケルタルモデルの先頭を指すイテレータです。 545 //! GetSkeletalModelsBegin()546 SkeletalModelArray::const_iterator GetSkeletalModelsBegin() const 547 { 548 return m_SkeletalModels.begin(); 549 } 550 551 //! @brief スケルタルモデルの終端を指すイテレータを取得します。 552 //! 553 //! @return スケルタルモデルの終端を指すイテレータです。 554 //! GetSkeletalModelsEnd()555 SkeletalModelArray::iterator GetSkeletalModelsEnd() 556 { 557 return m_SkeletalModels.end(); 558 } 559 560 //! @brief スケルタルモデルの終端を指すイテレータを取得します。 561 //! 562 //! @return スケルタルモデルの終端を指すイテレータです。 563 //! GetSkeletalModelsEnd()564 SkeletalModelArray::const_iterator GetSkeletalModelsEnd() const 565 { 566 return m_SkeletalModels.end(); 567 } 568 569 //@} 570 571 //---------------------------------------- 572 //! @name ライト関連 573 //@{ 574 575 //! @brief ライトを追加します。 576 //! 「ライト」には、派生クラス(FragmentLightなど)も含まれます。 577 //! 578 //! @param[in] light ライトです。 579 //! PushLight(Light * light)580 void PushLight(Light* light) 581 { 582 bool isPushed = m_Lights.push_back(light); 583 NW_ASSERT(isPushed); 584 } 585 586 //! @brief ライトを追加します。 587 //! 「ライト」には、派生クラス(FragmentLightなど)も含まれます。 588 //! 589 //! @param[in] light ライトです。 590 //! 591 //! @return 追加に成功すると true が返ります。 592 //! TryPushLight(Light * light)593 bool TryPushLight(Light* light) 594 { 595 bool isPushed = m_Lights.push_back(light); 596 return isPushed; 597 } 598 599 //! @brief ライトの先頭を指すイテレータを取得します。 600 //! 601 //! @return ライトの先頭を指すイテレータです。 602 //! GetLightsBegin()603 LightArray::iterator GetLightsBegin() 604 { 605 return m_Lights.begin(); 606 } 607 608 //! @brief ライトの先頭を指すイテレータを取得します。 609 //! 610 //! @return ライトの先頭を指すイテレータです。 611 //! GetLightsBegin()612 LightArray::const_iterator GetLightsBegin() const 613 { 614 return m_Lights.begin(); 615 } 616 617 //! @brief ライトの終端を指すイテレータを取得します。 618 //! 619 //! @return ライトの終端を指すイテレータです。 620 //! GetLightsEnd()621 LightArray::iterator GetLightsEnd() 622 { 623 return m_Lights.end(); 624 } 625 626 //! @brief ライトの終端を指すイテレータを取得します。 627 //! 628 //! @return ライトの終端を指すイテレータです。 629 //! GetLightsEnd()630 LightArray::const_iterator GetLightsEnd() const 631 { 632 return m_Lights.end(); 633 } 634 635 //! @brief フラグメントライトを追加します。 636 //! 637 //! @param[in] light フラグメントライトです。 638 //! PushFragmentLight(FragmentLight * light)639 void PushFragmentLight(FragmentLight* light) 640 { 641 bool isPushed = m_FragmentLights.push_back(light); 642 NW_ASSERT(isPushed); 643 } 644 645 //! @brief フラグメントライトを追加します。 646 //! 647 //! @param[in] light フラグメントライトです。 648 //! 649 //! @return 追加に成功すると true が返ります。 650 //! TryPushFragmentLight(FragmentLight * light)651 bool TryPushFragmentLight(FragmentLight* light) 652 { 653 bool isPushed = m_FragmentLights.push_back(light); 654 return isPushed; 655 } 656 657 //! @brief フラグメントライトの先頭を指すイテレータを取得します。 658 //! 659 //! @return フラグメントライトの先頭を指すイテレータです。 660 //! GetFragmentLightsBegin()661 FragmentLightArray::iterator GetFragmentLightsBegin() 662 { 663 return m_FragmentLights.begin(); 664 } 665 666 //! @brief フラグメントライトの先頭を指すイテレータを取得します。 667 //! 668 //! @return フラグメントライトの先頭を指すイテレータです。 669 //! GetFragmentLightsBegin()670 FragmentLightArray::const_iterator GetFragmentLightsBegin() const 671 { 672 return m_FragmentLights.begin(); 673 } 674 675 //! @brief フラグメントライトの終端を指すイテレータを取得します。 676 //! 677 //! @return フラグメントライトの終端を指すイテレータです。 678 //! GetFragmentLightsEnd()679 FragmentLightArray::iterator GetFragmentLightsEnd() 680 { 681 return m_FragmentLights.end(); 682 } 683 684 //! @brief フラグメントライトの終端を指すイテレータを取得します。 685 //! 686 //! @return フラグメントライトの終端を指すイテレータです。 687 //! GetFragmentLightsEnd()688 FragmentLightArray::const_iterator GetFragmentLightsEnd() const 689 { 690 return m_FragmentLights.end(); 691 } 692 693 //! @brief 頂点ライトを追加します。 694 //! 695 //! @param[in] light 頂点ライトです。 696 //! PushVertexLight(VertexLight * light)697 void PushVertexLight(VertexLight* light) 698 { 699 bool isPushed = m_VertexLights.push_back(light); 700 NW_ASSERT(isPushed); 701 } 702 703 //! @brief 頂点ライトを追加します。 704 //! 705 //! @param[in] light 頂点ライトです。 706 //! 707 //! @return 追加に成功すると true が返ります。 708 //! TryPushVertexLight(VertexLight * light)709 bool TryPushVertexLight(VertexLight* light) 710 { 711 bool isPushed = m_VertexLights.push_back(light); 712 return isPushed; 713 } 714 715 //! @brief 頂点ライトの先頭を指すイテレータを取得します。 716 //! 717 //! @return 頂点ライトの先頭を指すイテレータです。 718 //! GetVertexLightsBegin()719 VertexLightArray::iterator GetVertexLightsBegin() 720 { 721 return m_VertexLights.begin(); 722 } 723 724 //! @brief 頂点ライトの先頭を指すイテレータを取得します。 725 //! 726 //! @return 頂点ライトの先頭を指すイテレータです。 727 //! GetVertexLightsBegin()728 VertexLightArray::const_iterator GetVertexLightsBegin() const 729 { 730 return m_VertexLights.begin(); 731 } 732 733 //! @brief 頂点ライトの終端を指すイテレータを取得します。 734 //! 735 //! @return 頂点ライトの終端を指すイテレータです。 736 //! GetVertexLightsEnd()737 VertexLightArray::iterator GetVertexLightsEnd() 738 { 739 return m_VertexLights.end(); 740 } 741 742 //! @brief 頂点ライトの終端を指すイテレータを取得します。 743 //! 744 //! @return 頂点ライトの終端を指すイテレータです。 745 //! GetVertexLightsEnd()746 VertexLightArray::const_iterator GetVertexLightsEnd() const 747 { 748 return m_VertexLights.end(); 749 } 750 751 //! @brief 半球ライトを追加します。 752 //! 753 //! @param[in] light 半球ライトです。 754 //! PushHemiSphereLight(HemiSphereLight * light)755 void PushHemiSphereLight(HemiSphereLight* light) 756 { 757 bool isPushed = m_HemiSphereLights.push_back(light); 758 NW_ASSERT(isPushed); 759 } 760 761 //! @brief 半球ライトを追加します。 762 //! 763 //! @param[in] light 半球ライトです。 764 //! 765 //! @return 追加に成功すると true が返ります。 766 //! TryPushHemiSphereLight(HemiSphereLight * light)767 bool TryPushHemiSphereLight(HemiSphereLight* light) 768 { 769 bool isPushed = m_HemiSphereLights.push_back(light); 770 return isPushed; 771 } 772 773 //! @brief 半球ライトの先頭を指すイテレータを取得します。 774 //! 775 //! @return 半球ライトの先頭を指すイテレータです。 776 //! GetHemiSphereLightsBegin()777 HemiSphereLightArray::iterator GetHemiSphereLightsBegin() 778 { 779 return m_HemiSphereLights.begin(); 780 } 781 782 //! @brief 半球ライトの先頭を指すイテレータを取得します。 783 //! 784 //! @return 半球ライトの先頭を指すイテレータです。 785 //! GetHemiSphereLightsBegin()786 HemiSphereLightArray::const_iterator GetHemiSphereLightsBegin() const 787 { 788 return m_HemiSphereLights.begin(); 789 } 790 791 //! @brief 半球ライトの終端を指すイテレータを取得します。 792 //! 793 //! @return 半球ライトの終端を指すイテレータです。 794 //! GetHemiSphereLightsEnd()795 HemiSphereLightArray::iterator GetHemiSphereLightsEnd() 796 { 797 return m_HemiSphereLights.end(); 798 } 799 800 //! @brief 半球ライトの終端を指すイテレータを取得します。 801 //! 802 //! @return 半球ライトの終端を指すイテレータです。 803 //! GetHemiSphereLightsEnd()804 HemiSphereLightArray::const_iterator GetHemiSphereLightsEnd() const 805 { 806 return m_HemiSphereLights.end(); 807 } 808 809 //! @brief アンビエントライトを追加します。 810 //! 811 //! @param[in] light アンビエントライトです。 812 //! PushAmbientLight(AmbientLight * light)813 void PushAmbientLight(AmbientLight* light) 814 { 815 bool isPushed = m_AmbientLights.push_back(light); 816 NW_ASSERT(isPushed); 817 } 818 819 //! @brief アンビエントライトを追加します。 820 //! 821 //! @param[in] light アンビエントライトです。 822 //! 823 //! @return 追加に成功すると true が返ります。 824 //! TryPushAmbientLight(AmbientLight * light)825 bool TryPushAmbientLight(AmbientLight* light) 826 { 827 bool isPushed = m_AmbientLights.push_back(light); 828 return isPushed; 829 } 830 831 //! @brief アンビエントライトの先頭を指すイテレータを取得します。 832 //! 833 //! @return アンビエントライトの先頭を指すイテレータです。 834 //! GetAmbientLightsBegin()835 AmbientLightArray::iterator GetAmbientLightsBegin() 836 { 837 return m_AmbientLights.begin(); 838 } 839 840 //! @brief アンビエントライトの先頭を指すイテレータを取得します。 841 //! 842 //! @return アンビエントライトの先頭を指すイテレータです。 843 //! GetAmbientLightsBegin()844 AmbientLightArray::const_iterator GetAmbientLightsBegin() const 845 { 846 return m_AmbientLights.begin(); 847 } 848 849 //! @brief アンビエントライトの終端を指すイテレータを取得します。 850 //! 851 //! @return アンビエントライトの終端を指すイテレータです。 852 //! GetAmbientLightsEnd()853 AmbientLightArray::iterator GetAmbientLightsEnd() 854 { 855 return m_AmbientLights.end(); 856 } 857 858 //! @brief アンビエントライトの終端を指すイテレータを取得します。 859 //! 860 //! @return アンビエントライトの終端を指すイテレータです。 861 //! GetAmbientLightsEnd()862 AmbientLightArray::const_iterator GetAmbientLightsEnd() const 863 { 864 return m_AmbientLights.end(); 865 } 866 867 //@} 868 869 //---------------------------------------- 870 //! @name カメラ関連 871 //@{ 872 873 //! @brief カメラを追加します。 874 //! 875 //! @param[in] camera カメラです。 876 //! PushCamera(Camera * camera)877 void PushCamera(Camera* camera) 878 { 879 bool isPushed = m_Cameras.push_back(camera); 880 NW_ASSERT(isPushed); 881 } 882 883 //! @brief カメラを追加します。 884 //! 885 //! @param[in] camera カメラです。 886 //! 887 //! @return 追加に成功すると true が返ります。 888 //! TryPushCamera(Camera * camera)889 bool TryPushCamera(Camera* camera) 890 { 891 bool isPushed = m_Cameras.push_back(camera); 892 return isPushed; 893 } 894 895 //! @brief カメラの先頭を指すイテレータを取得します。 896 //! 897 //! @return カメラの先頭を指すイテレータです。 898 //! GetCameraBegin()899 CameraArray::iterator GetCameraBegin() 900 { 901 return m_Cameras.begin(); 902 } 903 904 //! @brief カメラの先頭を指すイテレータを取得します。 905 //! 906 //! @return カメラの先頭を指すイテレータです。 907 //! GetCameraBegin()908 CameraArray::const_iterator GetCameraBegin() const 909 { 910 return m_Cameras.begin(); 911 } 912 913 //! @brief カメラの終端を指すイテレータを取得します。 914 //! 915 //! @return カメラの終端を指すイテレータです。 916 //! GetCameraEnd()917 CameraArray::iterator GetCameraEnd() 918 { 919 return m_Cameras.end(); 920 } 921 922 //! @brief カメラの終端を指すイテレータを取得します。 923 //! 924 //! @return カメラの終端を指すイテレータです。 925 //! GetCameraEnd()926 CameraArray::const_iterator GetCameraEnd() const 927 { 928 return m_Cameras.end(); 929 } 930 931 //@} 932 933 //---------------------------------------- 934 //! @name フォグ関連 935 //@{ 936 937 //! @brief フォグを追加します。 938 //! 939 //! @param[in] fog フォグです。 940 //! PushFog(Fog * fog)941 void PushFog(Fog* fog) 942 { 943 bool isPushed = m_Fogs.push_back(fog); 944 NW_ASSERT(isPushed); 945 } 946 947 //! @brief フォグを追加します。 948 //! 949 //! @param[in] fog フォグです。 950 //! 951 //! @return 追加に成功すると true が返ります。 952 //! TryPushFog(Fog * fog)953 bool TryPushFog(Fog* fog) 954 { 955 bool isPushed = m_Fogs.push_back(fog); 956 return isPushed; 957 } 958 959 //! @brief フォグの先頭を指すイテレータを取得します。 960 //! 961 //! @return フォグの先頭を指すイテレータです。 962 //! GetFogBegin()963 FogArray::iterator GetFogBegin() 964 { 965 return m_Fogs.begin(); 966 } 967 968 //! @brief フォグの先頭を指すイテレータを取得します。 969 //! 970 //! @return フォグの先頭を指すイテレータです。 971 //! GetFogBegin()972 FogArray::const_iterator GetFogBegin() const 973 { 974 return m_Fogs.begin(); 975 } 976 977 //! @brief フォグの終端を指すイテレータを取得します。 978 //! 979 //! @return フォグの終端を指すイテレータです。 980 //! GetFogEnd()981 FogArray::iterator GetFogEnd() 982 { 983 return m_Fogs.end(); 984 } 985 986 //! @brief フォグの終端を指すイテレータを取得します。 987 //! 988 //! @return フォグの終端を指すイテレータです。 989 //! GetFogEnd()990 FogArray::const_iterator GetFogEnd() const 991 { 992 return m_Fogs.end(); 993 } 994 995 //@} 996 997 //---------------------------------------- 998 //! @name パーティクルセット関連 999 //@{ 1000 1001 //! @brief パーティクルセットを追加します。 1002 //! 1003 //! @param[in] particleSet パーティクルセットです。 1004 //! PushParticleSet(ParticleSet * particleSet)1005 void PushParticleSet(ParticleSet* particleSet) 1006 { 1007 bool isPushed = m_ParticleSets.push_back(particleSet); 1008 NW_ASSERT(isPushed); 1009 } 1010 1011 //! @brief パーティクルセットを追加します。 1012 //! 1013 //! @param[in] particleSet パーティクルセットです。 1014 //! 1015 //! @return 追加に成功すると true が返ります。 1016 //! TryPushParticleSet(ParticleSet * particleSet)1017 bool TryPushParticleSet(ParticleSet* particleSet) 1018 { 1019 bool isPushed = m_ParticleSets.push_back(particleSet); 1020 return isPushed; 1021 } 1022 1023 //! @brief パーティクルセットの先頭を指すイテレータを取得します。 1024 //! 1025 //! @return パーティクルセットの先頭を指すイテレータです。 1026 //! GetParticleSetBegin()1027 ParticleSetArray::iterator GetParticleSetBegin() 1028 { 1029 return m_ParticleSets.begin(); 1030 } 1031 1032 //! @brief パーティクルセットの先頭を指すイテレータを取得します。 1033 //! 1034 //! @return パーティクルセットの先頭を指すイテレータです。 1035 //! GetParticleSetBegin()1036 ParticleSetArray::const_iterator GetParticleSetBegin() const 1037 { 1038 return m_ParticleSets.begin(); 1039 } 1040 1041 //! @brief パーティクルセットの終端を指すイテレータを取得します。 1042 //! 1043 //! @return パーティクルセットの終端を指すイテレータです。 1044 //! GetParticleSetEnd()1045 ParticleSetArray::iterator GetParticleSetEnd() 1046 { 1047 return m_ParticleSets.end(); 1048 } 1049 1050 //! @brief パーティクルセットの終端を指すイテレータを取得します。 1051 //! 1052 //! @return パーティクルセットの終端を指すイテレータです。 1053 //! GetParticleSetEnd()1054 ParticleSetArray::const_iterator GetParticleSetEnd() const 1055 { 1056 return m_ParticleSets.end(); 1057 } 1058 1059 //@} 1060 1061 //---------------------------------------- 1062 //! @name パーティクルエミッタ関連 1063 //@{ 1064 1065 //! @brief パーティクルエミッタを追加します。 1066 //! 1067 //! @param[in] particleEmitter パーティクルエミッタです。 1068 //! PushParticleEmitter(ParticleEmitter * particleEmitter)1069 void PushParticleEmitter(ParticleEmitter* particleEmitter) 1070 { 1071 bool isPushed = m_ParticleEmitters.push_back(particleEmitter); 1072 NW_ASSERT(isPushed); 1073 } 1074 1075 //! @brief パーティクルエミッタを追加します。 1076 //! 1077 //! @param[in] particleEmitter パーティクルエミッタです。 1078 //! 1079 //! @return 追加に成功すると true が返ります。 1080 //! TryPushParticleEmitter(ParticleEmitter * particleEmitter)1081 bool TryPushParticleEmitter(ParticleEmitter* particleEmitter) 1082 { 1083 bool isPushed = m_ParticleEmitters.push_back(particleEmitter); 1084 return isPushed; 1085 } 1086 1087 //! @brief パーティクルエミッタの先頭を指すイテレータを取得します。 1088 //! 1089 //! @return パーティクルエミッタの先頭を指すイテレータです。 1090 //! GetParticleEmitterBegin()1091 ParticleEmitterArray::iterator GetParticleEmitterBegin() 1092 { 1093 return m_ParticleEmitters.begin(); 1094 } 1095 1096 //! @brief パーティクルエミッタの先頭を指すイテレータを取得します。 1097 //! 1098 //! @return パーティクルエミッタの先頭を指すイテレータです。 1099 //! GetParticleEmitterBegin()1100 ParticleEmitterArray::const_iterator GetParticleEmitterBegin() const 1101 { 1102 return m_ParticleEmitters.begin(); 1103 } 1104 1105 //! @brief パーティクルエミッタの終端を指すイテレータを取得します。 1106 //! 1107 //! @return パーティクルエミッタの終端を指すイテレータです。 1108 //! GetParticleEmitterEnd()1109 ParticleEmitterArray::iterator GetParticleEmitterEnd() 1110 { 1111 return m_ParticleEmitters.end(); 1112 } 1113 1114 //! @brief パーティクルエミッタの終端を指すイテレータを取得します。 1115 //! 1116 //! @return パーティクルエミッタの終端を指すイテレータです。 1117 //! GetParticleEmitterEnd()1118 ParticleEmitterArray::const_iterator GetParticleEmitterEnd() const 1119 { 1120 return m_ParticleEmitters.end(); 1121 } 1122 1123 //@} 1124 1125 //---------------------------------------- 1126 //! @name パーティクルモデル関連 1127 //@{ 1128 1129 //! @brief パーティクルモデルを追加します。 1130 //! 1131 //! @param[in] particleModel パーティクルモデルです。 1132 //! PushParticleModel(ParticleModel * particleModel)1133 void PushParticleModel(ParticleModel* particleModel) 1134 { 1135 bool isPushed = m_ParticleModels.push_back(particleModel); 1136 NW_ASSERT(isPushed); 1137 } 1138 1139 //! @brief パーティクルモデルを追加します。 1140 //! 1141 //! @param[in] particleModel パーティクルモデルです。 1142 //! 1143 //! @return 追加に成功すると true が返ります。 1144 //! TryPushParticleModel(ParticleModel * particleModel)1145 bool TryPushParticleModel(ParticleModel* particleModel) 1146 { 1147 bool isPushed = m_ParticleModels.push_back(particleModel); 1148 return isPushed; 1149 } 1150 1151 //! @brief パーティクルモデルの先頭を指すイテレータを取得します。 1152 //! 1153 //! @return パーティクルモデルの先頭を指すイテレータです。 1154 //! GetParticleModelBegin()1155 ParticleModelArray::iterator GetParticleModelBegin() 1156 { 1157 return m_ParticleModels.begin(); 1158 } 1159 1160 //! @brief パーティクルモデルの先頭を指すイテレータを取得します。 1161 //! 1162 //! @return パーティクルモデルの先頭を指すイテレータです。 1163 //! GetParticleModelBegin()1164 ParticleModelArray::const_iterator GetParticleModelBegin() const 1165 { 1166 return m_ParticleModels.begin(); 1167 } 1168 1169 //! @brief パーティクルモデルの終端を指すイテレータを取得します。 1170 //! 1171 //! @return パーティクルモデルの終端を指すイテレータです。 1172 //! GetParticleModelEnd()1173 ParticleModelArray::iterator GetParticleModelEnd() 1174 { 1175 return m_ParticleModels.end(); 1176 } 1177 1178 //! @brief パーティクルモデルの終端を指すイテレータを取得します。 1179 //! 1180 //! @return パーティクルモデルの終端を指すイテレータです。 1181 //! GetParticleModelEnd()1182 ParticleModelArray::const_iterator GetParticleModelEnd() const 1183 { 1184 return m_ParticleModels.end(); 1185 } 1186 1187 //@} 1188 1189 //! @name アニメーション関連 1190 //@{ 1191 1192 //! @brief アニメーションを行うノードを追加します。 1193 //! 1194 //! アニメーションを行わないノードについては、引数に渡されても無視します。 1195 //! 1196 //! @param[in] sceneNode アニメーションを行うノードです。 1197 //! PushAnimatableNode(SceneNode * sceneNode)1198 void PushAnimatableNode(SceneNode* sceneNode) 1199 { 1200 if (sceneNode->GetAnimBinding() != NULL) 1201 { 1202 bool isPushed = m_AnimatableNodes.push_back(sceneNode); 1203 NW_ASSERT(isPushed); 1204 } 1205 } 1206 1207 //! @brief アニメーションを行うノードを追加します。 1208 //! 1209 //! アニメーションを行わないノードについては、引数に渡されても無視します。 1210 //! 1211 //! @param[in] sceneNode アニメーションを行うノードです。 1212 //! 1213 //! @return 追加に成功すると true が返ります。 1214 //! TryPushAnimatableNode(SceneNode * sceneNode)1215 bool TryPushAnimatableNode(SceneNode* sceneNode) 1216 { 1217 bool isPushed = true; 1218 if (sceneNode->GetAnimBinding() != NULL) 1219 { 1220 isPushed = m_AnimatableNodes.push_back(sceneNode); 1221 } 1222 return isPushed; 1223 } 1224 1225 //! @brief アニメーションを行うノードの先頭を指すイテレータを取得します。 1226 //! 1227 //! @return アニメーションを行うノードの先頭を指すイテレータです。 1228 //! GetAnimatableNodesBegin()1229 AnimatableNodeArray::iterator GetAnimatableNodesBegin() 1230 { 1231 return m_AnimatableNodes.begin(); 1232 } 1233 1234 //! @brief アニメーションを行うノードの先頭を指すイテレータを取得します。 1235 //! 1236 //! @return アニメーションを行うノードの先頭を指すイテレータです。 1237 //! GetAnimatableNodesBegin()1238 AnimatableNodeArray::const_iterator GetAnimatableNodesBegin() const 1239 { 1240 return m_AnimatableNodes.begin(); 1241 } 1242 1243 //! @brief アニメーションを行うノードの終端を指すイテレータを取得します。 1244 //! 1245 //! @return アニメーションを行うノードの終端を指すイテレータです。 1246 //! GetAnimatableNodesEnd()1247 AnimatableNodeArray::iterator GetAnimatableNodesEnd() 1248 { 1249 return m_AnimatableNodes.end(); 1250 } 1251 1252 //! @brief アニメーションを行うノードの終端を指すイテレータを取得します。 1253 //! 1254 //! @return アニメーションを行うノードの終端を指すイテレータです。 1255 //! GetAnimatableNodesEnd()1256 AnimatableNodeArray::const_iterator GetAnimatableNodesEnd() const 1257 { 1258 return m_AnimatableNodes.end(); 1259 } 1260 1261 //@} 1262 1263 private: SceneContext(os::IAllocator * allocator,SceneNodeArray sceneNodes,UserRenderNodeArray userRenderNodes,ModelArray models,SkeletalModelArray skeletalModels,CameraArray cameras,FogArray fogs,LightArray lights,FragmentLightArray fragmentLights,VertexLightArray vertexLights,HemiSphereLightArray hemiSphereLights,AmbientLightArray ambientLights,ParticleSetArray particleSets,ParticleEmitterArray particleEmitters,ParticleModelArray particleModels,AnimatableNodeArray animatableNodes)1264 SceneContext( 1265 os::IAllocator* allocator, 1266 SceneNodeArray sceneNodes, 1267 UserRenderNodeArray userRenderNodes, 1268 ModelArray models, 1269 SkeletalModelArray skeletalModels, 1270 CameraArray cameras, 1271 FogArray fogs, 1272 LightArray lights, 1273 FragmentLightArray fragmentLights, 1274 VertexLightArray vertexLights, 1275 HemiSphereLightArray hemiSphereLights, 1276 AmbientLightArray ambientLights, 1277 ParticleSetArray particleSets, 1278 ParticleEmitterArray particleEmitters, 1279 ParticleModelArray particleModels, 1280 AnimatableNodeArray animatableNodes) 1281 : GfxObject(allocator), 1282 m_SceneNodes(sceneNodes), 1283 m_UserRenderNodes(userRenderNodes), 1284 m_Models(models), 1285 m_SkeletalModels(skeletalModels), 1286 m_Cameras(cameras), 1287 m_Fogs(fogs), 1288 m_Lights(lights), 1289 m_FragmentLights(fragmentLights), 1290 m_VertexLights(vertexLights), 1291 m_HemiSphereLights(hemiSphereLights), 1292 m_AmbientLights(ambientLights), 1293 m_ParticleSets(particleSets), 1294 m_ParticleEmitters(particleEmitters), 1295 m_ParticleModels(particleModels), 1296 m_AnimatableNodes(animatableNodes) 1297 {} ~SceneContext()1298 virtual ~SceneContext() {} 1299 1300 SceneNodeArray m_SceneNodes; 1301 UserRenderNodeArray m_UserRenderNodes; 1302 ModelArray m_Models; 1303 SkeletalModelArray m_SkeletalModels; 1304 CameraArray m_Cameras; 1305 FogArray m_Fogs; 1306 LightArray m_Lights; 1307 FragmentLightArray m_FragmentLights; 1308 VertexLightArray m_VertexLights; 1309 HemiSphereLightArray m_HemiSphereLights; 1310 AmbientLightArray m_AmbientLights; 1311 ParticleSetArray m_ParticleSets; 1312 ParticleEmitterArray m_ParticleEmitters; 1313 ParticleModelArray m_ParticleModels; 1314 AnimatableNodeArray m_AnimatableNodes; 1315 }; 1316 1317 } // namespace gfx 1318 } // namespace nw 1319 1320 #endif // NW_GFX_SCENECONTEXT_H_ 1321