Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <OgreRoot.h>
- #include <OgreCamera.h>
- #include <OgreViewport.h>
- #include <OgreSceneManager.h>
- #include <OgreRenderWindow.h>
- #include <OgreEntity.h>
- #include <OgreWindowEventUtilities.h>
- #include <OgreMeshManager.h>
- #include <OgreMesh.h>
- #include <OgreSubMesh.h>
- #include <OgreTechnique.h>
- #include <OgreMaterialManager.h>
- #include <OgreMaterial.h>
- #include <OgreQuaternion.h>
- #include <OgreManualObject.h>
- #include <OgreFrameListener.h>
- #include <OIS/OIS.h>
- #ifdef OGRE20
- #include <Compositor/OgreTextureDefinition.h>
- #include <Compositor/OgreCompositorManager2.h>
- #include <Compositor/OgreCompositorCommon.h>
- #include <Compositor/OgreCompositorWorkspaceDef.h>
- #include <Compositor/OgreCompositorWorkspace.h>
- #include <Compositor/OgreCompositorNodeDef.h>
- #include <Compositor/Pass/PassClear/OgreCompositorPassClear.h>
- #include <Compositor/Pass/PassScene/OgreCompositorPassScene.h>
- #endif //ogre 20
- #include <cegui\CEGUI.h>
- #include <cegui\RendererModules/Ogre\Renderer.h>
- #include <cegui\RendererModules/Ogre\WindowTarget.h>
- #include <CEGUI\RendererModules\Ogre\ResourceProvider.h>
- #include <CEGUI\RendererModules\Ogre\ImageCodec.h>
- #include <sstream>
- #include <string>
- #include <fstream>
- struct CEGUIOgreInterface : public Ogre::FrameListener, public OIS::KeyListener, public OIS::MouseListener
- {
- public:
- CEGUIOgreInterface(Ogre::RenderWindow *window)
- {
- this->window = window;
- ceguiOgreRenderer = &CEGUI::OgreRenderer::create(*window);
- //ceguiOgreRenderer->setDefaultRootRenderTarget(*window);
- if(!CEGUI::System::getSingletonPtr())
- {
- CEGUI::System *system = &CEGUI::System::create(*ceguiOgreRenderer, new CEGUI::OgreResourceProvider(), 0, new CEGUI::OgreImageCodec());
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Imagesets");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/imagesets", "FileSystem", "Imagesets");
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Fonts");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/fonts", "FileSystem", "Fonts");
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Schemes");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/schemes", "FileSystem", "Schemes");
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("LookNFeel");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/looknfeel", "FileSystem", "LookNFeel");
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Layouts");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/CeguiData/layouts", "FileSystem", "Layouts");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data", "FileSystem", "Layouts");
- CEGUI::ImageManager::setImagesetDefaultResourceGroup("Imagesets");
- CEGUI::Font::setDefaultResourceGroup("Fonts");
- CEGUI::Scheme::setDefaultResourceGroup("Schemes");
- CEGUI::WidgetLookManager::setDefaultResourceGroup("LookNFeel");
- CEGUI::WindowManager::setDefaultResourceGroup("Layouts");
- CEGUI::SchemeManager::getSingleton().createFromFile("AlfiskoSkin.scheme");
- CEGUI::SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
- CEGUI::SchemeManager::getSingleton().createFromFile("OgreTray.scheme");
- CEGUI::SchemeManager::getSingleton().createFromFile("VanillaSkin.scheme");
- CEGUI::SchemeManager::getSingleton().createFromFile("Generic.scheme");
- }
- /*for(
- CEGUI::ImageManager::ImageIterator it = CEGUI::ImageManager::getSingleton().getIterator();
- !it.isAtEnd();
- it++)
- {
- printf("Img: %s\n", it.getCurrentValue().first->getName().c_str());
- }*/
- renderTarget = new CEGUI::OgreWindowTarget(*ceguiOgreRenderer, *Ogre::Root::getSingleton().getRenderSystem(), *window);
- guiContext = &CEGUI::System::getSingleton().createGUIContext(*renderTarget);
- //guiContext->getCursor().setDefaultImage("OgreTrayImages/MouseArrow");
- Ogre::Root::getSingleton().addFrameListener(this);
- ceguiOgreRenderer->setRenderingEnabled(false);
- InitInput();
- }
- bool frameStarted(const Ogre::FrameEvent& evt)
- {
- return true;
- }
- bool frameEnded(const Ogre::FrameEvent& evt)
- {
- return true;
- }
- virtual bool keyPressed(const OIS::KeyEvent& keyEvent)
- {
- inputReceiver->injectKeyDown((CEGUI::Key::Scan)keyEvent.key);
- inputReceiver->injectChar((CEGUI::Key::Scan)keyEvent.text);
- return true;
- }
- virtual bool keyReleased(const OIS::KeyEvent& keyEvent)
- {
- inputReceiver->injectKeyUp((CEGUI::Key::Scan)keyEvent.key);
- return true;
- }
- virtual bool mousePressed(const OIS::MouseEvent& mouseEvent, OIS::MouseButtonID buttonId)
- {
- inputReceiver->injectMouseButtonDown((CEGUI::MouseButton)buttonId);
- return true;
- }
- virtual bool mouseReleased (const OIS::MouseEvent& mouseEvent, OIS::MouseButtonID buttonId)
- {
- inputReceiver->injectMouseButtonUp((CEGUI::MouseButton)buttonId);
- return true;
- }
- virtual bool mouseMoved(const OIS::MouseEvent& mouseEvent)
- {
- //we're not injecting mouse movement because it's broken with non-exclusive mouse
- //inputReceiver->injectMouseMove(mouseEvent.state.X.rel, mouseEvent.state.Y.rel);
- // Scroll wheel.
- if (mouseEvent.state.Z.rel)
- inputReceiver->injectMouseWheelChange(mouseEvent.state.Z.rel / 120.0f);
- return true;
- }
- bool frameRenderingQueued(const Ogre::FrameEvent& args)
- {
- if(window->isClosed())
- return true;
- const OIS::MouseState state = mouseInput->getMouseState();
- inputReceiver->injectMousePosition(state.X.abs,state.Y.abs);
- ceguiOgreRenderer->updateWorkspaceRenderTarget(*window);
- CEGUI::System& guiSystem(CEGUI::System::getSingleton());
- float dt = 1e-2f;
- keyboardInput->capture();
- mouseInput->capture();
- unsigned int w, h, d;
- int left, top;
- window->getMetrics(w, h, d, left, top);
- const OIS::MouseState &ms = mouseInput->getMouseState();
- ms.width = w;
- ms.height = h;
- ceguiOgreRenderer->initialiseRenderStateSettings(); //this line actually
- ceguiOgreRenderer->beginRendering();
- CEGUI::System::getSingleton().injectTimePulse(1e-2f);
- guiContext->draw();
- ceguiOgreRenderer->endRendering();
- CEGUI::WindowManager::getSingleton().cleanDeadPool();
- return true;
- }
- CEGUI::GUIContext *GetCeguiContext()
- {
- return guiContext;
- }
- private:
- void InitInput()
- {
- OIS::ParamList parameterList;
- size_t windowHnd = 0;
- std::ostringstream windowHndStr;
- window->getCustomAttribute("WINDOW", &windowHnd);
- windowHndStr << windowHnd;
- parameterList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
- parameterList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" )));
- parameterList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));
- parameterList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND")));
- parameterList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE")));
- inputManager = OIS::InputManager::createInputSystem(parameterList);
- keyboardInput = static_cast<OIS::Keyboard*>(inputManager->createInputObject( OIS::OISKeyboard, true ));
- mouseInput = static_cast<OIS::Mouse*>(inputManager->createInputObject( OIS::OISMouse, true ));
- keyboardInput->setEventCallback(this);
- mouseInput->setEventCallback(this);
- #ifdef OGRE20
- inputReceiver = new CEGUI::InputAggregator(guiContext);
- #else
- inputReceiver = guiContext;
- #endif
- //Register as a Window listener
- //Ogre::WindowEventUtilities::addWindowEventListener(window, this);
- Ogre::Root::getSingleton().addFrameListener(this);
- }
- CEGUI::OgreRenderer *ceguiOgreRenderer;
- CEGUI::RenderTarget *renderTarget;
- CEGUI::GUIContext *guiContext;
- Ogre::RenderWindow *window;
- OIS::InputManager *inputManager;
- OIS::Keyboard *keyboardInput;
- OIS::Mouse *mouseInput;
- #ifdef OGRE20
- CEGUI::InputAggregator *inputReceiver;
- #else
- CEGUI::GUIContext *inputReceiver;
- #endif
- };
- int main( int argc, char **argv )
- {
- Ogre::String configSuffix = "";
- #ifdef _DEBUG
- configSuffix = "_d";
- #endif
- Ogre::String pluginsFileName = "OgrePlugins" + configSuffix + ".cfg";
- Ogre::String configFileName = "OgreConfig" + configSuffix + ".cfg";
- Ogre::String logFileName = "OgreLog" + configSuffix + ".log";
- Ogre::Root *root = new Ogre::Root(pluginsFileName, configFileName, logFileName);
- //Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("Direct3D11 Rendering Subsystem");
- //Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("Direct3D9 Rendering Subsystem");
- Ogre::RenderSystem *renderSystem = root->getRenderSystemByName("OpenGL Rendering Subsystem");
- root->setRenderSystem(renderSystem);
- renderSystem->setConfigOption("Full Screen", "No");
- renderSystem->setConfigOption("Video Mode", "800 x 600 @ 32-bit colour");
- root->initialise(false);
- //Ogre::RenderWindow *window = root->getAutoCreatedWindow();
- Ogre::RenderWindow *window = root->createRenderWindow("Awesome window", 800, 600, false);
- Ogre::RenderWindow *window2 = root->createRenderWindow("Awesome window 2!", 800, 600, false);
- #ifdef OGRE20
- Ogre::SceneManager* sceneManager = root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, /*"DefaultSceneManager", */8, Ogre::INSTANCING_CULLING_THREADED);
- Ogre::SceneManager* sceneManager2 = root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, /*"DefaultSceneManager", */8, Ogre::INSTANCING_CULLING_THREADED);
- #else //OGRE20
- Ogre::SceneManager* sceneManager = root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, "SceneManager1");
- Ogre::SceneManager* sceneManager2 = root->createSceneManager(Ogre::ST_EXTERIOR_CLOSE, "SceneManager2");
- #endif //OGRE20
- /*
- HWND hWnd = 0; // Get the hWnd of the application!
- NameValuePairList misc;
- misc["externalWindowHandle"] = StringConverter::toString((int)hWnd);
- Ogre::RenderWindow *window = root->createRenderWindow("Main RenderWindow", 800, 600, false, &misc);*/
- Ogre::ResourceGroupManager::getSingleton().createResourceGroup("Manual meshes");
- Ogre::ResourceGroupManager::getSingleton().addResourceLocation("data", "FileSystem");
- Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
- Ogre::Camera *camera = sceneManager->createCamera("Cool camera");
- Ogre::Camera *camera2 = sceneManager->createCamera("Cool camera2");
- camera->setPosition(Ogre::Vector3(0.0f, 1500.0f, 1500.0f));
- camera->lookAt(Ogre::Vector3(0.0f, 0.0f, 0.0f));
- camera->setNearClipDistance(5.0f);
- camera->setFarClipDistance(10000.0f);
- Ogre::Radian fov = camera->getFOVy();
- #ifdef OGRE20
- Ogre::CompositorManager2 *compositorManager = root->getCompositorManager2();
- const Ogre::IdString workspaceName("Awesome workspace1");
- compositorManager->createBasicWorkspaceDef( workspaceName, Ogre::ColourValue(0.5f, 0.5f, 0.5f, 0.5f), Ogre::IdString());
- compositorManager->addWorkspace( sceneManager, window, camera, workspaceName, true );
- Ogre::Viewport* viewport = window->getViewport(0);
- camera->setAspectRatio(Ogre::Real(viewport->getActualWidth()) / Ogre::Real(viewport->getActualHeight()));
- //experiments with not creating a workspace
- /*const Ogre::IdString workspaceName2("Awesome workspace2");
- compositorManager->createBasicWorkspaceDef( workspaceName2, Ogre::ColourValue(0.5f, 0.5f, 0.5f, 0.5f), Ogre::IdString());
- compositorManager->addWorkspace( sceneManager2, window2, camera2, workspaceName2, true );
- Ogre::Viewport* viewport2 = window2->getViewport(0);
- camera2->setAspectRatio(Ogre::Real(viewport2->getActualWidth()) / Ogre::Real(viewport2->getActualHeight()));*/
- #else //OGRE20
- Ogre::Viewport* viewport = window->addViewport(camera);
- viewport->setBackgroundColour(Ogre::ColourValue(0.5f, 0.5f, 0.5f, 1.0f));
- Ogre::Viewport* viewport2 = window2->addViewport(camera2);
- viewport2->setBackgroundColour(Ogre::ColourValue(0.5f, 0.5f, 0.5f, 1.0f));
- #endif
- CEGUIOgreInterface ceguiInterface(window);
- CEGUI::GUIContext *guiContext = ceguiInterface.GetCeguiContext();
- CEGUI::Window *testWindow = CEGUI::WindowManager::getSingleton().loadLayoutFromFile("test.layout", "Layouts");
- guiContext->setRootWindow(testWindow);
- CEGUIOgreInterface ceguiInterface2(window2);
- CEGUI::GUIContext *guiContext2 = ceguiInterface2.GetCeguiContext();
- CEGUI::Window *testWindow2 = CEGUI::WindowManager::getSingleton().loadLayoutFromFile("testAlfisko.layout", "Layouts");
- guiContext2->setRootWindow(testWindow2);
- bool running = 1;
- float time = 0.0f;
- bool firstTime = 1;
- while(running)
- {
- float dt = 1e-2f;
- time += dt; //we don't need actual time, just a value increasing with time
- Ogre::WindowEventUtilities::messagePump();
- CEGUI::System::getSingleton().injectTimePulse(dt);
- if(window->isClosed())
- running = 0;
- root->renderOneFrame();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement