@@ -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;
@@ -719,17 +724,17 @@ CW3DViewDoc::DisplayObject
719724 m_pCRenderObj->Set_Transform (Matrix3D (1 ));
720725
721726 // 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- }
727+ if (m_pCRenderObj->Class_ID () == RenderObjClass::CLASSID_BITMAP2D) {
728+ m_pC2DScene->Add_Render_Object (m_pCRenderObj);
729+ } else {
730+ m_pCScene->Clear_Lineup ();
731+ m_pCScene->Add_Render_Object (m_pCRenderObj);
732+ }
728733
729734 // Reset the current lod to be the lowest possible LOD...
730735 if ((m_pCScene->Are_LODs_Switching ()) &&
731736 (m_pCRenderObj->Class_ID () == RenderObjClass::CLASSID_HLOD)) {
732- ((HLodClass *)m_pCRenderObj. Peek () )->Set_LOD_Level (0 );
737+ ((HLodClass *)m_pCRenderObj)->Set_LOD_Level (0 );
733738 }
734739
735740 CGraphicView *pCGraphicView = GetGraphicView ();
@@ -825,7 +830,7 @@ CW3DViewDoc::StepAnimation (int iFrameInc)
825830
826831 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
827832 } else {
828- m_pCRenderObj->Set_Animation (m_pCAnimation, m_CurrentFrame);
833+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , m_CurrentFrame);
829834 }
830835
831836 Update_Camera ();
@@ -873,7 +878,7 @@ CW3DViewDoc::PlayAnimation
873878 if (m_pCRenderObj)
874879 {
875880 // Update the animation frame
876- m_pCRenderObj->Set_Animation (m_pCAnimation, 0 );
881+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , 0 );
877882
878883 CGraphicView *pCGraphicView = GetGraphicView ();
879884 if (pCGraphicView)
@@ -1040,8 +1045,8 @@ CW3DViewDoc::Update_Camera (void)
10401045 // Should we update the camera's position as well?
10411046 if (m_bAnimateCamera && m_pCRenderObj != NULL ) {
10421047
1043- Matrix3D transform (1 );
1044- if (Get_Camera_Transform (m_pCRenderObj, transform)) {
1048+ Matrix3D transform (1 );
1049+ if (Get_Camera_Transform (m_pCRenderObj. Peek () , transform)) {
10451050
10461051 // Convert the bone's transform into a camera transform
10471052 // Matrix3D transform = m_pCRenderObj->Get_Bone_Transform (index);
@@ -1105,9 +1110,9 @@ CW3DViewDoc::UpdateFrame (float relativeTimeSlice)
11051110
11061111 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
11071112 } else if (m_bAnimBlend) {
1108- m_pCRenderObj->Set_Animation (m_pCAnimation, m_CurrentFrame);
1113+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , m_CurrentFrame);
11091114 } else {
1110- m_pCRenderObj->Set_Animation (m_pCAnimation, (int )m_CurrentFrame);
1115+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , (int )m_CurrentFrame);
11111116 }
11121117
11131118 Update_Camera ();
@@ -1866,7 +1871,7 @@ CW3DViewDoc::Remove_Object_From_Scene (RenderObjClass *prender_obj)
18661871{
18671872 // If the render object is NULL, then remove the current render object
18681873 if (prender_obj == NULL ) {
1869- prender_obj = m_pCRenderObj;
1874+ prender_obj = m_pCRenderObj. Peek () ;
18701875 }
18711876
18721877 // Recursively remove objects from the scene (to make sure we get all particle buffers)
@@ -2430,7 +2435,7 @@ CW3DViewDoc::Make_Movie (void)
24302435 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
24312436 }
24322437 else
2433- m_pCRenderObj->Set_Animation (m_pCAnimation, (int )0 );
2438+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , (int )0 );
24342439 graphic_view->RepaintView (FALSE );
24352440
24362441 // Begin our movie
@@ -2452,7 +2457,7 @@ CW3DViewDoc::Make_Movie (void)
24522457 m_pCRenderObj->Set_Animation (m_pCAnimCombo);
24532458 }
24542459 else
2455- m_pCRenderObj->Set_Animation (m_pCAnimation, frame);
2460+ m_pCRenderObj->Set_Animation (m_pCAnimation. Peek () , frame);
24562461
24572462 // Should we be updating the camera?
24582463 if (m_bAnimateCamera) {
@@ -2512,7 +2517,7 @@ CW3DViewDoc::Build_Emitter_List
25122517 // If the render object is NULL, then start from the current render object
25132518 //
25142519 if (render_obj == NULL ) {
2515- render_obj = m_pCRenderObj;
2520+ render_obj = m_pCRenderObj. Peek () ;
25162521 }
25172522
25182523 //
@@ -2591,7 +2596,7 @@ void
25912596CW3DViewDoc::Create_Cursor (void )
25922597{
25932598 if (m_pCursor == NULL ) {
2594- m_pCursor = new ScreenCursorClass;
2599+ m_pCursor = RefCountPtr<ScreenCursorClass>:: Create_NoAddRef ( new ScreenCursorClass) ;
25952600 m_pCursor->Set_Window (GetGraphicView ()->m_hWnd );
25962601 m_pCursor->Set_Texture (::Load_RC_Texture (" cursor.tga" ));
25972602 }
@@ -2614,7 +2619,7 @@ CW3DViewDoc::Count_Particles (RenderObjClass *render_obj)
26142619 // If the render object is NULL, then start from the current render object
26152620 //
26162621 if (render_obj == NULL ) {
2617- render_obj = m_pCRenderObj;
2622+ render_obj = m_pCRenderObj. Peek () ;
26182623 }
26192624
26202625 //
@@ -2674,7 +2679,7 @@ CW3DViewDoc::Switch_LOD (int increment, RenderObjClass *render_obj)
26742679 // If the render object is NULL, then start from the current render object
26752680 //
26762681 if (render_obj == NULL ) {
2677- render_obj = m_pCRenderObj;
2682+ render_obj = m_pCRenderObj. Peek () ;
26782683 }
26792684
26802685 //
@@ -2714,7 +2719,7 @@ CW3DViewDoc::Toggle_Alternate_Materials(RenderObjClass * render_obj)
27142719 // If the render object is NULL, start from the current render object
27152720 //
27162721 if (render_obj == NULL ) {
2717- render_obj = m_pCRenderObj;
2722+ render_obj = m_pCRenderObj. Peek () ;
27182723 }
27192724
27202725 if (render_obj != NULL ) {
0 commit comments