I'm following tutorial "Basic Tutorial 6: CEGUI" on the www.ogre3d.org website.
Tutorial 6
I've already posted a similar topic on the Ogre forums, but my problem is coming from the CEGUI stuff, so I thought I might post here.
I'm using gentoo Linux with OGRE 1.0.3 and CEGUI 0.3.0 .
The source code I have so far is:
Code: Select all
#include <CEGUI/CEGUIImageset.h>
#include <CEGUI/CEGUISystem.h>
#include <CEGUI/CEGUILogger.h>
#include <CEGUI/CEGUISchemeManager.h>
#include <CEGUI/CEGUIWindowManager.h>
#include <CEGUI/CEGUIWindow.h>
#include <CEGUI/CEGUIBase.h>
#include "OgreCEGUIRenderer.h"
#include "OgreCEGUIResourceProvider.h"
#include "ExampleApplication.h"
#include <CEGUI/elements/CEGUIPushButton.h>
//using namespace CEGUI;
class GuiFrameListener : public ExampleFrameListener
{
private:
CEGUI::Renderer* mGUIRenderer;
public:
GuiFrameListener(RenderWindow* win, Camera* cam,
CEGUI::Renderer* renderer): ExampleFrameListener(win, cam),
mGUIRenderer(renderer){
}
};
class TutorialApplication : public ExampleApplication
{
private:
CEGUI::OgreCEGUIRenderer* mGUIRenderer;
CEGUI::System* mGUISystem;
CEGUI::Window* mEditorGuiSheet;
public:
TutorialApplication(): mGUIRenderer(0),
mGUISystem(0),
mEditorGuiSheet(0){
}
~TutorialApplication(){
if(mEditorGuiSheet){
CEGUI::
WindowManager::
getSingleton().destroyWindow(mEditorGuiSheet);
}
if(mGUISystem){
delete mGUISystem;
mGUISystem = 0;
}
if(mGUIRenderer){
delete mGUIRenderer;
mGUIRenderer = 0;
}
}
protected:
void createScene(void){
mSceneMgr->setAmbientLight( ColourValue(0.25, 0.25, 0.25));
Entity *ent = mSceneMgr->createEntity("Ninja", "ninja.mesh");
SceneNode *node =
mSceneMgr->getRootSceneNode()->createChildSceneNode("NinjaNode");
node->attachObject(ent);
Light *light = mSceneMgr->createLight("Light1");
light->setType(Light::LT_POINT);
light->setPosition(Vector3(250,150,250));
light->setDiffuseColour(ColourValue::White);
light->setSpecularColour( ColourValue::White);
node =
mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode1",
Vector3(-400, 200,
400));
node->yaw (Degree(-45));
node = node->createChildSceneNode( "PitchNode1");
node->attachObject(mCamera);
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode2",
Vector3(0, 200,
400));
node = node->createChildSceneNode("PitchNode2");
// set up GUI system
CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Informative);
mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow,
Ogre::RENDER_QUEUE_OVERLAY,
false,
3000);
mGUISystem = new CEGUI::System(mGUIRenderer);
RenderTexture* rttTex =
mRoot->getRenderSystem()->createRenderTexture( "RttTex", 512, 512,
TEX_TYPE_2D, PF_R8G8B8);
{
Camera *rttCam = mSceneMgr->createCamera("RttCam");
SceneNode* camNode =
mSceneMgr->getRootSceneNode()->createChildSceneNode("rttCamNode");
camNode->attachObject(rttCam);
rttCam->setPosition(0,0,200);
//rttCam->setVisible(true)
Viewport *v = rttTex->addViewport (rttCam);
v->setOverlaysEnabled(false);
v->setClearEveryFrame(true);
v->setBackgroundColour( ColourValue::Black);
}
CEGUI::Texture* rttTexture =
mGUIRenderer->createTexture((CEGUI::utf8*)"RttTex");
CEGUI::Imageset* rttImageSet =
CEGUI::ImagesetManager::
getSingleton().createImageset((CEGUI::utf8*)"RttImageset", rttTexture);
rttImageSet->defineImage((CEGUI::utf8*)"RttImage",
CEGUI::Point(0.0f,0.0f),
CEGUI::Size(rttTexture->getWidth(),
rttTexture->getHeight()),
CEGUI::Point(0.0f, 0.0f));
CEGUI::
SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"Taharez.scheme");
mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook",
(CEGUI::utf8*)"MouseArrow");
mGUISystem->setDefaultFont((CEGUI::utf8*)"Tahoma-12");
mEditorGuiSheet =
CEGUI::
WindowManager::
getSingleton().createWindow((CEGUI::utf8*)"DefaultWindow",
(CEGUI::utf8*)"Sheet");
mGUISystem->setGUISheet(mEditorGuiSheet);
CEGUI::PushButton* quitButton =
(CEGUI::PushButton*)CEGUI::
WindowManager::
getSingleton().createWindow("TaharezLook/Button",
(CEGUI::utf8*)"Quit");
mEditorGuiSheet->addChildWindow(quitButton);
quitButton->setPosition(CEGUI::Point(0.35f, 0.45f));
quitButton->setSize(CEGUI::Size(0.3f, 0.1f));
quitButton->setText("Quit");
}
void createFrameListener(void)
{
mFrameListener = new GuiFrameListener(mWindow, mCamera, mGUIRenderer);
mRoot->addFrameListener(mFrameListener);
}
};
int main(int argc, char **argv)
{
TutorialApplication app;
try{
app.go();
}catch( Exception& e){
fprintf(stderr, "An exception has occured: %s\n",
e.getFullDescription().c_str());
}
return 0;
}Using printstatements and debuggers I've narrowed down the problem to the lines:
Code: Select all
mGUISystem = new CEGUI::System(mGUIRenderer);I've also determined that mGUIRenderer is not NULL and mWindow is not NULL.
This is the line in context:
Code: Select all
mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow,
Ogre::RENDER_QUEUE_OVERLAY,
false,
3000);
mGUISystem = new CEGUI::System(mGUIRenderer);When I run the program I get an error message from the CEGUI Log:
Code: Select all
test: ../include/CEGUISingleton.h:66: static T& CEGUI::Singleton<T>::getSingleton() [with T = CEGUI::Logger]: Assertion `ms_Singleton' failed.
AbortedThanks!
