Using CEGUI with Producer and OpenGL

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Revision as of 23:05, 20 August 2005 by Granx (Talk | contribs)

Jump to: navigation, search

Producer is a cross platform toolkit, best explained on its website. I use it for many things, but creating a window, or Render Surface, is the most fundamental task. CEGUI requires knowledge of the window, mouse, and keyboard interaction. I will show how you can do that with some example code.

Defining a Producer Viewer

The first step is to create some sort of "viewer" with Producer, basically make a Producer::RenderSurface and a Producer::KeyboardMouse. Both of these classes are necessary for using CEGUI correctly. So, here is some example viewer code:

{

  1. include "Viewer.h"

Viewer::Viewer() : _camera(new Producer::Camera()), _rs(0), _kbm(0) {

 _rs = _camera->getRenderSurface();
 _kbm = new Producer::KeyboardMouse(_rs.get());

}

Viewer::~Viewer() {} }

And an application might use this viewer, doing some important initializations:

{ Application::Application(const std::string& fontfile):

 _status(RUNNING), _viewer(new general::Viewer()), _sim(new example::TeapotSim()),
 _scheme_loader_policy("MouseArrow"), _layout_loader_policy(), _script_module(new ApplicationEventHandler())

{

 // OpenGL context specific initializations
 Producer::ref_ptr<Producer::RenderSurface> rs = _viewer->GetRenderSurface();
 rs->addRealizeCallback(new general::InitGL());
 rs->addRealizeCallback(new prce::InitCEGUI(fontfile,_script_module));
 rs->setWindowName("Producer and CEGUI example");
 rs->setWindowRectangle(20,50,800,600);
 // rendering stuff
 _viewer->GetCamera()->setSceneHandler( _sim.get() );
 _viewer->GetCamera()->addPreDrawCallback( new SimulationDrawContext(_sim.get()) );
 _viewer->GetCamera()->addPostDrawCallback(new prce::RenderCEGUI() ); // renders the GUI over scene
 // device input stuff
 Producer::ref_ptr<Producer::KeyboardMouse> kbm = _viewer->GetKeyboardMouse();
 prce::Injector* injector = new prce::Injector( kbm.get() );
 kbm->setCallback( injector );
 kbm->startThread();

} }