VRUT::RenderManager Class Reference

Server managing rendering modules. More...

#include <rendermanager.h>

Inheritance diagram for VRUT::RenderManager:

VRUT::ServerBase< T >

List of all members.

Public Member Functions

 RenderManager ()
 Class constructor.
virtual ~RenderManager ()
 Class destructor.
GLWindowGetGLWindow (RENDER_WINDOW_ID windowID)
 Get GLWindow.
RENDER_WINDOW_ID RenderScene (Scene *scene, NODE_ID cameraID)
void RenderUpdate (SCENE_ID sceneID)
 Update render window contents, applies to all windows displaying given scene.
void DestroyGLWindow (GLWindow *glWin)
 Release module instance connected to GLWindow instance.

Protected Types

typedef std::vector< GLWindow * > WindowList

Protected Attributes

WindowList windowList
 Active GLWindow instances list.

Friends

class EventManager


Detailed Description

Server managing rendering modules.

Definition at line 24 of file rendermanager.h.


Member Typedef Documentation

typedef std::vector<GLWindow *> VRUT::RenderManager::WindowList [protected]

Definition at line 27 of file rendermanager.h.


Constructor & Destructor Documentation

RenderManager::RenderManager (  ) 

Class constructor.

Definition at line 19 of file rendermanager.cpp.

00020               : ServerBase<RenderModule>(RENDER_MANAGER)
00021 {
00022 }

RenderManager::~RenderManager (  )  [virtual]

Class destructor.

Close all GL windows

Definition at line 25 of file rendermanager.cpp.

00026 {
00028        WindowList::iterator glwit;
00029        for (glwit = windowList.begin(); glwit != windowList.end(); glwit++)
00030        {
00031               if (*glwit)
00032               {
00033                      (*glwit)->Deinitialize();
00034                      (*glwit)->SetRenderManager((RenderManager *)NULL);
00035                      (*glwit)->Close();
00036               }
00037        }
00038 }


Member Function Documentation

GLWindow * RenderManager::GetGLWindow ( RENDER_WINDOW_ID  windowID  ) 

Get GLWindow.

Definition at line 41 of file rendermanager.cpp.

00042 {
00043        return ( windowID >= windowList.size() ? (GLWindow *)NULL : windowList[windowID] );
00044 }

RENDER_WINDOW_ID RenderManager::RenderScene ( Scene scene,
NODE_ID  cameraID 
)

Render scene to a window

Parameters:
[in] scene Scene to be rendered
[in] cameraID Camera ID to be associated with window
Returns:
Id of window that was used, RENDER_WINDOW_ID_NONE if failed

Register here so value will not be overwritten when module registers its default

Emulate EVT_PARAM_SET to set variable in module right away

Fix GUI

Register here so value will not be overwritten when module registers its default

Emulate EVT_PARAM_SET to set variable in module right away

Fix GUI

Update projection after frame is shown

Inform about new window

Definition at line 47 of file rendermanager.cpp.

