summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Studio/Render/StudioRenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2018-10-25 17:54:56 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2018-11-02 09:54:56 +0000
commit3ddad604c29761f1069fe88b27e6f9d44c0dbe82 (patch)
tree4d600fde9849f9cc87180a469d84c64785cb53de /src/Authoring/Studio/Render/StudioRenderer.cpp
parent74e92c8d0d879dc0bc5bc3dd9612f7a65dbf349c (diff)
Implement scene camera tab
The scene camera tab on the bottom dockable area provides a zoomable pixel perfect view of the scene camera. Task-number: QT3DS-709 Change-Id: I7d96464e8208b9e57a1bd980fc6b71656028e49a Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Render/StudioRenderer.cpp')
-rw-r--r--src/Authoring/Studio/Render/StudioRenderer.cpp46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/Authoring/Studio/Render/StudioRenderer.cpp b/src/Authoring/Studio/Render/StudioRenderer.cpp
index a3850618..92860459 100644
--- a/src/Authoring/Studio/Render/StudioRenderer.cpp
+++ b/src/Authoring/Studio/Render/StudioRenderer.cpp
@@ -117,6 +117,7 @@ struct SRendererImpl : public IStudioRenderer,
QHash<QString, StudioSubPresentation> m_subpresentations;
QScopedPointer<Q3DSQmlStreamProxy> m_proxy;
QMap<QString, int> m_initialFrameMap;
+ bool m_fullSizePreview = false;
SRendererImpl()
: m_Dispatch(*g_StudioApp.GetCore()->GetDispatch())
@@ -362,6 +363,12 @@ struct SRendererImpl : public IStudioRenderer,
m_RenderContext->EndRender();
}
}
+
+ void setFullSizePreview(bool enabled) override
+ {
+ m_fullSizePreview = enabled;
+ }
+
// Request that this object renders. May be ignored if a transaction
// is ongoing so we don't get multiple rendering per transaction.
void RequestRender() override
@@ -382,6 +389,25 @@ struct SRendererImpl : public IStudioRenderer,
Render();
}
+ void getFullSizePreviewFbo(QSize &outFboDim, qt3ds::QT3DSU32 &outFboTexture) override
+ {
+ if (m_Translation) {
+ outFboDim = QSize(m_Translation->m_previewFullSizeFboDimensions.x,
+ m_Translation->m_previewFullSizeFboDimensions.y);
+ // The handle is a void * so first cast to size_t to avoid truncating pointer warning
+ if (m_Translation->m_previewFullSizeTexture) {
+ outFboTexture = static_cast<qt3ds::QT3DSU32>(reinterpret_cast<size_t>(
+ m_Translation->m_previewFullSizeTexture->GetTextureObjectHandle()));
+ } else {
+ outFboTexture = 0;
+ }
+
+ } else {
+ outFboDim = QSize(0, 0);
+ outFboTexture = 0;
+ }
+ }
+
void MakeContextCurrent() override
{
m_RenderContext->BeginRender();
@@ -401,8 +427,9 @@ struct SRendererImpl : public IStudioRenderer,
if (m_Translation) {
preview = CStudioPreferences::showEditModePreview()
&& m_Translation->m_EditCameraEnabled
- && !m_Translation->GetPreviewViewportDimensions().isZero();
- m_Translation->PreRender(preview);
+ && !m_Translation->GetPreviewViewportDimensions(false).isZero();
+ m_Translation->PreRender(preview || m_fullSizePreview,
+ m_fullSizePreview && !preview);
}
NVRenderContext &theContext = m_RenderContext->GetRenderContext();
theContext.SetDepthWriteEnabled(true);
@@ -410,12 +437,19 @@ struct SRendererImpl : public IStudioRenderer,
qt3ds::render::NVRenderClearValues::Color
| qt3ds::render::NVRenderClearValues::Depth));
if (m_Translation) {
- // draw scene preview view screen display area layer
if (preview) {
- m_Translation->Render(0, false, true, false);
- m_Translation->PreRender(false);
+ // draw scene preview view screen display area layer
+ m_Translation->Render(0, false, true, false, false);
+ m_Translation->PreRender(m_fullSizePreview, m_fullSizePreview);
+ }
+ if (m_fullSizePreview) {
+ // We need separate full size preview for Scene camera tab even if we are
+ // rendering the scene normally, since we don't want the guides or widgets
+ m_Translation->Render(0, false, true, true, false);
+ m_Translation->PreRender(false, false);
}
- m_Translation->Render(m_PickResult.GetWidgetId(), m_GuidesEnabled, false, preview);
+ m_Translation->Render(m_PickResult.GetWidgetId(), m_GuidesEnabled, false,
+ m_fullSizePreview, preview);
}
m_RenderContext->EndRender();