Skip to content

Commit 8e4933f

Browse files
committed
UPBGE: Remove influence of stereo rasterizer member in matrix compute.
Previously the members m_stereomode and m_curreye were used when computing the view and projection matrix. But as these settings are not used to change in game a lot of render loop for texture renderer or shadow were copying the current stereo mode, change it to avoid its effect in matrix computation and then restore the stereo mode after. This behaviour is to avoid and to replace by a send of the stereo mode to the function needing it. These functions are: GetRenderArea GetViewMatrix GetFrustumMatrix DrawStereoOffScreen Even if the members are not used in computation, they are left to have a place to store the global stereo mode to us. Ketsji engine is a candidate but as these values are only for rendering the rasterizer is a good place.
1 parent b0cf6c7 commit 8e4933f

File tree

11 files changed

+106
-120
lines changed

11 files changed

+106
-120
lines changed

source/gameengine/Ketsji/KX_CubeMap.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ const MT_Matrix4x4& KX_CubeMap::GetProjectionMatrix(RAS_Rasterizer *rasty, KX_Sc
9696
const RAS_Rect& UNUSED(viewport), const RAS_Rect& UNUSED(area))
9797
{
9898
if (m_invalidProjection) {
99-
m_projection = rasty->GetFrustumMatrix(RAS_Rasterizer::RAS_STEREO_LEFTEYE, -m_clipStart, m_clipStart, -m_clipStart, m_clipStart,
100-
m_clipStart, m_clipEnd, 1.0f, true);
99+
m_projection = rasty->GetFrustumMatrix(-m_clipStart, m_clipStart, -m_clipStart, m_clipStart, m_clipStart, m_clipEnd);
101100
m_invalidProjection = false;
102101
}
103102

source/gameengine/Ketsji/KX_KetsjiEngine.cpp

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,13 @@
7878
#define DEFAULT_LOGIC_TIC_RATE 60.0
7979

8080

81-
KX_KetsjiEngine::CameraRenderData::CameraRenderData(KX_Camera *rendercam, KX_Camera *cullingcam, const RAS_Rect& area, const RAS_Rect& viewport,
82-
RAS_Rasterizer::StereoEye eye)
81+
KX_KetsjiEngine::CameraRenderData::CameraRenderData(KX_Camera *rendercam, KX_Camera *cullingcam, const RAS_Rect& area,
82+
const RAS_Rect& viewport, RAS_Rasterizer::StereoMode stereoMode, RAS_Rasterizer::StereoEye eye)
8383
:m_renderCamera(rendercam),
8484
m_cullingCamera(cullingcam),
8585
m_area(area),
8686
m_viewport(viewport),
87+
m_stereoMode(stereoMode),
8788
m_eye(eye)
8889
{
8990
m_renderCamera->AddRef();
@@ -112,6 +113,13 @@ KX_KetsjiEngine::FrameRenderData::FrameRenderData(RAS_Rasterizer::OffScreenType
112113
{
113114
}
114115

116+
KX_KetsjiEngine::RenderData::RenderData(RAS_Rasterizer::StereoMode stereoMode, bool renderPerEye)
117+
:m_stereoMode(stereoMode),
118+
m_renderPerEye(renderPerEye)
119+
{
120+
}
121+
122+
115123
const std::string KX_KetsjiEngine::m_profileLabels[tc_numCategories] = {
116124
"Physics:", // tc_physics
117125
"Logic:", // tc_logic
@@ -466,13 +474,14 @@ void KX_KetsjiEngine::UpdateSuspendedScenes(double framestep)
466474
}
467475

468476
KX_KetsjiEngine::CameraRenderData KX_KetsjiEngine::GetCameraRenderData(KX_Scene *scene, KX_Camera *camera, KX_Camera *overrideCullingCam,
469-
const RAS_Rect& displayArea, RAS_Rasterizer::StereoEye eye, bool usestereo)
477+
const RAS_Rect& displayArea, RAS_Rasterizer::StereoMode stereoMode, RAS_Rasterizer::StereoEye eye)
470478
{
471479
KX_Camera *rendercam;
472480
/* In case of stereo we must copy the camera because it is used twice with different settings
473481
* (modelview matrix). This copy use the same transform settings that the original camera
474482
* and its name is based on with the eye number in addition.
475483
*/
484+
const bool usestereo = (stereoMode != RAS_Rasterizer::RAS_STEREO_NOSTEREO);
476485
if (usestereo) {
477486
rendercam = new KX_Camera(scene, scene->m_callbacks, *camera->GetCameraData(), true, true);
478487
rendercam->SetName("__stereo_" + camera->GetName() + "_" + std::to_string(eye) + "__");
@@ -498,12 +507,12 @@ KX_KetsjiEngine::CameraRenderData KX_KetsjiEngine::GetCameraRenderData(KX_Scene
498507
// Compute the area and the viewport based on the current display area and the optional camera viewport.
499508
GetSceneViewport(scene, rendercam, displayArea, area, viewport);
500509
// Compute the camera matrices: modelview and projection.
501-
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(eye, rendercam->GetWorldToCamera(), rendercam->GetCameraData()->m_perspective);
502-
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, rendercam, eye, viewport, area);
510+
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(stereoMode, eye, rendercam->GetWorldToCamera(), rendercam->GetCameraData()->m_perspective);
511+
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, rendercam, stereoMode, eye, viewport, area);
503512
rendercam->SetModelviewMatrix(viewmat);
504513
rendercam->SetProjectionMatrix(projmat);
505514

506-
CameraRenderData cameraData(rendercam, cullingcam, area, viewport, eye);
515+
CameraRenderData cameraData(rendercam, cullingcam, area, viewport, stereoMode, eye);
507516

508517
if (usestereo) {
509518
rendercam->Release();
@@ -512,7 +521,7 @@ KX_KetsjiEngine::CameraRenderData KX_KetsjiEngine::GetCameraRenderData(KX_Scene
512521
return cameraData;
513522
}
514523

515-
bool KX_KetsjiEngine::GetFrameRenderData(std::vector<FrameRenderData>& frameDataList)
524+
KX_KetsjiEngine::RenderData KX_KetsjiEngine::GetRenderData()
516525
{
517526
const RAS_Rasterizer::StereoMode stereomode = m_rasterizer->GetStereoMode();
518527
const bool usestereo = (stereomode != RAS_Rasterizer::RAS_STEREO_NOSTEREO);
@@ -521,6 +530,8 @@ bool KX_KetsjiEngine::GetFrameRenderData(std::vector<FrameRenderData>& frameData
521530
stereomode == RAS_Rasterizer::RAS_STEREO_VINTERLACE ||
522531
stereomode == RAS_Rasterizer::RAS_STEREO_ANAGLYPH;
523532

533+
RenderData renderData(stereomode, renderpereye);
534+
524535
// The number of eyes to manage in case of stereo.
525536
const unsigned short numeyes = (usestereo) ? 2 : 1;
526537
// The number of frames in case of stereo, could be multiple for interlaced or anaglyph stereo.
@@ -535,7 +546,7 @@ bool KX_KetsjiEngine::GetFrameRenderData(std::vector<FrameRenderData>& frameData
535546
// Pre-compute the display area used for stereo or normal rendering.
536547
std::vector<RAS_Rect> displayAreas;
537548
for (unsigned short eye = 0; eye < numeyes; ++eye) {
538-
displayAreas.push_back(m_rasterizer->GetRenderArea(m_canvas, (RAS_Rasterizer::StereoEye)eye));
549+
displayAreas.push_back(m_rasterizer->GetRenderArea(m_canvas, stereomode, (RAS_Rasterizer::StereoEye)eye));
539550
}
540551

541552
// Prepare override culling camera of each scenes, we don't manage stereo currently.
@@ -548,17 +559,18 @@ bool KX_KetsjiEngine::GetFrameRenderData(std::vector<FrameRenderData>& frameData
548559
// Compute the area and the viewport based on the current display area and the optional camera viewport.
549560
GetSceneViewport(scene, overrideCullingCam, displayAreas[RAS_Rasterizer::RAS_STEREO_LEFTEYE], area, viewport);
550561
// Compute the camera matrices: modelview and projection.
551-
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(RAS_Rasterizer::RAS_STEREO_LEFTEYE, overrideCullingCam->GetWorldToCamera(),
552-
overrideCullingCam->GetCameraData()->m_perspective);
553-
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, overrideCullingCam, RAS_Rasterizer::RAS_STEREO_LEFTEYE, viewport, area);
562+
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(stereomode, RAS_Rasterizer::RAS_STEREO_LEFTEYE,
563+
overrideCullingCam->GetWorldToCamera(), overrideCullingCam->GetCameraData()->m_perspective);
564+
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, overrideCullingCam, stereomode,
565+
RAS_Rasterizer::RAS_STEREO_LEFTEYE, viewport, area);
554566
overrideCullingCam->SetModelviewMatrix(viewmat);
555567
overrideCullingCam->SetProjectionMatrix(projmat);
556568
}
557569
}
558570

559571
for (unsigned short frame = 0; frame < numframes; ++frame) {
560-
frameDataList.emplace_back(ofsType[frame]);
561-
FrameRenderData& frameData = frameDataList.back();
572+
renderData.m_frameDataList.emplace_back(ofsType[frame]);
573+
FrameRenderData& frameData = renderData.m_frameDataList.back();
562574

563575
// Get the eyes managed per frame.
564576
std::vector<RAS_Rasterizer::StereoEye> eyes;
@@ -587,13 +599,14 @@ bool KX_KetsjiEngine::GetFrameRenderData(std::vector<FrameRenderData>& frameData
587599
}
588600

589601
for (RAS_Rasterizer::StereoEye eye : eyes) {
590-
sceneFrameData.m_cameraDataList.push_back(GetCameraRenderData(scene, cam, overrideCullingCam, displayAreas[eye], eye, usestereo));
602+
sceneFrameData.m_cameraDataList.push_back(GetCameraRenderData(scene, cam, overrideCullingCam, displayAreas[eye],
603+
stereomode, eye));
591604
}
592605
}
593606
}
594607
}
595608

596-
return renderpereye;
609+
return renderData;
597610
}
598611

599612
void KX_KetsjiEngine::Render()
@@ -609,8 +622,7 @@ void KX_KetsjiEngine::Render()
609622
scene->RenderTextureRenderers(KX_TextureRendererManager::VIEWPORT_INDEPENDENT, m_rasterizer, nullptr, nullptr, RAS_Rect(), RAS_Rect());
610623
}
611624

