Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dmaterial.cpp
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5#include "qquick3dobject_p.h"
7
8#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
9#include <QtQuick3DRuntimeRender/private/qssgrendercustommaterial_p.h>
10#include <QtQuick3DUtils/private/qssgutils_p.h>
11
13
84
88
90{
91 return m_iblProbe;
92}
93
95{
96 return m_cullMode;
97}
98
100{
101 return m_depthDrawMode;
102}
103
105{
106 if (m_iblProbe == iblProbe)
107 return;
108
110
111 m_iblProbe = iblProbe;
112 emit lightProbeChanged(m_iblProbe);
113 update();
114}
115
117{
118 if (m_cullMode == cullMode)
119 return;
120
121 m_cullMode = cullMode;
122 emit cullModeChanged(m_cullMode);
123 update();
124}
125
127{
128 if (m_depthDrawMode == depthDrawMode)
129 return;
130
131 m_depthDrawMode = depthDrawMode;
132 emit depthDrawModeChanged(m_depthDrawMode);
133 update();
134}
135
137{
138 if (!node)
139 return nullptr;
140
142
143 // Set the common properties
144 if (node->type == QSSGRenderGraphObject::Type::DefaultMaterial ||
145 node->type == QSSGRenderGraphObject::Type::PrincipledMaterial ||
146 node->type == QSSGRenderGraphObject::Type::SpecularGlossyMaterial) {
147 auto defaultMaterial = static_cast<QSSGRenderDefaultMaterial *>(node);
148
149 if (!m_iblProbe)
150 defaultMaterial->iblProbe = nullptr;
151 else
152 defaultMaterial->iblProbe = m_iblProbe->getRenderImage();
153
154 defaultMaterial->cullMode = QSSGCullFaceMode(m_cullMode);
155 defaultMaterial->depthDrawMode = QSSGDepthDrawMode(m_depthDrawMode);
156
157 DebugViewHelpers::ensureDebugObjectName(defaultMaterial, this);
158
159 node = defaultMaterial;
160 } else if (node->type == QSSGRenderGraphObject::Type::CustomMaterial) {
161 auto customMaterial = static_cast<QSSGRenderCustomMaterial *>(node);
162
163 if (!m_iblProbe)
164 customMaterial->m_iblProbe = nullptr;
165 else
166 customMaterial->m_iblProbe = m_iblProbe->getRenderImage();
167
168 customMaterial->m_cullMode = QSSGCullFaceMode(m_cullMode);
169 customMaterial->m_depthDrawMode = QSSGDepthDrawMode(m_depthDrawMode);
170
171 DebugViewHelpers::ensureDebugObjectName(customMaterial, this);
172
173 node = customMaterial;
174 }
175
176 return node;
177}
178
179void QQuick3DMaterial::itemChange(QQuick3DObject::ItemChange change, const QQuick3DObject::ItemChangeData &value)
180{
181 if (change == QQuick3DObject::ItemSceneChange)
182 updateSceneManager(value.sceneManager);
183}
184
185void QQuick3DMaterial::updateSceneManager(QQuick3DSceneManager *sceneManager)
186{
187 if (sceneManager) {
188 QQuick3DObjectPrivate::refSceneManager(m_iblProbe, *sceneManager);
189 } else {
191 }
192}
193
void cullModeChanged(QQuick3DMaterial::CullMode cullMode)
QQuick3DMaterial(QQuick3DObjectPrivate &dd, QQuick3DObject *parent=nullptr)
\qmltype Material \inherits Object3D \inqmlmodule QtQuick3D
void setDepthDrawMode(QQuick3DMaterial::DepthDrawMode depthDrawMode)
DepthDrawMode depthDrawMode
void setCullMode(QQuick3DMaterial::CullMode cullMode)
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void itemChange(ItemChange, const ItemChangeData &) override
~QQuick3DMaterial() override
void depthDrawModeChanged(QQuick3DMaterial::DepthDrawMode depthDrawMode)
QQuick3DTexture * lightProbe
void lightProbeChanged(QQuick3DTexture *lightProbe)
void setLightProbe(QQuick3DTexture *lightProbe)
void refSceneManager(QQuick3DSceneManager &)
static void attachWatcher(Context *context, Setter setter, Object3D *newO, Object3D *oldO)
Attach a object-destroyed-watcher to an object that's not owned.
\qmltype Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DObject \inherits QtObject
virtual QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node)
QSSGRenderImage * getRenderImage()
void ensureDebugObjectName(T *node, QObject *src)
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define emit