// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qrendertargetoutput.h" #include "qrendertargetoutput_p.h" #include "qtexture.h" QT_BEGIN_NAMESPACE namespace Qt3DRender { /*! \class Qt3DRender::QRenderTargetOutput \brief The QRenderTargetOutput class allows the specification of an attachment of a render target (whether it is a color texture, a depth texture, etc... ). \since 5.7 \inmodule Qt3DRender A QRenderTargetOutput specifies the attachment point and parameters for texture that is attached to render target. In addition to the attachment point, texture miplevel, layer and cubemap face can be specified. The texture attached to the QRenderTargetOutput must be compatible with the given parameters. \note Left and Right attachment points are special values. They do not refer to render target objects to be either of the back buffers used for stereo rendering. */ /*! \qmltype RenderTargetOutput \brief The RenderTargetOutput type allows the specification of an attachment of a render target (whether it is a color texture, a depth texture, etc... ). \since 5.7 \inqmlmodule Qt3D.Render \inherits Node \instantiates Qt3DRender::QRenderTargetOutput A RenderTargetOutput specifies the attachment point and parameters for texture that is attached to render target. In addition to the attachment point, texture miplevel, layer and cubemap face can be specified. The texture attached to the RenderTargetOutput must be compatible with the given parameters. \note Left and Right attachment points are special values. They do not refer to render target objects, but rather to either of the back buffers used for stereo rendering. */ /*! \enum Qt3DRender::QRenderTargetOutput::AttachmentPoint This enumeration specifies the values for the attachment point. \value Color0 Color attachment point at index 0 \value Color1 Color attachment point at index 1 \value Color2 Color attachment point at index 2 \value Color3 Color attachment point at index 3 \value Color4 Color attachment point at index 4 \value Color5 Color attachment point at index 5 \value Color6 Color attachment point at index 6 \value Color7 Color attachment point at index 7 \value Color8 Color attachment point at index 8 \value Color9 Color attachment point at index 9 \value Color10 Color attachment point at index 10 \value Color11 Color attachment point at index 11 \value Color12 Color attachment point at index 12 \value Color13 Color attachment point at index 13 \value Color14 Color attachment point at index 14 \value Color15 Color attachment point at index 15 \value Depth Depth attachment point \value Stencil Stencil attachment point \value DepthStencil DepthStencil attachment point \value Left Back Left Draw Buffer \value Right Back Right Draw Buffer */ /*! \qmlproperty enumeration RenderTargetOutput::attachmentPoint Holds the attachment point of the RenderTargetOutput. \list \li RenderTargetOutput.Color0 \li RenderTargetOutput.Color1 \li RenderTargetOutput.Color2 \li RenderTargetOutput.Color3 \li RenderTargetOutput.Color4 \li RenderTargetOutput.Color5 \li RenderTargetOutput.Color6 \li RenderTargetOutput.Color7 \li RenderTargetOutput.Color8 \li RenderTargetOutput.Color9 \li RenderTargetOutput.Color10 \li RenderTargetOutput.Color11 \li RenderTargetOutput.Color12 \li RenderTargetOutput.Color13 \li RenderTargetOutput.Color14 \li RenderTargetOutput.Color15 \li RenderTargetOutput.Depth \li RenderTargetOutput.Stencil \li RenderTargetOutput.DepthStencil \li RenderTargetOutput.Left \li RenderTargetOutput.Right \endlist \sa Qt3DRender::QRenderTargetOutput::AttachmentPoint */ /*! \qmlproperty Texture RenderTargetOutput::texture Holds the texture attached to the attachment point. */ /*! \qmlproperty int RenderTargetOutput::mipLevel Holds the miplevel of the attached texture the rendering is directed to. */ /*! \qmlproperty int RenderTargetOutput::layer Holds the layer of the attached texture the rendering is directed to. */ /*! \qmlproperty enumeration RenderTargetOutput::face Holds the face of the attached cubemap texture the rendering is directed to. \list \li Texture.CubeMapPositiveX \li Texture.CubeMapNegativeX \li Texture.CubeMapPositiveY \li Texture.CubeMapNegativeY \li Texture.CubeMapPositiveZ \li Texture.CubeMapNegativeZ \endlist \sa Qt3DRender::QAbstractTexture::CubeMapFace */ /*! \property Qt3DRender::QRenderTargetOutput::attachmentPoint Holds the attachment point of the QRenderTargetOutput. */ /*! \property Qt3DRender::QRenderTargetOutput::texture Holds the texture attached to the attachment point. */ /*! \property Qt3DRender::QRenderTargetOutput::mipLevel Holds the miplevel of the attached texture the rendering is directed to. */ /*! \property Qt3DRender::QRenderTargetOutput::layer Holds the layer of the attached texture the rendering is directed to. */ /*! \property Qt3DRender::QRenderTargetOutput::face Holds the face of the attached cubemap texture the rendering is directed to. */ /*! \internal */ QRenderTargetOutputPrivate::QRenderTargetOutputPrivate() : QNodePrivate() , m_texture(nullptr) , m_attachmentPoint(QRenderTargetOutput::Color0) , m_mipLevel(0) , m_layer(0) , m_face(QAbstractTexture::CubeMapNegativeX) { } /*! The constructor creates a new QRenderTargetOutput::QRenderTargetOutput instance with the specified \a parent. */ QRenderTargetOutput::QRenderTargetOutput(QNode *parent) : QNode(*new QRenderTargetOutputPrivate, parent) { } /*! \internal */ QRenderTargetOutput::~QRenderTargetOutput() { } /*! \internal */ QRenderTargetOutput::QRenderTargetOutput(QRenderTargetOutputPrivate &dd, QNode *parent) : QNode(dd, parent) { } void QRenderTargetOutput::setAttachmentPoint(QRenderTargetOutput::AttachmentPoint attachmentPoint) { Q_D(QRenderTargetOutput); if (attachmentPoint != d->m_attachmentPoint) { d->m_attachmentPoint = attachmentPoint; emit attachmentPointChanged(attachmentPoint); } } QRenderTargetOutput::AttachmentPoint QRenderTargetOutput::attachmentPoint() const { Q_D(const QRenderTargetOutput); return d->m_attachmentPoint; } void QRenderTargetOutput::setTexture(QAbstractTexture *texture) { Q_D(QRenderTargetOutput); if (texture != d->m_texture) { if (d->m_texture) d->unregisterDestructionHelper(d->m_texture); // Handle inline declaration if (texture && !texture->parent()) texture->setParent(this); d->m_texture = texture; // Ensures proper bookkeeping if (d->m_texture) d->registerDestructionHelper(d->m_texture, &QRenderTargetOutput::setTexture, d->m_texture); emit textureChanged(texture); } } QAbstractTexture *QRenderTargetOutput::texture() const { Q_D(const QRenderTargetOutput); return d->m_texture; } void QRenderTargetOutput::setMipLevel(int level) { Q_D(QRenderTargetOutput); if (d->m_mipLevel != level) { d->m_mipLevel = level; emit mipLevelChanged(level); } } int QRenderTargetOutput::mipLevel() const { Q_D(const QRenderTargetOutput); return d->m_mipLevel; } void QRenderTargetOutput::setLayer(int layer) { Q_D(QRenderTargetOutput); if (d->m_layer != layer) { d->m_layer = layer; emit layerChanged(layer); } } int QRenderTargetOutput::layer() const { Q_D(const QRenderTargetOutput); return d->m_layer; } void QRenderTargetOutput::setFace(QAbstractTexture::CubeMapFace face) { Q_D(QRenderTargetOutput); if (d->m_face != face) { d->m_face = face; emit faceChanged(face); } } QAbstractTexture::CubeMapFace QRenderTargetOutput::face() const { Q_D(const QRenderTargetOutput); return d->m_face; } } // namespace Qt3DRender QT_END_NAMESPACE #include "moc_qrendertargetoutput.cpp"