From 70dfe10ef9c4745bbf7253c0917a7b5b4120f240 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Fri, 3 Jun 2016 11:57:20 +0200 Subject: Further job improvements The RenderViewInitialization job used to have to wait for the world transform job to be completed because it was used to set the viewProjectionMatrix. This patch adjust dependencies and adds a new job that sets the viewProjectionMatrix once the transform update job is complete. This allows to start most of the processing earlier and better use the available cpu cores. Change-Id: I77d751e0b20639934cc00be0cd9888f41f684f89 Reviewed-by: Paul Lemire --- src/render/jobs/renderviewjobutils.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'src/render/jobs/renderviewjobutils.cpp') diff --git a/src/render/jobs/renderviewjobutils.cpp b/src/render/jobs/renderviewjobutils.cpp index a027cd7a7..72fdc5075 100644 --- a/src/render/jobs/renderviewjobutils.cpp +++ b/src/render/jobs/renderviewjobutils.cpp @@ -93,21 +93,18 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN switch (type) { case FrameGraphNode::CameraSelector: // Can be set only once and we take camera nearest to the leaf node - if (!rv->renderCamera()) { + if (!rv->renderCameraLens()) { const CameraSelector *cameraSelector = static_cast(node); Entity *camNode = manager->renderNodesManager()->lookupResource(cameraSelector->cameraUuid()); if (camNode) { CameraLens *lens = camNode->renderComponent(); + rv->setRenderCameraEntity(camNode); if (lens && lens->isEnabled()) { - rv->setRenderCamera(lens); - rv->setViewMatrix(*camNode->worldTransform()); - rv->setViewProjectionMatrix(lens->projection() * *camNode->worldTransform()); - - //To get the eyePosition of the camera, we need to use the inverse of the - //camera's worldTransform matrix. - const QMatrix4x4 inverseWorldTransform = camNode->worldTransform()->inverted(); - const QVector3D eyePosition(inverseWorldTransform.column(3)); - rv->setEyePosition(eyePosition); + rv->setRenderCameraLens(lens); + // ViewMatrix and ProjectionMatrix are computed + // later in updateMatrices() + // since at this point the transformation matrices + // may not yet have been updated } } } -- cgit v1.2.3