612-
std::vector<FrameRenderData> frameDataList;
613-
const bool renderpereye = GetFrameRenderData(frameDataList);
625+
RenderData renderData = GetRenderData();
614626

615627
// Update all off screen to the current canvas size.
616628
m_rasterizer->UpdateOffScreens(m_canvas);
@@ -630,7 +642,7 @@ void KX_KetsjiEngine::Render()
630642
// Used to detect when a camera is the first rendered an then doesn't request a depth clear.
631643
unsigned short pass = 0;
632644

633-
for (FrameRenderData& frameData : frameDataList) {
645+
for (FrameRenderData& frameData : renderData.m_frameDataList) {
634646
// Current bound off screen.
635647
RAS_OffScreen *offScreen = m_rasterizer->GetOffScreen(frameData.m_ofsType);
636648
offScreen->Bind();
@@ -686,14 +698,14 @@ void KX_KetsjiEngine::Render()
686698
m_canvas->SetViewPort(0, 0, width, height);
687699

688700
// Compositing per eye off screens to screen.
689-
if (renderpereye) {
690-
RAS_OffScreen *leftofs = m_rasterizer->GetOffScreen(frameDataList[0].m_ofsType);
691-
RAS_OffScreen *rightofs = m_rasterizer->GetOffScreen(frameDataList[1].m_ofsType);
692-
m_rasterizer->DrawStereoOffScreen(m_canvas, leftofs, rightofs);
701+
if (renderData.m_renderPerEye) {
702+
RAS_OffScreen *leftofs = m_rasterizer->GetOffScreen(renderData.m_frameDataList[0].m_ofsType);
703+
RAS_OffScreen *rightofs = m_rasterizer->GetOffScreen(renderData.m_frameDataList[1].m_ofsType);
704+
m_rasterizer->DrawStereoOffScreen(m_canvas, leftofs, rightofs, renderData.m_stereoMode);
693705
}
694706
// Else simply draw the off screen to screen.
695707
else {
696-
m_rasterizer->DrawOffScreen(m_canvas, m_rasterizer->GetOffScreen(frameDataList[0].m_ofsType));
708+
m_rasterizer->DrawOffScreen(m_canvas, m_rasterizer->GetOffScreen(renderData.m_frameDataList[0].m_ofsType));
697709
}
698710

699711
EndFrame();
@@ -872,8 +884,8 @@ void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene)
872884
}
873885
}
874886

