#include <rendermanager.h>

Public Member Functions | |
| RenderManager () | |
| Class constructor. | |
| virtual | ~RenderManager () |
| Class destructor. | |
| GLWindow * | GetGLWindow (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 |
Definition at line 24 of file rendermanager.h.
typedef std::vector<GLWindow *> VRUT::RenderManager::WindowList [protected] |
Definition at line 27 of file rendermanager.h.
| 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 }
| 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
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 }
friend class EventManager [friend] |
Definition at line 50 of file rendermanager.h.
WindowList VRUT::RenderManager::windowList [protected] |
1.5.5