Changeset 7152
- Timestamp:
- 07/23/07 22:37:49
- Files:
-
- OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG.cpp (modified) (4 diffs)
- OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG.h (modified) (3 diffs)
- OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG_MDIView.cpp (modified) (2 diffs)
- OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG_MDIView.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG.cpp
r6808 r7152 6 6 7 7 cOSG::cOSG(HWND hWnd) : 8 m_hWnd(hWnd) , mDone(false)8 m_hWnd(hWnd) 9 9 { 10 // 11 // We must set the pixelformat before we can create the OSG Rendering Surface 12 // 13 PIXELFORMATDESCRIPTOR pixelFormat = 14 { 15 sizeof(PIXELFORMATDESCRIPTOR), 16 1, 17 PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, 18 PFD_TYPE_RGBA, 19 24, 20 0, 0, 0, 0, 0, 0, 0, 0, 21 0, 0, 0, 0, 0, 22 24, 23 0, 24 0, 25 PFD_MAIN_PLANE, 26 0, 27 0, 0, 0 28 }; 10 } 29 11 30 HDC hdc = ::GetDC(m_hWnd); 31 if (hdc==0) 32 { 33 ::DestroyWindow(m_hWnd); 34 return; 35 } 12 cOSG::~cOSG() 13 { 14 mViewer->setDone(true); 15 Sleep(1000); 16 mViewer->stopThreading(); 36 17 37 int pixelFormatIndex = ::ChoosePixelFormat(hdc, &pixelFormat); 38 if (pixelFormatIndex==0) 39 { 40 ::ReleaseDC(m_hWnd, hdc); 41 ::DestroyWindow(m_hWnd); 42 return; 43 } 44 45 if (!::SetPixelFormat(hdc, pixelFormatIndex, &pixelFormat)) 46 { 47 ::ReleaseDC(m_hWnd, hdc); 48 ::DestroyWindow(m_hWnd); 49 return; 50 } 18 delete mViewer; 51 19 } 52 20 … … 101 69 102 70 // Create the viewer for this window 103 mViewer = new osgViewer::Viewer ;71 mViewer = new osgViewer::Viewer(); 104 72 105 73 // Add a Stats Handler to the viewer … … 123 91 traits->doubleBuffer = true; 124 92 traits->sharedContext = 0; 93 traits->setInheritedWindowPixelFormat = true; 125 94 traits->inheritedWindowData = windata; 126 95 … … 184 153 AfxMessageBox("Exit Rendering Thread"); 185 154 186 // Set Done to indicate that thread has exited 187 osg->Done(true); 155 _endthread(); 188 156 } OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG.h
r6864 r7152 16 16 public: 17 17 cOSG(HWND hWnd); 18 ~cOSG() {};18 ~cOSG(); 19 19 20 20 void InitOSG(std::string filename); … … 30 30 static void Render(void* ptr); 31 31 32 osgViewer::Viewer* getViewer() { return mViewer .get(); }32 osgViewer::Viewer* getViewer() { return mViewer; } 33 33 34 34 private: … … 36 36 std::string m_ModelName; 37 37 HWND m_hWnd; 38 osg ::ref_ptr<osgViewer::Viewer>mViewer;38 osgViewer::Viewer* mViewer; 39 39 osg::ref_ptr<osg::Group> mRoot; 40 40 osg::ref_ptr<osg::Node> mModel; OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG_MDIView.cpp
r6808 r7152 75 75 void CMFC_OSG_MDIView::OnDestroy() 76 76 { 77 // Make sure OSG was created before we try to close it. 78 if(mOSG) 79 { 80 81 // Wait while the Viewer closes 82 while(!mOSG->Done()) 83 { 84 Sleep(10); // Allow others processor time 85 } 86 87 // Remove mOSG 88 delete mOSG; 89 } 77 if(mOSG != 0) delete mOSG; 90 78 91 // Destroy Window 79 WaitForSingleObject(mThreadHandle, 1000); 80 92 81 CView::OnDestroy(); 93 82 } … … 104 93 105 94 // Start the thread to do OSG Rendering 106 _beginthread(&cOSG::Render, 0, mOSG);95 mThreadHandle = (HANDLE)_beginthread(&cOSG::Render, 0, mOSG); 107 96 } 108 97 OpenSceneGraph/trunk/examples/osgviewerMFC/MFC_OSG_MDIView.h
r6643 r7152 35 35 protected: 36 36 cOSG* mOSG; 37 HANDLE mThreadHandle; 37 38 38 39 // Generated message map functions
