Changeset View
Changeset View
Standalone View
Standalone View
source/gameengine/Ketsji/KX_KetsjiEngine.cpp
| Show First 20 Lines • Show All 306 Lines • ▼ Show 20 Lines | void KX_KetsjiEngine::RenderDome() | ||||
| int n_renders=m_dome->GetNumberRenders();// usually 4 or 6 | int n_renders=m_dome->GetNumberRenders();// usually 4 or 6 | ||||
| for (int i=0;i<n_renders;i++) { | for (int i=0;i<n_renders;i++) { | ||||
| m_canvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER|RAS_ICanvas::DEPTH_BUFFER); | m_canvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER|RAS_ICanvas::DEPTH_BUFFER); | ||||
| for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | ||||
| // for each scene, call the proceed functions | // for each scene, call the proceed functions | ||||
| { | { | ||||
| scene = *sceneit; | scene = *sceneit; | ||||
| KX_Camera* cam = scene->GetActiveCamera(); | KX_Camera* activecam = scene->GetActiveCamera(); | ||||
| // pass the scene's worldsettings to the rasterizer | // pass the scene's worldsettings to the rasterizer | ||||
| SetWorldSettings(scene->GetWorldInfo()); | SetWorldSettings(scene->GetWorldInfo()); | ||||
| // shadow buffers | // shadow buffers | ||||
| if (i == 0) { | if (i == 0) { | ||||
| RenderShadowBuffers(scene); | RenderShadowBuffers(scene); | ||||
| } | } | ||||
| // Avoid drawing the scene with the active camera twice when it's viewport is enabled | // Avoid drawing the scene with the active camera twice when it's viewport is enabled | ||||
| if (cam && !cam->GetViewport()) | if (activecam && !activecam->GetViewport()) | ||||
| { | { | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| m_dome->RenderDomeFrame(scene,cam, i); | m_dome->RenderDomeFrame(scene, activecam, i); | ||||
| //render all the font objects for this scene | //render all the font objects for this scene | ||||
| scene->RenderFonts(); | scene->RenderFonts(); | ||||
| } | } | ||||
| list<class KX_Camera*>* cameras = scene->GetCameras(); | CListValue* cameras = scene->GetCameraList(); | ||||
| // Draw the scene once for each camera with an enabled viewport | // Draw the scene once for each camera with an enabled viewport | ||||
| list<KX_Camera*>::iterator it = cameras->begin(); | for (unsigned int i = 0; i < cameras->GetCount(); ++i) | ||||
| while (it != cameras->end()) { | { | ||||
| if ((*it)->GetViewport()) | KX_Camera* cam = (KX_Camera*)cameras->GetValue(i); | ||||
| if (cam->GetViewport()) | |||||
| { | { | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| m_dome->RenderDomeFrame(scene, (*it),i); | m_dome->RenderDomeFrame(scene, cam,i); | ||||
| //render all the font objects for this scene | //render all the font objects for this scene | ||||
| scene->RenderFonts(); | scene->RenderFonts(); | ||||
| } | } | ||||
| it++; | |||||
| } | } | ||||
| // Part of PostRenderScene() | // Part of PostRenderScene() | ||||
| m_rasterizer->MotionBlur(); | m_rasterizer->MotionBlur(); | ||||
| scene->Render2DFilters(m_canvas); | scene->Render2DFilters(m_canvas); | ||||
| // no RunDrawingCallBacks | // no RunDrawingCallBacks | ||||
| // no FlushDebugLines | // no FlushDebugLines | ||||
| } | } | ||||
| m_dome->BindImages(i); | m_dome->BindImages(i); | ||||
| ▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | void KX_KetsjiEngine::ClearFrame() | ||||
| bool doclear = false; | bool doclear = false; | ||||
| KX_SceneList::iterator sceneit; | KX_SceneList::iterator sceneit; | ||||
| RAS_Rect clearvp, area, viewport; | RAS_Rect clearvp, area, viewport; | ||||
| for (sceneit = m_scenes.begin(); sceneit != m_scenes.end(); sceneit++) | for (sceneit = m_scenes.begin(); sceneit != m_scenes.end(); sceneit++) | ||||
| { | { | ||||
| KX_Scene* scene = *sceneit; | KX_Scene* scene = *sceneit; | ||||
| //const RAS_FrameSettings &framesettings = scene->GetFramingType(); | //const RAS_FrameSettings &framesettings = scene->GetFramingType(); | ||||
| list<class KX_Camera*>* cameras = scene->GetCameras(); | CListValue* cameras = scene->GetCameraList(); | ||||
| list<KX_Camera*>::iterator it; | for (unsigned int i = 0; i < cameras->GetCount(); ++i) | ||||
| for (it = cameras->begin(); it != cameras->end(); it++) | |||||
| { | { | ||||
| GetSceneViewport(scene, (*it), area, viewport); | KX_Camera* cam = (KX_Camera*)cameras->GetValue(i); | ||||
| GetSceneViewport(scene, cam, area, viewport); | |||||
| if (!doclear) { | if (!doclear) { | ||||
| clearvp = viewport; | clearvp = viewport; | ||||
| doclear = true; | doclear = true; | ||||
| } | } | ||||
| else { | else { | ||||
| if (viewport.GetLeft() < clearvp.GetLeft()) | if (viewport.GetLeft() < clearvp.GetLeft()) | ||||
| clearvp.SetLeft(viewport.GetLeft()); | clearvp.SetLeft(viewport.GetLeft()); | ||||
| if (viewport.GetBottom() < clearvp.GetBottom()) | if (viewport.GetBottom() < clearvp.GetBottom()) | ||||
| clearvp.SetBottom(viewport.GetBottom()); | clearvp.SetBottom(viewport.GetBottom()); | ||||
| if (viewport.GetRight() > clearvp.GetRight()) | if (viewport.GetRight() > clearvp.GetRight()) | ||||
| clearvp.SetRight(viewport.GetRight()); | clearvp.SetRight(viewport.GetRight()); | ||||
| if (viewport.GetTop() > clearvp.GetTop()) | if (viewport.GetTop() > clearvp.GetTop()) | ||||
| clearvp.SetTop(viewport.GetTop()); | clearvp.SetTop(viewport.GetTop()); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (doclear) { | if (doclear) { | ||||
| KX_Scene* firstscene = *m_scenes.begin(); | KX_Scene* firstscene = *m_scenes.begin(); | ||||
| SetBackGround(firstscene->GetWorldInfo()); | SetBackGround(firstscene->GetWorldInfo()); | ||||
| ▲ Show 20 Lines • Show All 338 Lines • ▼ Show 20 Lines | void KX_KetsjiEngine::Render() | ||||
| if (!BeginFrame()) | if (!BeginFrame()) | ||||
| return; | return; | ||||
| KX_SceneList::iterator sceneit; | KX_SceneList::iterator sceneit; | ||||
| for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | ||||
| // for each scene, call the proceed functions | // for each scene, call the proceed functions | ||||
| { | { | ||||
| KX_Scene* scene = *sceneit; | KX_Scene* scene = *sceneit; | ||||
| KX_Camera* cam = scene->GetActiveCamera(); | KX_Camera* activecam = scene->GetActiveCamera(); | ||||
| // pass the scene's worldsettings to the rasterizer | // pass the scene's worldsettings to the rasterizer | ||||
| SetWorldSettings(scene->GetWorldInfo()); | SetWorldSettings(scene->GetWorldInfo()); | ||||
| // this is now done incrementatlly in KX_Scene::CalculateVisibleMeshes | // this is now done incrementatlly in KX_Scene::CalculateVisibleMeshes | ||||
| //scene->UpdateMeshTransformations(); | //scene->UpdateMeshTransformations(); | ||||
| // shadow buffers | // shadow buffers | ||||
| RenderShadowBuffers(scene); | RenderShadowBuffers(scene); | ||||
| // Avoid drawing the scene with the active camera twice when it's viewport is enabled | // Avoid drawing the scene with the active camera twice when it's viewport is enabled | ||||
| if (cam && !cam->GetViewport()) | if (activecam && !activecam->GetViewport()) | ||||
| { | { | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| RenderFrame(scene, cam); | RenderFrame(scene, activecam); | ||||
| } | } | ||||
| list<class KX_Camera*>* cameras = scene->GetCameras(); | CListValue* cameras = scene->GetCameraList(); | ||||
| // Draw the scene once for each camera with an enabled viewport | // Draw the scene once for each camera with an enabled viewport | ||||
| list<KX_Camera*>::iterator it = cameras->begin(); | for (unsigned int i = 0; i < cameras->GetCount(); ++i) | ||||
| while (it != cameras->end()) { | { | ||||
| if ((*it)->GetViewport()) | KX_Camera* cam = (KX_Camera*)cameras->GetValue(i); | ||||
| if (cam->GetViewport()) | |||||
| { | { | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| RenderFrame(scene, (*it)); | RenderFrame(scene, cam); | ||||
| } | } | ||||
| it++; | |||||
| } | } | ||||
| PostRenderScene(scene); | PostRenderScene(scene); | ||||
| } | } | ||||
| // only one place that checks for stereo | // only one place that checks for stereo | ||||
| if (m_rasterizer->Stereo()) | if (m_rasterizer->Stereo()) | ||||
| { | { | ||||
| m_rasterizer->SetEye(RAS_IRasterizer::RAS_STEREO_RIGHTEYE); | m_rasterizer->SetEye(RAS_IRasterizer::RAS_STEREO_RIGHTEYE); | ||||
| if (!BeginFrame()) | if (!BeginFrame()) | ||||
| return; | return; | ||||
| for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++) | ||||
| // for each scene, call the proceed functions | // for each scene, call the proceed functions | ||||
| { | { | ||||
| KX_Scene* scene = *sceneit; | KX_Scene* scene = *sceneit; | ||||
| KX_Camera* cam = scene->GetActiveCamera(); | KX_Camera* activecam = scene->GetActiveCamera(); | ||||
| // pass the scene's worldsettings to the rasterizer | // pass the scene's worldsettings to the rasterizer | ||||
| SetWorldSettings(scene->GetWorldInfo()); | SetWorldSettings(scene->GetWorldInfo()); | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| //pass the scene, for picking and raycasting (shadows) | //pass the scene, for picking and raycasting (shadows) | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| //RenderFrame(scene); | //RenderFrame(scene); | ||||
| RenderFrame(scene, cam); | RenderFrame(scene, activecam); | ||||
| list<class KX_Camera*>* cameras = scene->GetCameras(); | CListValue* cameras = scene->GetCameraList(); | ||||
| // Draw the scene once for each camera with an enabled viewport | // Draw the scene once for each camera with an enabled viewport | ||||
| list<KX_Camera*>::iterator it = cameras->begin(); | for (unsigned int i = 0; i < cameras->GetCount(); ++i) | ||||
| while (it != cameras->end()) { | { | ||||
| if ((*it)->GetViewport()) | KX_Camera* cam = (KX_Camera*)cameras->GetValue(i); | ||||
| if (cam->GetViewport()) | |||||
| { | { | ||||
| if (scene->IsClearingZBuffer()) | if (scene->IsClearingZBuffer()) | ||||
| m_rasterizer->ClearDepthBuffer(); | m_rasterizer->ClearDepthBuffer(); | ||||
| m_rasterizer->SetAuxilaryClientInfo(scene); | m_rasterizer->SetAuxilaryClientInfo(scene); | ||||
| // do the rendering | // do the rendering | ||||
| RenderFrame(scene, (*it)); | RenderFrame(scene, cam); | ||||
| } | } | ||||
| it++; | |||||
| } | } | ||||
| PostRenderScene(scene); | PostRenderScene(scene); | ||||
| } | } | ||||
| } // if (m_rasterizer->Stereo()) | } // if (m_rasterizer->Stereo()) | ||||
| EndFrame(); | EndFrame(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 437 Lines • ▼ Show 20 Lines | if (override_camera) { | ||||
| activecam->NodeSetLocalOrientation(camtrans.getBasis()); | activecam->NodeSetLocalOrientation(camtrans.getBasis()); | ||||
| activecam->NodeUpdateGS(0); | activecam->NodeUpdateGS(0); | ||||
| } else { | } else { | ||||
| activecam->NodeSetLocalPosition(MT_Point3(0.0, 0.0, 0.0)); | activecam->NodeSetLocalPosition(MT_Point3(0.0, 0.0, 0.0)); | ||||
| activecam->NodeSetLocalOrientation(MT_Vector3(0.0, 0.0, 0.0)); | activecam->NodeSetLocalOrientation(MT_Vector3(0.0, 0.0, 0.0)); | ||||
| activecam->NodeUpdateGS(0); | activecam->NodeUpdateGS(0); | ||||
| } | } | ||||
| scene->AddCamera(activecam); | scene->GetCameraList()->Add(activecam->AddRef()); | ||||
| scene->SetActiveCamera(activecam); | scene->SetActiveCamera(activecam); | ||||
| scene->GetObjectList()->Add(activecam->AddRef()); | scene->GetObjectList()->Add(activecam->AddRef()); | ||||
| scene->GetRootParentList()->Add(activecam->AddRef()); | scene->GetRootParentList()->Add(activecam->AddRef()); | ||||
| //done with activecam | //done with activecam | ||||
| activecam->Release(); | activecam->Release(); | ||||
| } | } | ||||
| scene->UpdateParents(0.0); | scene->UpdateParents(0.0); | ||||
| ▲ Show 20 Lines • Show All 640 Lines • Show Last 20 Lines | |||||