diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 82a9de6a8..5ab0977b5 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -122,5 +122,11 @@ IF (FLTK_FOUND) ADD_SUBDIRECTORY(osgsimpleviewerFLTK) ENDIF(FLTK_FOUND) +IF (WIN32) + ADD_SUBDIRECTORY(osgviewerMFC) +ENDIF(WIN32) + + + #ADD_SUBDIRECTORY(osgcegui) #to add subject to find socket#ADD_SUBDIRECTORY(osgcluster) diff --git a/examples/osgviewerMFC/CMakeLists.txt b/examples/osgviewerMFC/CMakeLists.txt new file mode 100644 index 000000000..238f38a46 --- /dev/null +++ b/examples/osgviewerMFC/CMakeLists.txt @@ -0,0 +1,33 @@ +SET(TARGET_SRC MFC_OSG_MDI.cpp MFC_OSG_MDI.rc MFC_OSG_MDIDoc.cpp MFC_OSG_MDIView.cpp stdafx.cpp MFC_OSG.cpp MainFrm.cpp ChildFrm.cpp) +SET(TARGET_H MFC_OSG_MDI.h MFC_OSG_MDIDoc.h MFC_OSG_MDIView.h stdafx.h MFC_OSG.h MainFrm.h ChildFrm.h Resource.h) + +ADD_DEFINITIONS(-D_AFXDLL) +SET(CMAKE_MFC_FLAG 2) + +#### end var setup ### +#SETUP_EXAMPLE(osgviewerMFC) + +# +#Extracted from SETUP_EXAMPLES +# +SET(TARGET_NAME osgviewerMFC) + +# +#Extracted from SETUP_EXE +# +IF(NOT TARGET_TARGETNAME) + SET(TARGET_TARGETNAME "${TARGET_DEFAULT_PREFIX}${TARGET_NAME}") +ENDIF(NOT TARGET_TARGETNAME) +IF(NOT TARGET_LABEL) + SET(TARGET_LABEL "${TARGET_DEFAULT_LABEL_PREFIX} ${TARGET_NAME}") +ENDIF(NOT TARGET_LABEL) + +# This is the important line because it adds WIN32 which tells CMake that this is an MFC/Windows appliation +# and not a console application +ADD_EXECUTABLE(${TARGET_TARGETNAME} WIN32 ${TARGET_SRC} ${TARGET_H}) + +SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}") +SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) +SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES OUTPUT_NAME ${TARGET_NAME}) + +SETUP_LINK_LIBRARIES() diff --git a/examples/osgviewerMFC/MFC_OSG.cpp b/examples/osgviewerMFC/MFC_OSG.cpp index a20a62034..5c5ec43c5 100644 --- a/examples/osgviewerMFC/MFC_OSG.cpp +++ b/examples/osgviewerMFC/MFC_OSG.cpp @@ -149,16 +149,37 @@ void cOSG::InitCameraConfig(void) mViewer->realize(); } +void cOSG::PreFrameUpdate() +{ + // Due any preframe updates in this routine +} + +void cOSG::PostFrameUpdate() +{ + // Due any postframe updates in this routine +} + void cOSG::Render(void* ptr) { cOSG* osg = (cOSG*)ptr; osgViewer::Viewer* viewer = osg->getViewer(); - viewer->run(); + // You have two options for the main viewer loop + // viewer->run() or + // while(!viewer->done()) { viewer->frame(); } + + //viewer->run(); + while(!viewer->done()) + { + osg->PreFrameUpdate(); + viewer->frame(); + osg->PostFrameUpdate(); + //Sleep(10); // Use this command if you need to allow other processes to have cpu time + } // For some reason this has to be here to avoid issue: // if you have multiple OSG windows up // and you exit one then all stop rendering AfxMessageBox("Exit Rendering Thread"); -} \ No newline at end of file +} diff --git a/examples/osgviewerMFC/MFC_OSG.h b/examples/osgviewerMFC/MFC_OSG.h index d182d1ab4..cd7779cec 100644 --- a/examples/osgviewerMFC/MFC_OSG.h +++ b/examples/osgviewerMFC/MFC_OSG.h @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include @@ -23,6 +23,8 @@ public: void InitCameraConfig(void); void SetupWindow(void); void SetupCamera(void); + void PreFrameUpdate(void); + void PostFrameUpdate(void); static void Render(void* ptr); osgViewer::Viewer* getViewer() { return mViewer.get(); } @@ -35,4 +37,4 @@ private: osg::ref_ptr mModel; osg::ref_ptr trackball; osg::ref_ptr keyswitchManipulator; -}; \ No newline at end of file +};