/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include namespace MaterialEditor { MaterialEditorMainWindow::MaterialEditorMainWindow(const AZ::Crc32& toolId, QWidget* parent) : Base(toolId, "MaterialEditorMainWindow", parent) { m_assetBrowser->GetSearchWidget()->SetFilterState("", AZ::RPI::StreamingImageAsset::Group, true); m_assetBrowser->GetSearchWidget()->SetFilterState("", AZ::RPI::MaterialAsset::Group, true); m_documentInspector = new AtomToolsFramework::AtomToolsDocumentInspector(m_toolId, this); m_documentInspector->SetDocumentSettingsPrefix("/O3DE/Atom/MaterialEditor/DocumentInspector"); AddDockWidget("Inspector", m_documentInspector, Qt::RightDockWidgetArea); // Set up the toolbar that controls the viewport settings m_toolBar = new AtomToolsFramework::EntityPreviewViewportToolBar(m_toolId, this); // Create the viewport widget that will be shared between all material editor documents m_materialViewport = new AtomToolsFramework::EntityPreviewViewportWidget(m_toolId, this); // Initialize the entity context that will be used to create all of the entities displayed in the viewport auto entityContext = AZStd::make_shared(); entityContext->InitContext(); // Initialize the atom scene and pipeline that will bind to the viewport window to render entities and presets auto viewportScene = AZStd::make_shared( m_toolId, m_materialViewport, entityContext, "MaterialEditorViewportWidget", "passes/mainrenderpipeline.azasset"); // Viewport content will instantiate all of the entities that will be displayed and controlled by the viewport auto viewportContent = AZStd::make_shared(m_toolId, m_materialViewport, entityContext); // The input controller creates and binds input behaviors to control viewport objects auto viewportController = AZStd::make_shared(m_toolId, m_materialViewport, viewportContent); // Inject the entity context, scene, content, and controller into the viewport widget m_materialViewport->Init(entityContext, viewportScene, viewportContent, viewportController); // Register the toolbar in the viewport as the central widget, or main view of the material editor centralWidget()->layout()->addWidget(m_toolBar); centralWidget()->layout()->addWidget(m_materialViewport); m_viewportSettingsInspector = new AtomToolsFramework::EntityPreviewViewportSettingsInspector(m_toolId, this); AddDockWidget("Viewport Settings", m_viewportSettingsInspector, Qt::LeftDockWidgetArea); SetDockWidgetVisible("Viewport Settings", false); OnDocumentOpened(AZ::Uuid::CreateNull()); } void MaterialEditorMainWindow::OnDocumentOpened(const AZ::Uuid& documentId) { Base::OnDocumentOpened(documentId); m_documentInspector->SetDocumentId(documentId); } void MaterialEditorMainWindow::ResizeViewportRenderTarget(uint32_t width, uint32_t height) { QSize requestedViewportSize = QSize(width, height) / devicePixelRatioF(); QSize currentViewportSize = m_materialViewport->size(); QSize offset = requestedViewportSize - currentViewportSize; QSize requestedWindowSize = size() + offset; resize(requestedWindowSize); AZ_Assert( m_materialViewport->size() == requestedViewportSize, "Resizing the window did not give the expected viewport size. Requested %d x %d but got %d x %d.", requestedViewportSize.width(), requestedViewportSize.height(), m_materialViewport->size().width(), m_materialViewport->size().height()); [[maybe_unused]] QSize newDeviceSize = m_materialViewport->size(); AZ_Warning( "Material Editor", static_cast(newDeviceSize.width()) == width && static_cast(newDeviceSize.height()) == height, "Resizing the window did not give the expected frame size. Requested %d x %d but got %d x %d.", width, height, newDeviceSize.width(), newDeviceSize.height()); } void MaterialEditorMainWindow::LockViewportRenderTargetSize(uint32_t width, uint32_t height) { m_materialViewport->LockRenderTargetSize(width, height); } void MaterialEditorMainWindow::UnlockViewportRenderTargetSize() { m_materialViewport->UnlockRenderTargetSize(); } AZStd::string MaterialEditorMainWindow::GetHelpUrl() const { return "https://docs.o3de.org/docs/atom-guide/look-dev/tools/material-editor/"; } } // namespace MaterialEditor #include