875-
MT_Matrix4x4 KX_KetsjiEngine::GetCameraProjectionMatrix(KX_Scene *scene, KX_Camera *cam, RAS_Rasterizer::StereoEye eye,
876-
const RAS_Rect& viewport, const RAS_Rect& area) const
887+
MT_Matrix4x4 KX_KetsjiEngine::GetCameraProjectionMatrix(KX_Scene *scene, KX_Camera *cam, RAS_Rasterizer::StereoMode stereoMode,
888+
RAS_Rasterizer::StereoEye eye, const RAS_Rect& viewport, const RAS_Rect& area) const
877889
{
878890
if (cam->hasValidProjectionMatrix()) {
879891
return cam->GetProjectionMatrix();
@@ -940,8 +952,8 @@ MT_Matrix4x4 KX_KetsjiEngine::GetCameraProjectionMatrix(KX_Scene *scene, KX_Came
940952
frustum.y1 *= camzoom;
941953
frustum.y2 *= camzoom;
942954
}
943-
projmat = m_rasterizer->GetFrustumMatrix(
944-
eye, frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar, focallength);
955+
projmat = m_rasterizer->GetFrustumMatrix(stereoMode, eye, focallength,
956+
frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar);
945957
}
946958
}
947959

@@ -1222,8 +1234,10 @@ void KX_KetsjiEngine::DrawDebugCameraFrustum(KX_Scene *scene, RAS_DebugDraw& deb
12221234

12231235
for (KX_Camera *cam : scene->GetCameraList()) {
12241236
if (cam != cameraFrameData.m_renderCamera && (m_showCameraFrustum == KX_DebugOption::FORCE || cam->GetShowCameraFrustum())) {
1225-
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(cameraFrameData.m_eye, cam->GetWorldToCamera(), cam->GetCameraData()->m_perspective);
1226-
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, cam, cameraFrameData.m_eye, cameraFrameData.m_viewport, cameraFrameData.m_area);
1237+
const MT_Matrix4x4 viewmat = m_rasterizer->GetViewMatrix(cameraFrameData.m_stereoMode, cameraFrameData.m_eye,
1238+
cam->GetWorldToCamera(), cam->GetCameraData()->m_perspective);
1239+
const MT_Matrix4x4 projmat = GetCameraProjectionMatrix(scene, cam, cameraFrameData.m_stereoMode, cameraFrameData.m_eye,
1240+
cameraFrameData.m_viewport, cameraFrameData.m_area);
12271241
debugDraw.DrawCameraFrustum(projmat, viewmat);
12281242
}
12291243
}

