Advertisement
Guest User

Ogre 2.0 CEGUI test

a guest
Feb 1st, 2015
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.55 KB | None | 0 0
  1. #include <OgreRoot.h>
  2. #include <OgreCamera.h>
  3. #include <OgreViewport.h>
  4. #include <OgreSceneManager.h>
  5. #include <OgreRenderWindow.h>
  6. #include <OgreEntity.h>
  7. #include <OgreWindowEventUtilities.h>
  8. #include <OgreMeshManager.h>
  9. #include <OgreMesh.h>
  10. #include <OgreSubMesh.h>
  11. #include <OgreTechnique.h>
  12. #include <OgreMaterialManager.h>
  13. #include <OgreMaterial.h>
  14. #include <OgreQuaternion.h>
  15. #include <OgreManualObject.h>
  16. #include <OgreFrameListener.h>
  17.  
  18. #include <Compositor/OgreTextureDefinition.h>
  19. #include <Compositor/OgreCompositorManager2.h>
  20. #include <Compositor/OgreCompositorCommon.h>
  21. #include <Compositor/OgreCompositorWorkspaceDef.h>
  22. #include <Compositor/OgreCompositorWorkspace.h>
  23. #include <Compositor/OgreCompositorNodeDef.h>
  24. #include <Compositor/Pass/PassClear/OgreCompositorPassClear.h>
  25. #include <Compositor/Pass/PassScene/OgreCompositorPassScene.h>
  26.  
  27.  
  28. #include <cegui\CEGUI.h>
  29. #include <cegui\RendererModules/Ogre\Renderer.h>
  30. #include <cegui\RendererModules/Ogre\WindowTarget.h>
  31. #include <CEGUI\RendererModules\Ogre\ResourceProvider.h>
  32. #include <CEGUI\RendererModules\Ogre\ImageCodec.h>
  33.  
  34. #include <sstream>
  35.  
  36. #include <string>
  37. #include <fstream>
  38.  
  39. class FrameListener : public Ogre::FrameListener
  40. {
  41. public:
  42.   bool frameStarted(const Ogre::FrameEvent& evt)
  43.   {
  44.     return true;
  45.   }
  46.   bool frameEnded(const Ogre::FrameEvent& evt)
  47.   {
  48.     return true;
  49.   }
  50.  
  51.   bool frameRenderingQueued(const Ogre::FrameEvent& args)
  52.   {
  53.     CEGUI::System& gui_system(CEGUI::System::getSingleton());
  54.  
  55.     float dt = 1e-2f;
  56.     gui_system.injectTimePulse(dt);
  57.     //d_sampleApp->update(static_cast<float>(elapsed));
  58.  
  59.     //beginRendering(elapsed);
  60.  
  61.     CEGUI::Renderer* gui_renderer(gui_system.getRenderer());
  62.     gui_renderer->beginRendering();
  63.     //d_sampleApp->renderGUIContexts();
  64.     guiContext->injectTimePulse(1e-2f);
  65.     guiContext->draw();
  66.  
  67.     gui_renderer->endRendering();
  68.     CEGUI::WindowManager::getSingleton().cleanDeadPool();
  69.  
  70.     //endRendering();
  71.     return true;
  72.   }
  73.   void setGuiContext(CEGUI::GUIContext *guiContext)
  74.   {
  75.     this->guiContext = guiContext;
  76.   }
  77. private:
  78.   CEGUI::GUIContext *guiContext;
  79. };
  80.  
  81. FrameListener frameListener;
  82. FrameListener frameListener2;
  83.  
  84. CEGUI::OgreRenderer* ceguiOgreRenderer;
  85. CEGUI::GUIContext *InitCEGUIContext(Ogre::Root *root, Ogre::RenderWindow *window, FrameListener *frameListener)
  86. {
  87.   ceguiOgreRenderer = &CEGUI::OgreRenderer::create(*window);
  88.   ceguiOgreRenderer->setDefaultRootRenderTarget(*window);
  89. /*  ceguiOgreRenderer->setRenderingEnabled(false);*/
  90.  
  91.   if(!CEGUI::System::getSingletonPtr())
  92.   {
  93.     //ceguiOgreRenderer = &CEGUI::OgreRenderer::bootstrapSystem(*window);
  94.     &CEGUI::System::create(*ceguiOgreRenderer, new CEGUI::OgreResourceProvider(), 0, new CEGUI::OgreImageCodec());
  95.     Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Imagesets");
  96.     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/imagesets", "FileSystem", "Imagesets");
  97.     Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Fonts");
  98.     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/fonts", "FileSystem", "Fonts");
  99.     Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Schemes");
  100.     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/schemes", "FileSystem", "Schemes");
  101.     Ogre::ResourceGroupManager::getSingleton().createResourceGroup("LookNFeel");
  102.     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/looknfeel", "FileSystem", "LookNFeel");
  103.     Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Layouts");
  104.     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/layouts", "FileSystem", "Layouts");
  105.  
  106.     CEGUI::ImageManager::setImagesetDefaultResourceGroup("Imagesets");
  107.     CEGUI::Font::setDefaultResourceGroup("Fonts");
  108.     CEGUI::Scheme::setDefaultResourceGroup("Schemes");
  109.     CEGUI::WidgetLookManager::setDefaultResourceGroup("LookNFeel");
  110.     CEGUI::WindowManager::setDefaultResourceGroup("Layouts");
  111.  
  112.     CEGUI::SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
  113.   }
  114.  
  115.   //CEGUI::System::getSingleton().getDefaultGUIContext().getMouseCursor().setDefaultImage("TaharezLook/MouseArrow");
  116.  
  117.   CEGUI::WindowManager &wmgr = CEGUI::WindowManager::getSingleton();
  118.   CEGUI::Window *sheet = wmgr.createWindow("DefaultWindow");
  119.  
  120.   CEGUI::RenderTarget *target = new CEGUI::OgreWindowTarget(*ceguiOgreRenderer, *root->getRenderSystem(), *window);
  121.   CEGUI::GUIContext *guiContext = &CEGUI::System::getSingleton().createGUIContext(*target);
  122.   //CEGUI::GUIContext *guiContext = &CEGUI::System::getSingleton().getDefaultGUIContext();
  123.   guiContext->setRootWindow(sheet);
  124.  
  125.   frameListener->setGuiContext(guiContext);
  126.   root->addFrameListener(frameListener);
  127.  
  128.   ceguiOgreRenderer->setRenderingEnabled(false);
  129.  
  130.   return guiContext;
  131. }
  132.  
  133. int main( int argc, char **argv )
  134. {
  135.   Ogre::String configSuffix = "";
  136.   #ifdef _DEBUG
  137.     configSuffix = "_d";
  138.   #endif
  139.  
  140.   Ogre::String pluginsFileName = "OgrePlugins" + configSuffix + ".cfg";
  141.   Ogre::String configFileName = "OgreConfig" + configSuffix + ".cfg";
  142.   Ogre::String logFileName = "OgreLog" + configSuffix + ".log";
  143.   Ogre::Root *root = new Ogre::Root(pluginsFileName, configFileName, logFileName);
  144.  
  145.   //Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("Direct3D11 Rendering Subsystem");
  146.   //Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("Direct3D9 Rendering Subsystem");
  147.   Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("OpenGL Rendering Subsystem");
  148.   root->setRenderSystem(renderSystem);
  149.   renderSystem->setConfigOption("Full Screen", "No");
  150.   renderSystem->setConfigOption("Video Mode", "800 x 600 @ 32-bit colour");
  151.  
  152.   root->initialise(false);
  153.  
  154.  
  155.  
  156.   //Ogre::RenderWindow *window = root->getAutoCreatedWindow();
  157.   Ogre::RenderWindow *window = root->createRenderWindow("Awesome window", 800, 600, false);
  158.   Ogre::RenderWindow *window2 = root->createRenderWindow("Awesome window 2!", 800, 600, false);
  159.  
  160.   Ogre::SceneManager* sceneManager =  root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, /*"DefaultSceneManager", */8, Ogre::INSTANCING_CULLING_THREADED);
  161.   Ogre::SceneManager* sceneManager2 = root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, /*"DefaultSceneManager", */8, Ogre::INSTANCING_CULLING_THREADED);
  162.  
  163.   /*
  164.   HWND hWnd = 0;  // Get the hWnd of the application!
  165.   NameValuePairList misc;
  166.   misc["externalWindowHandle"] = StringConverter::toString((int)hWnd);
  167.   Ogre::RenderWindow *window = root->createRenderWindow("Main RenderWindow", 800, 600, false, &misc);*/
  168.  
  169.   Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Manual meshes");
  170.   Ogre::ResourceGroupManager::getSingleton().addResourceLocation("data", "FileSystem");
  171.   Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
  172.  
  173.  
  174.   Ogre::Camera *camera = sceneManager->createCamera("Cool camera");
  175.   Ogre::Camera *camera2 = sceneManager->createCamera("Cool camera2");
  176.  
  177.  
  178.   camera->setPosition(Ogre::Vector3(0.0f, 1500.0f, 1500.0f));
  179.   camera->lookAt(Ogre::Vector3(0.0f, 0.0f, 0.0f));
  180.   camera->setNearClipDistance(5.0f);
  181.   camera->setFarClipDistance(10000.0f);
  182.   Ogre::Radian fov = camera->getFOVy();
  183.  
  184.  
  185.   Ogre::CompositorManager2 *compositorManager = root->getCompositorManager2();
  186.  
  187.   const Ogre::IdString workspaceName("Awesome workspace1");
  188.   compositorManager->createBasicWorkspaceDef( workspaceName, Ogre::ColourValue(0.5f, 0.5f, 0.5f, 0.5f), Ogre::IdString());
  189.   compositorManager->addWorkspace( sceneManager, window, camera, workspaceName, true );
  190.  
  191.   Ogre::Viewport* viewport = window->getViewport(0);
  192.   camera->setAspectRatio(Ogre::Real(viewport->getActualWidth()) / Ogre::Real(viewport->getActualHeight()));
  193.  
  194.   const Ogre::IdString workspaceName2("Awesome workspace2");
  195.   compositorManager->createBasicWorkspaceDef( workspaceName2, Ogre::ColourValue(0.5f, 0.5f, 0.5f, 0.5f), Ogre::IdString());
  196.   compositorManager->addWorkspace( sceneManager2, window2, camera2, workspaceName2, true );
  197.  
  198.   Ogre::Viewport* viewport2 = window2->getViewport(0);
  199.   camera2->setAspectRatio(Ogre::Real(viewport2->getActualWidth()) / Ogre::Real(viewport2->getActualHeight()));
  200.  
  201.   CEGUI::GUIContext *guiContext = InitCEGUIContext(root, window, &frameListener);
  202.   CEGUI::Window *hello1Button = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", "CEGUIDemo/QuitButton");
  203.   hello1Button->setText("Hello1");
  204.   hello1Button->setSize(CEGUI::USize(CEGUI::UDim(0.15, 0), CEGUI::UDim(0.05, 0)));
  205.   guiContext->getRootWindow()->addChild(hello1Button);
  206.  
  207.   CEGUI::GUIContext *guiContext2 = InitCEGUIContext(root, window2, &frameListener2);
  208.   CEGUI::Window *hello2Button = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", "CEGUIDemo/QuitButton");
  209.   hello2Button->setText("Hello2!!!1");
  210.   hello2Button->setSize(CEGUI::USize(CEGUI::UDim(0.15, 0), CEGUI::UDim(0.05, 0)));
  211.   hello2Button->setPosition(CEGUI::UVector2(CEGUI::UDim(0.25, 0), CEGUI::UDim(0.5, 0)));
  212.   guiContext2->getRootWindow()->addChild(hello2Button);
  213. //  CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(sheet);
  214.  
  215.   bool running = 1;
  216.   float time = 0.0f;
  217.  
  218.   bool firstTime = 1;
  219.   while(running)
  220.   {
  221.     time += 1e-2f; //we don't need actual time, just a value increasing with time
  222.     Ogre::WindowEventUtilities::messagePump();
  223.     //robotNode->rotate(Ogre::Quaternion(Ogre::Radian(1e-2f), Ogre::Vector3(0.0f, 1.0f, 0.0f)), Ogre::Node::TS_WORLD);
  224.     if(window->isClosed())
  225.       running = 0;
  226.     root->renderOneFrame();
  227.   }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement