virtual void CaptureStateBlock() = 0;
virtual void ApplyStateBlock() = 0;
- virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight) = 0;
+ virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor = 0.f) = 0;
virtual void ApplyHardwareTransform(const TransformMatrix &matrix) = 0;
virtual void RestoreHardwareTransform() = 0;
virtual void SetStereoMode(RENDER_STEREO_MODE mode, RENDER_STEREO_VIEW view)
m_pGUIShader->ApplyStateBlock();
}
-void CRenderSystemDX::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight)
+void CRenderSystemDX::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor)
{
if (!m_bRenderCreated)
return;
// position.
XMMATRIX flipY, translate;
flipY = XMMatrixScaling(1.0, -1.0f, 1.0f);
- translate = XMMatrixTranslation(-(w + offset.x), -(h + offset.y), 2 * h);
+ translate = XMMatrixTranslation(-(w + offset.x - stereoFactor), -(h + offset.y), 2 * h);
m_pGUIShader->SetView(XMMatrixMultiply(translate, flipY));
// projection onto screen space
virtual void CaptureStateBlock();
virtual void ApplyStateBlock();
- virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight);
+ virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor = 0.f);
virtual void ApplyHardwareTransform(const TransformMatrix &matrix);
virtual void RestoreHardwareTransform();
glEnable(GL_SCISSOR_TEST);
}
-void CRenderSystemGL::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight)
+void CRenderSystemGL::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor)
{
if (!m_bRenderCreated)
return;
float h = (float)m_viewPort[3]*0.5f;
glMatrixModview->LoadIdentity();
- glMatrixModview->Translatef(-(w + offset.x), +(h + offset.y), 0);
+ glMatrixModview->Translatef(-(w + offset.x - stereoFactor), +(h + offset.y), 0);
glMatrixModview->LookAt(0.0, 0.0, -2.0*h, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);
glMatrixModview.Load();
virtual void CaptureStateBlock();
virtual void ApplyStateBlock();
- virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight);
+ virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor = 0.0f);
virtual void ApplyHardwareTransform(const TransformMatrix &matrix);
virtual void RestoreHardwareTransform();
glClear(GL_DEPTH_BUFFER_BIT);
}
-void CRenderSystemGLES::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight)
+void CRenderSystemGLES::SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor)
{
if (!m_bRenderCreated)
return;
float h = (float)m_viewPort[3]*0.5f;
glMatrixModview->LoadIdentity();
- glMatrixModview->Translatef(-(w + offset.x), +(h + offset.y), 0);
+ glMatrixModview->Translatef(-(w + offset.x - stereoFactor), +(h + offset.y), 0);
glMatrixModview->LookAt(0.0, 0.0, -2.0*h, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);
glMatrixModview.Load();
virtual void CaptureStateBlock();
virtual void ApplyStateBlock();
- virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight);
+ virtual void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor = 0.0f);
virtual void ApplyHardwareTransform(const TransformMatrix &matrix);
virtual void RestoreHardwareTransform();