source/gameengine/Ketsji/KX_KetsjiEngine.h

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ class KX_KetsjiEngine
105105
private:
106106
struct CameraRenderData
107107
{
108-
CameraRenderData(KX_Camera *rendercam, KX_Camera *cullingcam, const RAS_Rect& area, const RAS_Rect& viewport, RAS_Rasterizer::StereoEye eye);
108+
CameraRenderData(KX_Camera *rendercam, KX_Camera *cullingcam, const RAS_Rect& area, const RAS_Rect& viewport,
109+
RAS_Rasterizer::StereoMode stereoMode, RAS_Rasterizer::StereoEye eye);
109110
CameraRenderData(const CameraRenderData& other);
110111
~CameraRenderData();
111112

@@ -114,6 +115,7 @@ class KX_KetsjiEngine
114115
KX_Camera *m_cullingCamera;
115116
RAS_Rect m_area;
116117
RAS_Rect m_viewport;
118+
RAS_Rasterizer::StereoMode m_stereoMode;
117119
RAS_Rasterizer::StereoEye m_eye;
118120
};
119121

@@ -134,6 +136,15 @@ class KX_KetsjiEngine
134136
std::vector<SceneRenderData> m_sceneDataList;
135137
};
136138

139+
struct RenderData
140+
{
141+
RenderData(RAS_Rasterizer::StereoMode stereoMode, bool renderPerEye);
142+
143+
RAS_Rasterizer::StereoMode m_stereoMode;
144+
bool m_renderPerEye;
145+
std::vector<FrameRenderData> m_frameDataList;
146+
};
147+
137148
/// 2D Canvas (2D Rendering Device Context)
138149
RAS_ICanvas *m_canvas;
139150
/// 3D Rasterizer (3D Rendering)
@@ -252,12 +263,12 @@ class KX_KetsjiEngine
252263
void UpdateSuspendedScenes(double framestep);
253264

