Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Game Development
  4. Trouble getting Ogre window to display properly.
QtWS25 Last Chance

Trouble getting Ogre window to display properly.

Scheduled Pinned Locked Moved Game Development
1 Posts 1 Posters 3.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    ProgrammerAtHeart3344
    wrote on 16 Oct 2010, 21:41 last edited by
    #1

    I've been trying to follow tutoria;ls and experiment setting up Ogre with QtGUI but i've run into some problems.
    first, the Widget is like 100x30 no matter what size i make it, and i find it funny that if i pick Direct3D9 renderer i get openGL if i pick OpenGL i get D3D9.........
    Here's the output of the window when i run the program:

    !http://fc04.deviantart.net/fs70/i/2010/289/6/7/lol2_by_programmer3344-d30w1bn.jpg(This is what appears)!

    now here is my code for it:

    Header:

    @
    #ifndef CRENDERER_H
    #define CRENDERER_H

    #include <Ogre.h>
    #include <QtGui/QWidget>

    #if defined(_DEBUG)
    #pragma comment(lib,"OgreMain_d.lib")
    #else
    #pragma comment(lib,"OgreMain.lib")
    #endif
    using namespace Ogre;

    class CRenderer : public QWidget
    {
    public:
    CRenderer(QWidget* win);

    ~CRenderer();

    void createRenderer(Ogre::String rendererName);

    void DrawScene();

    private:
    QWidget* m_pWindow;
    QString dims;

    Root* m_pIRoot;
    RenderWindow* m_pIRenderWindow;
    Camera* m_pICamera;
    Viewport* m_pIViewport;
    SceneManager* m_pSceneMgr;

    Ogre::String m_pIResources;
    Ogre::String m_pIPlugins;

    Ogre::String m_pILog;

    };

    @

    Souce:

    @
    #include "CRenderer.h"

    CRenderer::CRenderer(QWidget* win)
    : QWidget(win)
    {
    this->m_pWindow = win;
    }

    CRenderer::~CRenderer()
    {

    }

    void CRenderer::createRenderer(Ogre::String rendererName)
    {
    #if defined(_DEBUG)
    this->m_pIPlugins = "Irrational_Plugins_d.cfg";
    this->m_pILog = "Engine_log_d.log";
    #else
    this->m_pIPlugins = "Irrational_Plugins.cfg";
    m_pILog = "Engine_log.log";
    #endif

    m_pIRoot = new Root(this->m_pIPlugins,"Engine.cfg",this->m_pILog);

    #if defined(_DEBUG)
    this->m_pIResources = "Engine_resources_d.cfg";
    #else
    this->m_pIResources = "Engine_resources.cfg";
    #endif

    ConfigFile cf;
    cf.load(this->m_pIResources);

    Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();

    Ogre::String secName,
    typeName,
    archName;

    while(seci.hasMoreElements())
    {
    secName = seci.peekNextKey();
    Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
    Ogre::ConfigFile::SettingsMultiMap::iterator i;
    for (i = settings->begin(); i != settings->end(); ++i)
    {
    typeName = i->first;
    archName = i->second;
    Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
    archName, typeName, secName);
    }
    }

    RenderSystemList rList = m_pIRoot->getAvailableRenderers();
    RenderSystemList::iterator i = rList.begin();
    RenderSystem* RenderSys;
    while (i != rList.end())
    {
    RenderSys = (*i++);

    if(RenderSys->getName().find(rendererName))
    {
    m_pIRoot->setRenderSystem(RenderSys);
    }

    }

    if(RenderSys == 0)
    {
    delete m_pIRoot;
    MessageBoxA(NULL,"No render system detected","ERROR",MB_OK | MB_ICONINFORMATION);
    return;
    }
    this->dims = QString("%1x%2").arg(this->m_pWindow->width()).arg(this->m_pWindow->height());

    RenderSys->setConfigOption("Video Mode", dims.toStdString());
    RenderSys->setConfigOption("Full Screen", "No");
    m_pIRoot->saveConfig();

    m_pIRoot->initialise(false);

    Ogre::String WinHandle;
    WinHandle += StringConverter::toString((unsigned int)(this->m_pWindow->winId()));

    Ogre::NameValuePairList pList;
    pList["externalWindowHandle"] = WinHandle;
    this->m_pIRenderWindow = m_pIRoot->createRenderWindow("The Irrational Engine v1.0",
    m_pWindow->width(),
    m_pWindow->height(),
    false,
    &pList);

    WId OWindow = 0x0;
    m_pIRenderWindow->getCustomAttribute("WINDOW",&OWindow);

    this->create(OWindow);

    m_pIRenderWindow->resize(this->m_pWindow->width(),
    this->m_pWindow->height());
    setAttribute(Qt::WA_PaintOnScreen,true);
    setAttribute(Qt::WA_NoBackground);

    Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(10);

    Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

    this->m_pSceneMgr = m_pIRoot->createSceneManager(ST_GENERIC,"Main");

    this->m_pICamera = m_pSceneMgr->createCamera("Main Camera");
    m_pICamera->setPosition(0,0,500);
    m_pICamera->lookAt(0,0,0);

    this->m_pIViewport = m_pIRenderWindow->addViewport(m_pICamera);

    this->m_pIViewport->setBackgroundColour(ColourValue::Blue);

    m_pIRenderWindow->setActive(true);
    m_pIRenderWindow->update();

    }

    void CRenderer::DrawScene()
    {
    m_pIRoot->renderOneFrame();
    }

    @

    How i'm calling this class:

    @

    CRenderer* Win = new CRenderer(w.getCentral());

    try
    {
    Win->createRenderer("OpenGL");
    }
    catch(Ogre::Exception &e)
    {
    MessageBoxA(NULL,e.getFullDescription().c_str(),"",MB_OK);
    }

    Win->DrawScene();

    w.show();

    @

    hopefully someone can help me other wise i'll ask on the Ogre3D forum, i'm not sure if this is an Ogre problem or a QT4 widget problem (Meaning i might not know how to set it up\ right, which is possible......)

    1 Reply Last reply
    0

    1/1

    16 Oct 2010, 21:41

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved