Fix debug draw in SBS mode & reflection update timing

This commit is contained in:
James Urquhart 2016-06-04 12:26:31 +01:00
parent de48afc00c
commit fa7697b13e

View file

@ -358,6 +358,15 @@ void GuiTSCtrl::_internalRender(RectI viewport, Frustum &frustum)
GFXTransformSaver saver; GFXTransformSaver saver;
Point2I renderSize = viewport.extent; Point2I renderSize = viewport.extent;
if (mForceFOV != 0)
mLastCameraQuery.fov = mDegToRad(mForceFOV);
if (mCameraZRot)
{
MatrixF rotMat(EulerF(0, 0, mDegToRad(mCameraZRot)));
mLastCameraQuery.cameraMatrix.mul(rotMat);
}
if (mReflectPriority > 0) if (mReflectPriority > 0)
{ {
// Get the total reflection priority. // Get the total reflection priority.
@ -367,19 +376,10 @@ void GuiTSCtrl::_internalRender(RectI viewport, Frustum &frustum)
totalPriority += smAwakeTSCtrls[i]->mReflectPriority; totalPriority += smAwakeTSCtrls[i]->mReflectPriority;
REFLECTMGR->update(mReflectPriority / totalPriority, REFLECTMGR->update(mReflectPriority / totalPriority,
getExtent(), renderSize,
mLastCameraQuery); mLastCameraQuery);
} }
if (mForceFOV != 0)
mLastCameraQuery.fov = mDegToRad(mForceFOV);
if (mCameraZRot)
{
MatrixF rotMat(EulerF(0, 0, mDegToRad(mCameraZRot)));
mLastCameraQuery.cameraMatrix.mul(rotMat);
}
GFX->setViewport(viewport); GFX->setViewport(viewport);
// Clear the zBuffer so GUI doesn't hose object rendering accidentally // Clear the zBuffer so GUI doesn't hose object rendering accidentally
@ -423,7 +423,27 @@ void GuiTSCtrl::_internalRender(RectI viewport, Frustum &frustum)
PFXMGR->setFrameMatrices(mSaveModelview, mSaveProjection); PFXMGR->setFrameMatrices(mSaveModelview, mSaveProjection);
renderWorld(viewport); renderWorld(viewport);
DebugDrawer::get()->render();
DebugDrawer* debugDraw = DebugDrawer::get();
if (mRenderStyle == RenderStyleStereoSideBySide && debugDraw->willDraw())
{
// For SBS we need to render over each viewport
Frustum frustum;
GFX->setViewport(mLastCameraQuery.stereoViewports[0]);
MathUtils::makeFovPortFrustum(&frustum, mLastCameraQuery.ortho, mLastCameraQuery.nearPlane, mLastCameraQuery.farPlane, mLastCameraQuery.fovPort[0]);
GFX->setFrustum(frustum);
debugDraw->render(false);
GFX->setViewport(mLastCameraQuery.stereoViewports[1]);
MathUtils::makeFovPortFrustum(&frustum, mLastCameraQuery.ortho, mLastCameraQuery.nearPlane, mLastCameraQuery.farPlane, mLastCameraQuery.fovPort[1]);
GFX->setFrustum(frustum);
debugDraw->render();
}
else
{
debugDraw->render();
}
// Render the canvas overlay if its available // Render the canvas overlay if its available
if (mStereoCanvas.getPointer() && mStereoGuiTarget.getPointer() && mStereoCanvas->size() != 0) if (mStereoCanvas.getPointer() && mStereoGuiTarget.getPointer() && mStereoCanvas->size() != 0)