Difference between revisions of "Using CEGUI with Producer and OpenGL"
(Using CEGUI via Producer) |
|||
Line 4: | Line 4: | ||
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: | 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: | ||
+ | { | ||
#include "Viewer.h" | #include "Viewer.h" | ||
Viewer::Viewer() : _camera(new Producer::Camera()), _rs(0), _kbm(0) | Viewer::Viewer() : _camera(new Producer::Camera()), _rs(0), _kbm(0) | ||
Line 12: | Line 13: | ||
Viewer::~Viewer() {} | 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(); | ||
+ | } | ||
+ | } |
Revision as of 23:05, 20 August 2005
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:
{
- 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();
} }