Advertisement
jserve

OGRE3D / CEGUI Testcode

May 6th, 2015
616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.17 KB | None | 0 0
  1. #include "OGRE/OgreRoot.h"
  2. #include "OGRE/OgreRenderSystem.h"
  3. #include "OGRE/OgreRenderWindow.h"
  4. #include "OGRE/OgreViewport.h"
  5. #include "OGRE/OgreWindowEventUtilities.h"
  6. #include "OGRE/OgreLogManager.h"
  7. #include "OGRE/OgreResourceGroupManager.h"
  8.  
  9. #include "OGRE/OgreEntity.h"
  10.  
  11. #include "OGRE/OgreCamera.h"
  12.  
  13. #include "OGRE/Compositor/OgreCompositorManager2.h"
  14.  
  15. #include "OGRE/OgreArchiveManager.h"
  16. #include "OGRE/OgreArchive.h"
  17. #include "OGRE/OgreMeshManager.h"
  18. #include "OGRE/OgreMeshManager2.h"
  19. #include "OGRE/OgreMesh.h"
  20. #include "OGRE/OgreMesh2.h"
  21.  
  22. #include "OGRE/Hlms/Unlit/OgreHlmsUnlit.h"
  23. #include "OGRE/Hlms/Pbs/OgreHlmsPbs.h"
  24. #include "OGRE/OgreHlmsManager.h"
  25.  
  26. #include <CEGUI/CEGUI.h>
  27. #include <CEGUI/RendererModules/Ogre/Renderer.h>
  28.  
  29. #include <iostream>
  30. #include <memory>
  31. #include <exception>
  32. #include "windows.h"
  33.  
  34. INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
  35. {
  36.     try
  37.     {
  38.         std::unique_ptr<Ogre::Root> lRoot(new Ogre::Root("", "", "ogre.log"));     
  39.  
  40.         typedef std::vector<Ogre::String> Strings;
  41.  
  42.  
  43.         // Load the RenderSystem
  44.         Strings lPluginNames;
  45.         lPluginNames.push_back("RenderSystem_GL3Plus");
  46.         //lPluginNames.push_back("RenderSystem_Direct3D11");
  47.  
  48.         Strings::iterator lIter = lPluginNames.begin();
  49.         Strings::iterator lIterEnd = lPluginNames.end();
  50.         for(;lIter != lIterEnd; lIter++)
  51.         {
  52.             Ogre::String& lPluginName = (*lIter);
  53.             // In debug mode, the plugins names are differents, they got a '_d' at the end.
  54.             // So I add it. This is the main reason why I needed to put plugins names in a vector.
  55.             // A macro or a function would have done the trick too...
  56.             bool lIsInDebugMode = OGRE_DEBUG_MODE;
  57.             if(lIsInDebugMode)
  58.             {
  59.                 lPluginName.append("_d");
  60.             }
  61.             lRoot->loadPlugin(lPluginName);
  62.         }
  63.  
  64.         // Set the Rendersystem
  65.         const Ogre::RenderSystemList& lRenderSystemList = lRoot->getAvailableRenderers();
  66.         if( lRenderSystemList.size() == 0 )
  67.         {
  68.             Ogre::LogManager::getSingleton().logMessage("Sorry, no rendersystem was found.");
  69.             return 1;
  70.         }
  71.  
  72.         // Initialize root
  73.         Ogre::RenderSystem *lRenderSystem = lRenderSystemList[0];
  74.         lRoot->setRenderSystem(lRenderSystem);
  75.  
  76.         bool lCreateAWindowAutomatically = false;
  77.         // name of the automatically generated window. empty for me.
  78.         Ogre::String lWindowTitle = "";
  79.         // custom capabilities of the rendersystem. It's a feature for advanced use.
  80.         Ogre::String lCustomCapacities = "";
  81.         lRoot->initialise(lCreateAWindowAutomatically, lWindowTitle, lCustomCapacities);
  82.  
  83.         // Create Window
  84.         Ogre::RenderWindow* lWindow = NULL;
  85.         {
  86.             Ogre::String lWindowTitle = "Hello  World!";
  87.             unsigned int lSizeX = 800;
  88.             unsigned int lSizeY = 600;
  89.            
  90.             //I don't want to use fullscreen during development.
  91.             bool lFullscreen = false;
  92.            
  93.             // This is just an example of parameters that we can put. Check the API for more details.
  94.             Ogre::NameValuePairList lParams;
  95.            
  96.             // fullscreen antialiasing. (check wikipedia if needed).
  97.             lParams["FSAA"] = "0";
  98.  
  99.             // vertical synchronisation will prevent some image-tearing, but also
  100.             // will provide smooth framerate in windowed mode.(check wikipedia if needed).
  101.             lParams["vsync"] = "true";
  102.             lWindow = lRoot->createRenderWindow(lWindowTitle, lSizeX, lSizeY, lFullscreen, &lParams);
  103.         }
  104.  
  105.         // Create Scenemanager
  106.         Ogre::SceneManager *lSceneMgr=lRoot->createSceneManager("DefaultSceneManager", 1, Ogre::INSTANCING_CULLING_SINGLETHREAD);
  107.  
  108.         // Init of Hlms
  109.         Ogre::String dataFolder = "media/Hlms/";
  110.  
  111.         Ogre::Archive *archiveLibrary = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + "Common/GLSL", "FileSystem", true);
  112.         Ogre::ArchiveVec library;
  113.         library.push_back(archiveLibrary);
  114.  
  115.         Ogre::Archive *archiveUnlit = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + "Unlit/GLSL", "FileSystem", true);
  116.         Ogre::HlmsUnlit *hlmsUnlit = OGRE_NEW Ogre::HlmsUnlit (archiveUnlit, &library);
  117.         Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsUnlit);
  118.  
  119.         Ogre::Archive *archivePbs = Ogre::ArchiveManager::getSingletonPtr()->load(dataFolder + "Pbs/GLSL", "FileSystem", true);
  120.         Ogre::HlmsPbs *hlmsPbs = OGRE_NEW Ogre::HlmsPbs(archivePbs, &library);
  121.        
  122.         Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs);
  123.  
  124.         // Ressourceloader
  125.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/models", "FileSystem", "Standard");
  126.  
  127.         // Resources for CEGUI
  128.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/imagesets", "FileSystem", "Imagesets");
  129.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/fonts", "FileSystem", "Fonts");
  130.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/animations", "FileSystem", "Animations");
  131.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/layouts", "FileSystem", "Layouts");
  132.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/looknfeel", "FileSystem", "LookNFeel");
  133.         Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/cegui/schemes", "FileSystem", "Schemes");
  134.  
  135.         Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
  136.  
  137.        
  138.         // Create Camera
  139.         Ogre::Camera *lCamera;
  140.         lCamera = lSceneMgr->createCamera("Camera");
  141.         lCamera->setPosition(Ogre::Vector3(0, 0, 180));
  142.         lCamera->lookAt(Ogre::Vector3(0, 0 ,0));       
  143.         lCamera->setNearClipDistance( 5 );
  144.         lCamera->setAutoAspectRatio( true );
  145.        
  146.         // CompositorManager - something new in Ogre3D 2.1
  147.         Ogre::CompositorManager2 *compositorManager = lRoot->getCompositorManager2();
  148.         const Ogre::IdString workspaceName( "Workspace" );
  149.         if( !compositorManager->hasWorkspaceDefinition( workspaceName ) )
  150.         {
  151.             compositorManager->createBasicWorkspaceDef( workspaceName, Ogre::ColourValue::Red );
  152.         }
  153.         compositorManager->addWorkspace( lSceneMgr, lWindow, lCamera, workspaceName, true );
  154.                
  155.         // Testmesh...
  156.         /**
  157.         Ogre::v1::Entity* atheneMesh = lSceneMgr->createEntity("athene.mesh");
  158.         atheneMesh->setMaterialName("BaseWhite");
  159.         Ogre::SceneNode* node1 = lSceneMgr->getRootSceneNode()->createChildSceneNode();
  160.         node1->attachObject(atheneMesh);       
  161.         **/
  162.         Ogre::v1::MeshPtr v1Mesh;
  163.         Ogre::MeshPtr v2Mesh;
  164.  
  165.         v1Mesh = Ogre::v1::MeshManager::getSingleton().load("athene.mesh", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, Ogre::v1::HardwareBuffer::HBU_STATIC, Ogre::v1::HardwareBuffer::HBU_STATIC );
  166.         v2Mesh = Ogre::MeshManager::getSingleton().createManual("athene.mesh Imported", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
  167.  
  168.         bool halfPosition   = true;
  169.         bool halfUVs        = true;
  170.         bool useQtangents   = true;
  171.  
  172.         v2Mesh->importV1( v1Mesh.get(), halfPosition, halfUVs, useQtangents );
  173.         v1Mesh->unload();
  174.  
  175.         Ogre::Item *item = lSceneMgr->createItem( "athene.mesh Imported", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, Ogre::SCENE_DYNAMIC);
  176.         Ogre::SceneNode *sceneNode = lSceneMgr->getRootSceneNode(Ogre::SCENE_DYNAMIC)->createChildSceneNode( Ogre::SCENE_DYNAMIC );
  177.         sceneNode->attachObject( (Ogre::MovableObject*) item );
  178.         sceneNode->scale( 0.1f, 0.1f, 0.1f );
  179.  
  180.         lSceneMgr->setAmbientLight( Ogre::ColourValue( 0.5, 0.5, 0.5 ) );
  181.  
  182.         Ogre::SceneNode * lightNode = lSceneMgr->getRootSceneNode()->createChildSceneNode();
  183.         lightNode->setPosition( Ogre::Vector3( 20, 80, 50 ) );
  184.         Ogre::Light * light = lSceneMgr->createLight();
  185.         lightNode->attachObject( light );
  186.        
  187.         // CEGUI       
  188.         Ogre::RenderTarget *mRenderTarget = lWindow;
  189.         CEGUI::OgreRenderer& myRenderer = CEGUI::OgreRenderer::bootstrapSystem(*mRenderTarget);
  190.        
  191.         CEGUI::ImageManager::setImagesetDefaultResourceGroup("Imagesets");
  192.         CEGUI::Font::setDefaultResourceGroup("Fonts");
  193.         CEGUI::Scheme::setDefaultResourceGroup("Schemes");
  194.         CEGUI::WidgetLookManager::setDefaultResourceGroup("LookNFeel");
  195.         CEGUI::WindowManager::setDefaultResourceGroup("Layouts");
  196.  
  197.         CEGUI::SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
  198.         CEGUI::System::getSingleton().getDefaultGUIContext().getMouseCursor().setDefaultImage("TaharezLook/MouseArrow");
  199.  
  200.         // Testbutton
  201.         CEGUI::WindowManager &wmgr = CEGUI::WindowManager::getSingleton();
  202.         CEGUI::Window *sheet = wmgr.createWindow("DefaultWindow", "CEGUIDemo/Sheet");
  203.         CEGUI::Window *quit = wmgr.createWindow("TaharezLook/Button", "CEGUIDemo/QuitButton");
  204.         quit->setText("Quit");
  205.         quit->setSize(CEGUI::USize(CEGUI::UDim(0.15, 0), CEGUI::UDim(0.05, 0)));
  206.         sheet->addChild(quit);
  207.         CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(sheet);
  208.  
  209.         bool renderWindow=CEGUI::System::getSingleton().getDefaultGUIContext().isRenderingWindow();
  210.         bool renderEnabled=myRenderer.isRenderingEnabled();
  211.  
  212.         // Messagepump
  213.         while(!lWindow->isClosed())
  214.         {                      
  215.             float dt = 1e-2f;
  216.            
  217.             CEGUI::GUIContext& defaultGUIContext(CEGUI::System::getSingleton().getDefaultGUIContext());            
  218.             defaultGUIContext.injectTimePulse(dt);
  219.  
  220.             CEGUI::System::getSingleton().renderAllGUIContexts();
  221.            
  222.             lRoot->renderOneFrame();
  223.             Ogre::WindowEventUtilities::messagePump();
  224.         }
  225.  
  226.     }
  227.     catch(std::exception &e)
  228.     {  
  229.         std::cout << "!!!std:exception!!!" << e.what() << std::endl;
  230.     }
  231.  
  232.     return 1;
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement