Revision control
Copy as Markdown
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#include "qquick3dtextureproviderextension.h"
#include <QtQuick3D/private/qquick3dobject_p.h>
#include "qquick3dtextureproviderextension_p.h"
QT_BEGIN_NAMESPACE
/*!
\class QQuick3DTextureProviderExtension
\inmodule QtQuick3D
\since 6.11
\brief Abstract class for implementing user side texture provider extensions.
This is the front-end side of a texture provider extension. The back-end side is implemented
in \l QSSGRenderExtension. The QQuick3DTextureProviderExtension is a specialization of the
QQuick3DRenderExtension class that is used to create a custom texture provider extension that can
both provide additional metadata about what type of texture will be provided and also automatically
register the extension with the QtQuick3D scene graph. This means it is unecessary to manually add
the extension to the list of extensions to be used with a \l View3D, and just using the textureProvider
property of the Texture component is enough to trigger the extension code to be run when necessary.
The QQuick3DTextureProviderExtension class is an abstract class that should be subclassed and
exposed to QML. The subclass should implement the \l QQuick3DRenderExtension::updateSpatialNode()
function and return a QSSGRenderExtension instance that contains the code that should be run.
\sa QSSGRenderExtension
*/
/*!
\enum QQuick3DTextureProviderExtension::SamplerHint
Specifies a hint about the type of texture that will be
provided by the extension.
\value Sampler2D A 2D texture
\value Sampler2DArray An array texture
\value Sampler3D A 3D texture
\value SamplerCube A cube map texture
\value SamplerCubeArray An array of cube map textures
\value SamplerBuffer A buffer texture
*/
/*!
\qmltype TextureProviderExtension
\nativetype QQuick3DTextureProviderExtension
\inqmlmodule QtQuick3D
\inherits RenderExtension
\since 6.11
\brief Abstract base type for render extensions that produce a texture.
TextureProviderExtension is an uncreatable abstract base type for render extensions
that expose a GPU texture to the Qt Quick 3D scene. Subclasses (such as
\l RenderOutputProvider) can be assigned to the \l {Texture::textureProvider}
{textureProvider} property of a \l Texture, causing the extension's render code
to run automatically when the texture is needed by the scene.
\sa RenderOutputProvider, QQuick3DTextureProviderExtension, QSSGRenderExtension
*/
/*!
\property QQuick3DTextureProviderExtension::samplerHint
\since 6.11
This property contains a hint about the type of texture that will be
provided by the extension. This is necessary because the texture data will
not be provided until it is necessary, but materials that use the Texture
component need to know what type of sampler to provide.
The default value is \c QQuick3DTextureProviderExtension::Sampler2D.
\note This property is only used when using CustomMaterials.
\sa SamplerHint
*/
/*!
\qmlenum TextureProviderExtension::SamplerHint
\qmlenumeratorsfrom QQuick3DTextureProviderExtension::SamplerHint
\since 6.11
Specifies a hint about the type of texture the extension provides.
*/
/*!
\qmlproperty SamplerHint TextureProviderExtension::samplerHint
\since 6.11
This property contains a hint about the type of texture that will be provided by the extension.
This is necessary because the texture data will not be provided until it is necessary, but materials
that use the Texture component need to know what type of sampler to provide.
The default value is \c TextureProviderExtension.Sampler2D.
\note This property is only used when using CustomMaterials.
*/
QQuick3DTextureProviderExtensionPrivate::QQuick3DTextureProviderExtensionPrivate()
: QQuick3DObjectPrivate(QQuick3DObjectPrivate::Type::TextureProvider)
{
}
QQuick3DTextureProviderExtension::QQuick3DTextureProviderExtension(QQuick3DObject *parent)
: QQuick3DRenderExtension(*new QQuick3DTextureProviderExtensionPrivate(), parent)
{
}
QQuick3DTextureProviderExtension::~QQuick3DTextureProviderExtension()
{
}
/*!
\fn QSSGRenderGraphObject *QQuick3DTextureProviderExtension::updateSpatialNode(QSSGRenderGraphObject *node)
This function is called during the synchronization of the QtQuick3D scene graph when an item is
created or when an update is requested, usually as a result of a change in the item's properties.
The function should return a QSSGRenderTextureProviderExtension instance that contains the code that should be
run during QtQuick3D's rendering pipeline execution.
The \a node parameter is the previous QSSGRenderTextureProviderExtension instance that was returned from this
function, or null if this is the first time the function is called. The function can return the
same instance, a different instance, or null. If the function returns null, the extension will
be removed from the rendering pipeline.
\note The QSSGRenderTextureProviderExtension instance is a resource object and will be owned by the QtQuick3D
scene graph. If a different instance, or null, is returned, the previous instance will be
queued for deletion by the renderer.
\sa QSSGRenderTextureProviderExtension
*/
/*!
\fn void QQuick3DTextureProviderExtension::surfaceChanged()
\since 6.12
This signal is emitted when the underlying rendering surface has changed
and textures need to be recreated.
*/
QSSGRenderGraphObject *QQuick3DTextureProviderExtension::updateSpatialNode(QSSGRenderGraphObject *node)
{
return QQuick3DRenderExtension::updateSpatialNode(node);
}
QQuick3DTextureProviderExtension::SamplerHint QQuick3DTextureProviderExtension::samplerHint() const
{
Q_D(const QQuick3DTextureProviderExtension);
return d->samplerHint;
}
void QQuick3DTextureProviderExtension::setSamplerHint(SamplerHint newSamplerHint)
{
Q_D(QQuick3DTextureProviderExtension);
if (d->samplerHint == newSamplerHint)
return;
d->samplerHint = newSamplerHint;
emit samplerHintChanged();
}
bool QQuick3DTextureProviderExtension::event(QEvent *event)
{
return QQuick3DRenderExtension::event(event);
}
QT_END_NAMESPACE