@@ -171,6 +171,7 @@ CW3DViewDoc::CleanupResources (void)
171171 if (m_pCursor != NULL ) {
172172 m_pCursor->Remove ();
173173 }
174+ m_pCursorScene = NULL ;
174175
175176 if (m_pCScene)
176177 {
@@ -241,6 +242,8 @@ CW3DViewDoc::CleanupResources (void)
241242 {
242243 // Free the currently displayed object
243244 SAFE_DELETE (m_pCAnimCombo);
245+ m_pCAnimation = NULL ;
246+ m_pCRenderObj = NULL ;
244247 }
245248
246249 return ;
@@ -280,6 +283,8 @@ CW3DViewDoc::OnNewDocument (void)
280283 {
281284 // Free the currently displayed object
282285 SAFE_DELETE (m_pCAnimCombo);
286+ m_pCAnimation = NULL ;
287+ m_pCRenderObj = NULL ;
283288 }
284289
285290 CDataTreeView *pCDataTreeView = GetDataTreeView ();
@@ -390,11 +395,11 @@ CW3DViewDoc::InitScene (void)
390395 ASSERT (m_pC2DScene);
391396
392397 // Instantiate a new 2D cursor scene
393- m_pCursorScene = new SimpleSceneClass;
398+ m_pCursorScene = RefCountPtr<SceneClass>:: Create_NoAddRef ( new SimpleSceneClass) ;
394399 ASSERT (m_pCursorScene);
395400
396401 Create_Cursor ();
397- m_pCursorScene->Add_Render_Object (m_pCursor);
402+ m_pCursorScene->Add_Render_Object (m_pCursor. Peek () );
398403
399404
400405 m_pCBackObjectScene = new SimpleSceneClass;
@@ -604,6 +609,7 @@ CW3DViewDoc::Display_Emitter
604609
605610 // Lose the animation
606611 SAFE_DELETE (m_pCAnimCombo);
612+ m_pCAnimation = NULL ;
607613
608614 if (m_pCRenderObj != NULL ) {
609615
@@ -719,17 +725,17 @@ CW3DViewDoc::DisplayObject
719725 m_pCRenderObj->Set_Transform (Matrix3D (1 ));
720726
721727 // Add this object to the scene
722- if (m_pCRenderObj->Class_ID () == RenderObjClass::CLASSID_BITMAP2D) {
723- m_pC2DScene->Add_Render_Object (m_pCRenderObj);
724- } else {
725- m_pCScene->Clear_Lineup ();
726- m_pCScene->Add_Render_Object (m_pCRenderObj);
727- }
728+ if (m_pCRenderObj->Class_ID () == RenderObjClass::CLASSID_BITMAP2D) {
729+ m_pC2DScene->Add_Render_Object (m_pCRenderObj);
730+ } else {
731+ m_pCScene->Clear_Lineup ();
732+ m_pCScene->Add_Render_Object (m_pCRenderObj);
733+ }
728734
729735 // Reset the current lod to be the lowest possible LOD...
730736 if ((m_pCScene->Are_LODs_Switching ()) &&
731737 (m_pCRenderObj->Class_ID () == RenderObjClass::CLASSID_HLOD)) {
732- ((HLodClass *)m_pCRenderObj. Peek () )->Set_LOD_Level (0 );
738+ ((HLodClass *)m_pCRenderObj)->Set_LOD_Level (0 );
733739 }
734740
735741 CGraphicView *pCGraphicView = GetGraphicView ();
@@ -825,7 +831,7 @@ CW3DViewDoc::StepAnimation (int iFrameInc)
825831
826832 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
827833 } else {
828- m_pCRenderObj->Set_Animation (m_pCAnimation, m_CurrentFrame);
834+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , m_CurrentFrame);
829835 }
830836
831837 Update_Camera ();
@@ -873,7 +879,7 @@ CW3DViewDoc::PlayAnimation
873879 if (m_pCRenderObj)
874880 {
875881 // Update the animation frame
876- m_pCRenderObj->Set_Animation (m_pCAnimation, 0 );
882+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , 0 );
877883
878884 CGraphicView *pCGraphicView = GetGraphicView ();
879885 if (pCGraphicView)
@@ -1040,8 +1046,8 @@ CW3DViewDoc::Update_Camera (void)
10401046 // Should we update the camera's position as well?
10411047 if (m_bAnimateCamera && m_pCRenderObj != NULL ) {
10421048
1043- Matrix3D transform (1 );
1044- if (Get_Camera_Transform (m_pCRenderObj, transform)) {
1049+ Matrix3D transform (1 );
1050+ if (Get_Camera_Transform (m_pCRenderObj. Peek () , transform)) {
10451051
10461052 // Convert the bone's transform into a camera transform
10471053 // Matrix3D transform = m_pCRenderObj->Get_Bone_Transform (index);
@@ -1105,9 +1111,9 @@ CW3DViewDoc::UpdateFrame (float relativeTimeSlice)
11051111
11061112 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
11071113 } else if (m_bAnimBlend) {
1108- m_pCRenderObj->Set_Animation (m_pCAnimation, m_CurrentFrame);
1114+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , m_CurrentFrame);
11091115 } else {
1110- m_pCRenderObj->Set_Animation (m_pCAnimation, (int )m_CurrentFrame);
1116+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , (int )m_CurrentFrame);
11111117 }
11121118
11131119 Update_Camera ();
@@ -1866,7 +1872,7 @@ CW3DViewDoc::Remove_Object_From_Scene (RenderObjClass *prender_obj)
18661872{
18671873 // If the render object is NULL, then remove the current render object
18681874 if (prender_obj == NULL ) {
1869- prender_obj = m_pCRenderObj;
1875+ prender_obj = m_pCRenderObj. Peek () ;
18701876 }
18711877
18721878 // Recursively remove objects from the scene (to make sure we get all particle buffers)
@@ -2430,7 +2436,7 @@ CW3DViewDoc::Make_Movie (void)
24302436 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
24312437 }
24322438 else
2433- m_pCRenderObj->Set_Animation (m_pCAnimation, (int )0 );
2439+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , (int )0 );
24342440 graphic_view->RepaintView (FALSE );
24352441
24362442 // Begin our movie
@@ -2452,7 +2458,7 @@ CW3DViewDoc::Make_Movie (void)
24522458 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
24532459 }
24542460 else
2455- m_pCRenderObj->Set_Animation (m_pCAnimation, frame);
2461+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , frame);
24562462
24572463 // Should we be updating the camera?
24582464 if (m_bAnimateCamera) {
@@ -2512,7 +2518,7 @@ CW3DViewDoc::Build_Emitter_List
25122518 // If the render object is NULL, then start from the current render object
25132519 //
25142520 if (render_obj == NULL ) {
2515- render_obj = m_pCRenderObj;
2521+ render_obj = m_pCRenderObj. Peek () ;
25162522 }
25172523
25182524 //
@@ -2591,7 +2597,7 @@ void
25912597CW3DViewDoc::Create_Cursor (void )
25922598{
25932599 if (m_pCursor == NULL ) {
2594- m_pCursor = new ScreenCursorClass;
2600+ m_pCursor = RefCountPtr<ScreenCursorClass>:: Create_NoAddRef ( new ScreenCursorClass) ;
25952601 m_pCursor->Set_Window (GetGraphicView ()->m_hWnd );
25962602 m_pCursor->Set_Texture (::Load_RC_Texture (" cursor.tga" ));
25972603 }
@@ -2614,7 +2620,7 @@ CW3DViewDoc::Count_Particles (RenderObjClass *render_obj)
26142620 // If the render object is NULL, then start from the current render object
26152621 //
26162622 if (render_obj == NULL ) {
2617- render_obj = m_pCRenderObj;
2623+ render_obj = m_pCRenderObj. Peek () ;
26182624 }
26192625
26202626 //
@@ -2674,7 +2680,7 @@ CW3DViewDoc::Switch_LOD (int increment, RenderObjClass *render_obj)
26742680 // If the render object is NULL, then start from the current render object
26752681 //
26762682 if (render_obj == NULL ) {
2677- render_obj = m_pCRenderObj;
2683+ render_obj = m_pCRenderObj. Peek () ;
26782684 }
26792685
26802686 //
@@ -2714,7 +2720,7 @@ CW3DViewDoc::Toggle_Alternate_Materials(RenderObjClass * render_obj)
27142720 // If the render object is NULL, start from the current render object
27152721 //
27162722 if (render_obj == NULL ) {
2717- render_obj = m_pCRenderObj;
2723+ render_obj = m_pCRenderObj. Peek () ;
27182724 }
27192725
27202726 if (render_obj != NULL ) {
0 commit comments