diff options
author | Kaj Grönholm <kaj.gronholm@qt.io> | 2018-11-02 18:30:50 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-11-05 12:11:51 +0000 |
commit | f8b979918d726ac6c31560537a380a728fc7c274 (patch) | |
tree | e1a46e5e63baf3ef7ba31e9d1b0d5bff6c146ff8 | |
parent | 802a907e73a57256363c5547e1b089c1f80df4f9 (diff) |
Don't draw left & right selectors by default
Reparent selectors instead of viewports so render tree is cleaner.
Remove viewports disable/enable as that's not useful. Also keep
mono selector always enabled as it's needed also in stereo.
Task-number: QT3DS-2591
Change-Id: Id797deb0da804e5ac46c03713ea7421b5fb4f57e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r-- | src/runtime/q3dsscenemanager.cpp | 45 | ||||
-rw-r--r-- | src/runtime/q3dsscenemanager_p.h | 2 |
2 files changed, 17 insertions, 30 deletions
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp index ef1b1b7..80ea720 100644 --- a/src/runtime/q3dsscenemanager.cpp +++ b/src/runtime/q3dsscenemanager.cpp @@ -1146,34 +1146,20 @@ void Q3DSSceneManager::updateViewportRects() switch (m_engine->viewportSettings()->stereoMode()) { case Q3DSViewportSettings::StereoModeMono: viewports.viewportMono->setNormalizedRect(QRectF(0, 0, 1, 1)); - // Not sure if hiding Qt3D viewports currently affects anything, - // but shouldn't harm either - viewports.viewportMono->setEnabled(true); - viewports.viewportLeft->setEnabled(false); - viewports.viewportRight->setEnabled(false); break; case Q3DSViewportSettings::StereoModeTopBottom: viewports.viewportLeft->setNormalizedRect(QRectF(0, 0, 1, 0.5)); viewports.viewportRight->setNormalizedRect(QRectF(0, 0.5, 1, 0.5)); - viewports.viewportMono->setEnabled(false); - viewports.viewportLeft->setEnabled(true); - viewports.viewportRight->setEnabled(true); break; case Q3DSViewportSettings::StereoModeLeftRight: viewports.viewportLeft->setNormalizedRect(QRectF(0, 0, 0.5, 1)); viewports.viewportRight->setNormalizedRect(QRectF(0.5, 0, 0.5, 1)); - viewports.viewportMono->setEnabled(false); - viewports.viewportLeft->setEnabled(true); - viewports.viewportRight->setEnabled(true); break; case Q3DSViewportSettings::StereoModeAnaglyphRedCyan: Q_FALLTHROUGH(); case Q3DSViewportSettings::StereoModeAnaglyphGreenMagenta: viewports.viewportLeft->setNormalizedRect(QRectF(0, 0, 1, 1)); viewports.viewportRight->setNormalizedRect(QRectF(0, 0, 1, 1)); - viewports.viewportMono->setEnabled(false); - viewports.viewportLeft->setEnabled(true); - viewports.viewportRight->setEnabled(true); break; default: Q_UNREACHABLE(); @@ -1185,17 +1171,18 @@ void Q3DSSceneManager::updateViewportRects() m_stereoMode->setValue(m_engine->viewportSettings()->stereoMode()); } -void Q3DSSceneManager::updateViewportsRenderTree(Q3DSLayerAttached *layerData, ViewportSet viewports) +void Q3DSSceneManager::updateStereoRenderTree(Q3DSLayerAttached *layerData) { Q_ASSERT(layerData); + + // Reparent left & right selectors to enable/disable rendering them. + // Note: eyeMono->rtSelector is required all the time as it's used e.g. for picking & shadows if (m_engine->isStereoscopic()) { - viewports.viewportMono->setParent(layerData->layerFgDummyParent); - viewports.viewportLeft->setParent(layerData->eyeLeft->rtSelector); - viewports.viewportRight->setParent(layerData->eyeRight->rtSelector); + layerData->eyeLeft->rtSelector->setParent(layerData->layerFgRoot); + layerData->eyeRight->rtSelector->setParent(layerData->layerFgRoot); } else { - viewports.viewportMono->setParent(layerData->eyeMono->rtSelector); - viewports.viewportLeft->setParent(layerData->layerFgDummyParent); - viewports.viewportRight->setParent(layerData->layerFgDummyParent); + layerData->eyeLeft->rtSelector->setParent(layerData->layerFgDummyParent); + layerData->eyeRight->rtSelector->setParent(layerData->layerFgDummyParent); } } @@ -1342,7 +1329,7 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, "RT for layer %s", layer3DS->id().constData()); rtSelector->setTarget(rt); - viewports.viewportMono = new Qt3DRender::QViewport(); // Will be reparented + viewports.viewportMono = new Qt3DRender::QViewport(rtSelector); layerData->eyeMono = buildEye(layer3DS, viewports.viewportMono); // Create color and depth-stencil buffers for this layer @@ -1354,7 +1341,7 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, "RT for layer %s", layer3DS->id().constData()); rtSelectorLeft->setTarget(rtLeft); - viewports.viewportLeft = new Qt3DRender::QViewport(); // Will be reparented + viewports.viewportLeft = new Qt3DRender::QViewport(rtSelectorLeft); layerData->eyeLeft = buildEye(layer3DS, viewports.viewportLeft); // Create color and depth-stencil buffers for this layer @@ -1366,7 +1353,7 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, "RT for layer %s", layer3DS->id().constData()); rtSelectorRight->setTarget(rtRight); - viewports.viewportRight = new Qt3DRender::QViewport(); // Will be reparented + viewports.viewportRight = new Qt3DRender::QViewport(rtSelectorRight); layerData->eyeRight = buildEye(layer3DS, viewports.viewportRight); // Note: Moved layerSceneRootEntity to be child of layerFgRoot instead of rtSelector @@ -1420,8 +1407,8 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, layerData->eyeLeft->effectData.effectRoot = layerData->eyeLeft->effectRoot; layerData->eyeRight->effectData.effectRoot = layerData->eyeRight->effectRoot; - // Enable/disable correct viewports depending on mode - updateViewportsRenderTree(layerData, viewports); + // Enable/disable correct selectors depending on mode + updateStereoRenderTree(layerData); m_stereoMode = new Qt3DRender::QParameter(QLatin1String("stereoMode"), m_engine->viewportSettings()->stereoMode()); @@ -1451,7 +1438,7 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, }); QObject::connect(m_engine, &Q3DSEngine::stereoscopicChanged, - [this, layer3DS, layerData, viewports]() + [this, layer3DS, layerData]() { // When switching between stereo <-> non-stereo, update used shader // TODO: Here we disable effects when rendering stereo as msaa+effect currently doesn't work for stereo @@ -1462,8 +1449,8 @@ void Q3DSSceneManager::buildLayer(Q3DSLayerNode *layer3DS, updateAdvancedBlendLayers(); updateLayerCompositorProgram(layer3DS); - // And enable/disable related viewports - updateViewportsRenderTree(layerData, viewports); + // And enable/disable related selectors + updateStereoRenderTree(layerData); }); layer3DS->setAttached(layerData); diff --git a/src/runtime/q3dsscenemanager_p.h b/src/runtime/q3dsscenemanager_p.h index bdc713f..8607789 100644 --- a/src/runtime/q3dsscenemanager_p.h +++ b/src/runtime/q3dsscenemanager_p.h @@ -810,7 +810,7 @@ private: void updateSubPresentationHosts(); void loadSubUipPresentation(Q3DSSubPresentation *sp); void initSubTree(Q3DSGraphObject *subTreeRoot); - void updateViewportsRenderTree(Q3DSLayerAttached *layerData, ViewportSet viewports); + void updateStereoRenderTree(Q3DSLayerAttached *layerData); Q3DSEyeData *buildEye(Q3DSLayerNode *layer3DS, Qt3DRender::QViewport *viewport); void buildLayer(Q3DSLayerNode *layer3DS, Qt3DRender::QFrameGraphNode *parent, const QSize &parentSize); void buildSubPresentationLayer(Q3DSLayerNode *layer3DS, const QSize &parentSize); |