reset camera in the rendering thread to avoid artifacts

This commit is contained in:
Erwin Coumans
2020-08-20 08:35:24 -07:00
parent d8d81f9ca4
commit bbb66370c6

View File

@@ -130,6 +130,7 @@ enum MultiThreadedGUIHelperCommunicationEnums
eGUIHelperUpdateShape,
eGUIHelperChangeGraphicsInstanceScaling,
eGUIUserDebugRemoveAllParameters,
eGUIHelperResetCamera,
};
#include <stdio.h>
@@ -1086,9 +1087,23 @@ public:
{
m_childGuiHelper->setUpAxis(axis);
}
float m_resetCameraCamDist;
float m_resetCameraYaw;
float m_resetCameraPitch;
float m_resetCameraCamPosX;
float m_resetCameraCamPosY;
float m_resetCameraCamPosZ;
virtual void resetCamera(float camDist, float yaw, float pitch, float camPosX, float camPosY, float camPosZ)
{
m_childGuiHelper->resetCamera(camDist, yaw, pitch, camPosX, camPosY, camPosZ);
m_resetCameraCamDist = camDist;
m_resetCameraYaw = yaw;
m_resetCameraPitch = pitch;
m_resetCameraCamPosX = camPosX;
m_resetCameraCamPosY = camPosY;
m_resetCameraCamPosZ = camPosZ;
m_cs->setSharedParam(1, eGUIHelperResetCamera);
workerThreadWait();
}
virtual bool getCameraInfo(int* width, int* height, float viewMatrix[16], float projectionMatrix[16], float camUp[3], float camForward[3], float hor[3], float vert[3], float* yaw, float* pitch, float* camDist, float camTarget[3]) const
@@ -2360,6 +2375,18 @@ void PhysicsServerExample::updateGraphics()
m_multiThreadedHelper->mainThreadRelease();
break;
}
case eGUIHelperResetCamera:
{
m_multiThreadedHelper->m_childGuiHelper->resetCamera(
m_multiThreadedHelper->m_resetCameraCamDist,
m_multiThreadedHelper->m_resetCameraYaw,
m_multiThreadedHelper->m_resetCameraPitch,
m_multiThreadedHelper->m_resetCameraCamPosX,
m_multiThreadedHelper->m_resetCameraCamPosY,
m_multiThreadedHelper->m_resetCameraCamPosZ);
m_multiThreadedHelper->mainThreadRelease();
}
case eGUIHelperAutogenerateGraphicsObjects:
{
B3_PROFILE("eGUIHelperAutogenerateGraphicsObjects");