254265
/// Update and return the projection matrix of a camera depending on the viewport.
255-
MT_Matrix4x4 GetCameraProjectionMatrix(KX_Scene *scene, KX_Camera *cam, RAS_Rasterizer::StereoEye eye,
256-
const RAS_Rect& viewport, const RAS_Rect& area) const;
266+
MT_Matrix4x4 GetCameraProjectionMatrix(KX_Scene *scene, KX_Camera *cam, RAS_Rasterizer::StereoMode stereoMode,
267+
RAS_Rasterizer::StereoEye eye, const RAS_Rect& viewport, const RAS_Rect& area) const;
257268
CameraRenderData GetCameraRenderData(KX_Scene *scene, KX_Camera *camera, KX_Camera *overrideCullingCam, const RAS_Rect& displayArea,
258-
RAS_Rasterizer::StereoEye eye, bool usestereo);
269+
RAS_Rasterizer::StereoMode stereoMode, RAS_Rasterizer::StereoEye eye);
259270
/// Compute frame render data per eyes (in case of stereo), scenes and camera.
260-
bool GetFrameRenderData(std::vector<FrameRenderData>& frameDataList);
271+
RenderData GetRenderData();
261272

262273
void RenderCamera(KX_Scene *scene, const CameraRenderData& cameraFrameData, RAS_OffScreen *offScreen, unsigned short pass, bool isFirstScene);
263274
RAS_OffScreen *PostRenderScene(KX_Scene *scene, RAS_OffScreen *inputofs, RAS_OffScreen *targetofs);

source/gameengine/Ketsji/KX_MouseFocusSensor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ bool KX_MouseFocusSensor::ParentObjectHasFocusCamera(KX_Camera *cam)
287287
RAS_ICanvas *canvas = m_kxengine->GetCanvas();
288288
short m_y_inv = canvas->GetHeight()-m_y;
289289

290-
const RAS_Rect displayArea = m_kxengine->GetRasterizer()->GetRenderArea(canvas, RAS_Rasterizer::RAS_STEREO_LEFTEYE);
290+
RAS_Rasterizer *rasty = m_kxengine->GetRasterizer();
291+
const RAS_Rect displayArea = rasty->GetRenderArea(canvas, rasty->GetStereoMode(), RAS_Rasterizer::RAS_STEREO_LEFTEYE);
291292
m_kxengine->GetSceneViewport(m_kxscene, cam, displayArea, area, viewport);
292293