00048 {
00049        if (!scene)
00050        {
00051               LOGERROR(wxString::Format(wxT("%sCannot render NULL scene"), SERVER_CLASS_NAMES[serverID].c_str()));
00052               return RENDER_WINDOW_ID_NONE;
00053        }
00054 
00055        MODULE_ID moduleID = createModuleInstance();
00056        RenderModule * module = getModule(moduleID);
00057        if (module && module->IsOfType(MODULE_TYPE_RENDER))
00058        {
00059               module->SetSceneMgr(KERNEL->sceneManager);
00060               RENDER_WINDOW_ID windowID = RENDER_WINDOW_ID(windowList.size());
00061               wxString title = wxString::Format(wxT("%i (%s) "), windowID, scene->GetName().c_str());
00062               MainWindow * mainWindow = KERNEL->GetMainWindow();
00063               wxAuiNotebook * renderNotebook = mainWindow->GetRenderNotebook();
00064               GLWindow * glw = new GLWindow(renderNotebook, module, windowID, wxDefaultPosition, wxDefaultSize, (int *)NULL, title);
00065               glw->SetRenderManager(this);
00066               windowList.push_back(glw);
00067               if (!glw->CreateGLContext())
00068                      LOGERROR(SERVER_CLASS_NAMES[serverID] + wxT("Failed to create GL context"));
00069               glw->SetFocus();
00070               renderNotebook->AddPage(glw, title, true);
00071 
00072               wxCommandEvent showEvt = Event::GET_EVT_GUI_PANE_SHOW(ID_MainWin_View_RenderNotebook, true);
00073               KERNEL->GetMessageSink()->PostEvent(showEvt);
00074 
00075               Parameter::ParameterIdentificator camPI(module->GetName(), wxT("cameraID"), module->GetID());
00077               KERNEL->environment.RegisterParam(camPI, wxString::Format(wxT("%i"), cameraID));
00079               wxCommandEvent ev1 = Event::GET_EVT_PARAM_SET(camPI, wxString::Format(wxT("%i"), cameraID));
00080               module->PostEvent(ev1, true);
00082               wxCommandEvent ev1g = Event::GET_EVT_PARAM_SET(camPI, wxString::Format(wxT("%i"), cameraID));
00083               KERNEL->GetMessageSink()->PostEvent(ev1g);
00084 
00085               Parameter::ParameterIdentificator scenePI(module->GetName(), wxT("sceneID"), module->GetID());
00087               KERNEL->environment.RegisterParam(scenePI, wxString::Format(wxT("%i"), scene->GetID()));
00089               wxCommandEvent ev2 = Event::GET_EVT_PARAM_SET(scenePI, wxString::Format(wxT("%i"), scene->GetID()));
00090               module->PostEvent(ev2, true);
00091               ModuleHandle<RenderModule>::StartModuleThread(module);
00093               wxCommandEvent ev2g = Event::GET_EVT_PARAM_SET(scenePI, wxString::Format(wxT("%i"), scene->GetID()));
00094               KERNEL->GetMessageSink()->PostEvent(ev2g);
00095 
00097               scene->WriteLock(cameraID);
00098               scene->SetProjectionParams(cameraID, glw->GetClientSize().x, glw->GetClientSize().y);
00099               scene->WriteUnlock(cameraID);
00100 
00102               wxCommandEvent ev3 = Event::GET_EVT_RENDER_WIN_CREATED(windowID);
00103               KERNEL->GetMessageSink()->PostEvent(ev3);
00104 
00105               return windowID;
00106        }
00107        else
00108        {
00109               releaseModule(moduleID);
00110               LOGERROR(SERVER_CLASS_NAMES[serverID] + wxT("No suitable render module found"));
00111               return RENDER_WINDOW_ID_NONE;
00112        }
00113 }

void RenderManager::RenderUpdate ( SCENE_ID  sceneID  ) 

Update render window contents, applies to all windows displaying given scene.

Definition at line 116 of file rendermanager.cpp.

00117 {
00118        for (WindowList::iterator wit = windowList.begin();
00119                wit != windowList.end(); wit++)
00120        {
00121               if (*wit
00122                       && (*wit)->GetRenderModule()
00123                       && (*wit)->GetRenderModule()->GetSceneID() == sceneID)
00124                      (*wit)->draw();
00125        }
00126 }

void RenderManager::DestroyGLWindow ( GLWindow glWin  ) 

Release module instance connected to GLWindow instance.

Definition at line 129 of file rendermanager.cpp.

00130 {
00131        windowList[glWin->GetID()] = (GLWindow *)NULL;
00132        MODULE_ID mid = glWin->GetRenderModule()->GetID();
00133        glWin->Deinitialize();
00134        releaseModule(mid);
00135 }


Friends And Related Function Documentation

friend class EventManager [friend]

Definition at line 50 of file rendermanager.h.


Member Data Documentation

Active GLWindow instances list.

Definition at line 29 of file rendermanager.h.


The documentation for this class was generated from the following files:

Generated on Tue Mar 10 14:41:44 2009 for VRUT by  doxygen 1.5.5