293294
/* Check if the mouse is in the viewport */

source/gameengine/Ketsji/KX_PlanarMap.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,7 @@ const MT_Matrix4x4& KX_PlanarMap::GetProjectionMatrix(RAS_Rasterizer *rasty, KX_
135135
frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar);
136136
}
137137
else {
138-
const float focallength = sceneCamera->GetFocalLength();
139-
140-
projection = rasty->GetFrustumMatrix(RAS_Rasterizer::RAS_STEREO_LEFTEYE,
141-
frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar, focallength);
138+
projection = rasty->GetFrustumMatrix(frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar);
142139
}
143140

144141
return projection;

source/gameengine/Ketsji/KX_PythonInit.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -981,17 +981,14 @@ static PyObject *gPyGetFocalLength(PyObject *, PyObject *, PyObject *)
981981

982982
static PyObject *gPyGetStereoEye(PyObject *, PyObject *, PyObject *)
983983
{
984-
int flag = RAS_Rasterizer::RAS_STEREO_LEFTEYE;
985-
986984
RAS_Rasterizer *rasterizer = KX_GetActiveEngine()->GetRasterizer();
987985

988986
if (!rasterizer) {
989987
PyErr_SetString(PyExc_RuntimeError, "Rasterizer.getStereoEye(), Rasterizer not available");
990988
return nullptr;
991989
}
992990

993-
if (rasterizer->Stereo())
994-
flag = rasterizer->GetEye();
991+
int flag = rasterizer->GetEye();
995992

996993
return PyLong_FromLong(flag);
997994
}

source/gameengine/Ketsji/KX_TextureRendererManager.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,20 +202,12 @@ void KX_TextureRendererManager::Render(RendererCategory category, RAS_Rasterizer
202202
// Disable scissor to not bother with scissor box.
203203
rasty->Disable(RAS_Rasterizer::RAS_SCISSOR_TEST);
204204

205-
// Copy current stereo mode.
206-
const RAS_Rasterizer::StereoMode steremode = rasty->GetStereoMode();
207-
// Disable stereo for realtime renderer.
208-
rasty->SetStereoMode(RAS_Rasterizer::RAS_STEREO_NOSTEREO);
209-
210205
// Check if at least one renderer was rendered.
211206
bool rendered = false;
212207
for (KX_TextureRenderer *renderer : renderers) {
213208
rendered |= RenderRenderer(rasty, renderer, sceneCamera, viewport, area);
214209
}
215210

216-
// Restore previous stereo mode.
217-
rasty->SetStereoMode(steremode);
218-
219211
rasty->Enable(RAS_Rasterizer::RAS_SCISSOR_TEST);
220212

221213
rasty->SetDrawingMode(drawmode);

source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,8 @@ void RAS_OpenGLLight::BindShadowBuffer(RAS_ICanvas *canvas, KX_Camera *cam, MT_T
257257
cam->NodeUpdateGS(0);
258258

259259
/* setup rasterizer transformations */
260-
/* SetViewMatrix may use stereomode which we temporarily disable here */
261-
RAS_Rasterizer::StereoMode stereomode = m_rasterizer->GetStereoMode();
262-
m_rasterizer->SetStereoMode(RAS_Rasterizer::RAS_STEREO_NOSTEREO);
263260
m_rasterizer->SetProjectionMatrix(projectionmat);
264261
m_rasterizer->SetViewMatrix(modelviewmat, cam->NodeGetWorldPosition(), cam->NodeGetLocalScaling());
265-
m_rasterizer->SetStereoMode(stereomode);
266262
}
267263

268264
void RAS_OpenGLLight::UnbindShadowBuffer()

0 commit comments

Comments
 (0)