1// Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qabstracttextureimage.h"
5#include "qabstracttextureimage_p.h"
6#include <Qt3DRender/qtextureimagedatagenerator.h>
7
8QT_BEGIN_NAMESPACE
9
10
11namespace Qt3DRender {
12
13using namespace Qt3DCore;
14
15QTextureImageDataGenerator::~QTextureImageDataGenerator() = default;
16
17/*!
18 \class Qt3DRender::QTextureImageDataGenerator
19 \inmodule Qt3DRender
20 \since 5.7
21 \brief Provides texture image data for QAbstractTextureImage.
22
23 QTextureImageDataGenerator is a data provider for QAbstractTexture.
24 QTextureImageDataGenerator can be used to expand Qt3D with more ways to load
25 texture image data as well as support user-defined formats and formats Qt3D
26 does not natively support. The data is returned by the QTextureImageDataPtr
27 which contains the data that will be loaded to the texture.
28 QTextureImageDataGenerator is executed by Aspect jobs in the backend.
29 */
30/*!
31 \typedef Qt3DRender::QTextureImageDataPtr
32 \relates Qt3DRender::QTextureImageDataGenerator
33
34 Shared pointer to \l QTextureImageData.
35*/
36
37/*!
38 \fn Qt3DRender::QTextureImageDataPtr Qt3DRender::QTextureImageDataGenerator::operator()()
39
40 Implement the method to return the texture image data.
41*/
42
43/*!
44 \fn bool Qt3DRender::QTextureImageDataGenerator::operator ==(const QTextureImageDataGenerator &other) const
45
46 Implement the method to compare this texture data generator to \a other.
47 Returns a boolean that indicates whether the \l QAbstractTextureImage needs to reload
48 the \l QTextureImageData.
49*/
50
51QAbstractTextureImagePrivate::QAbstractTextureImagePrivate()
52 : QNodePrivate(),
53 m_mipLevel(0),
54 m_layer(0),
55 m_face(QAbstractTexture::CubeMapPositiveX)
56{
57}
58
59QAbstractTextureImagePrivate::~QAbstractTextureImagePrivate()
60{
61}
62
63QTextureImageDataGeneratorPtr QAbstractTextureImagePrivate::dataGenerator() const
64{
65 Q_Q(const QAbstractTextureImage);
66 return q->dataGenerator();
67}
68
69/*!
70 \qmltype AbstractTextureImage
71 \nativetype Qt3DRender::QAbstractTextureImage
72 \inherits Node
73 \inqmlmodule Qt3D.Render
74 \qmlabstract
75 \since 5.5
76 \brief Encapsulates the necessary information to create an OpenGL texture image.
77*/
78
79/*!
80 \class Qt3DRender::QAbstractTextureImage
81 \inmodule Qt3DRender
82 \since 5.5
83 \brief Encapsulates the necessary information to create an OpenGL texture image.
84
85 QAbstractTextureImage should be used as the means of providing image data to a
86 QAbstractTexture. It contains the necessary information: mipmap
87 level, layer, cube face load at the proper place data into an OpenGL texture.
88
89 The actual data is provided through a QTextureImageDataGenerator that will be
90 executed by Aspect jobs in the backend. QAbstractTextureImage should be
91 subclassed to provide a functor and eventual additional properties needed by
92 the functor to load actual data.
93
94 \note: QAbstractTextureImage should never be shared. Expect crashes, undefined
95 behavior at best if this rule is not respected.
96 */
97
98/*!
99 \fn Qt3DRender::QTextureImageDataGeneratorPtr Qt3DRender::QAbstractTextureImage::dataGenerator() const
100
101 Implement this method to return the QTextureImageDataGeneratorPtr instance,
102 which will provide the data for the texture image.
103*/
104
105/*!
106 Constructs a new QAbstractTextureImage instance with \a parent as parent.
107 */
108QAbstractTextureImage::QAbstractTextureImage(QNode *parent)
109 : QNode(*new QAbstractTextureImagePrivate, parent)
110{
111}
112
113/*! \internal */
114QAbstractTextureImage::~QAbstractTextureImage()
115{
116}
117
118
119/*!
120 \qmlproperty int Qt3D.Render::AbstractTextureImage::mipLevel
121
122 Holds the mipmap level of the texture image.
123 */
124
125/*!
126 \property Qt3DRender::QAbstractTextureImage::mipLevel
127
128 Holds the mipmap level of the texture image.
129 */
130int QAbstractTextureImage::mipLevel() const
131{
132 Q_D(const QAbstractTextureImage);
133 return d->m_mipLevel;
134}
135
136/*!
137 \qmlproperty int Qt3D.Render::AbstractTextureImage::layer
138
139 Holds the layer of the texture image.
140 */
141
142/*!
143 \property Qt3DRender::QAbstractTextureImage::layer
144
145 \return the layer of the texture image.
146 */
147int QAbstractTextureImage::layer() const
148{
149 Q_D(const QAbstractTextureImage);
150 return d->m_layer;
151}
152
153/*!
154 \qmlproperty enumeration Qt3D.Render::AbstractTextureImage::face
155
156 Holds the cube map face of the texture image.
157
158 \value CubeMapPositiveX 0x8515 GL_TEXTURE_CUBE_MAP_POSITIVE_X
159 \value CubeMapNegativeX 0x8516 GL_TEXTURE_CUBE_MAP_NEGATIVE_X
160 \value CubeMapPositiveY 0x8517 GL_TEXTURE_CUBE_MAP_POSITIVE_Y
161 \value CubeMapNegativeY 0x8518 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
162 \value CubeMapPositiveZ 0x8519 GL_TEXTURE_CUBE_MAP_POSITIVE_Z
163 \value CubeMapNegativeZ 0x851A GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
164
165 \note The cube map face has a meaning only for
166 \l [CPP] {Qt3DRender::QAbstractTexture::}{TargetCubeMap} and
167 \l [CPP] {Qt3DRender::QAbstractTexture::}{TargetCubeMapArray}.
168 */
169
170/*!
171 \property Qt3DRender::QAbstractTextureImage::face
172
173 Holds the cube map face of the texture image.
174
175 \note The cube map face has a meaning only for
176 \l {QAbstractTexture::}{TargetCubeMap} and
177 \l {QAbstractTexture::}{TargetCubeMapArray}.
178 */
179QAbstractTexture::CubeMapFace QAbstractTextureImage::face() const
180{
181 Q_D(const QAbstractTextureImage);
182 return d->m_face;
183}
184
185/*!
186 * Sets the mip level of a texture to \a level.
187 * \param level
188 */
189void QAbstractTextureImage::setMipLevel(int level)
190{
191 Q_D(QAbstractTextureImage);
192 if (level != d->m_mipLevel) {
193 d->m_mipLevel = level;
194 emit mipLevelChanged(mipLevel: level);
195 }
196}
197
198/*!
199 * Sets the layer of a texture to \a layer.
200 * \param layer
201 */
202void QAbstractTextureImage::setLayer(int layer)
203{
204 Q_D(QAbstractTextureImage);
205 if (layer != d->m_layer) {
206 d->m_layer = layer;
207 emit layerChanged(layer);
208 }
209}
210
211/*!
212 * Sets the texture image face to \a face.
213 * \param face
214 */
215void QAbstractTextureImage::setFace(QAbstractTexture::CubeMapFace face)
216{
217 Q_D(QAbstractTextureImage);
218 if (face != d->m_face) {
219 d->m_face = face;
220 emit faceChanged(face);
221 }
222}
223
224/*!
225 Triggers an update of the data generator that is sent to the backend.
226 */
227void QAbstractTextureImage::notifyDataGeneratorChanged()
228{
229 Q_D(QAbstractTextureImage);
230 d->update();
231}
232
233/*! \internal */
234QAbstractTextureImage::QAbstractTextureImage(QAbstractTextureImagePrivate &dd, QNode *parent)
235 : QNode(dd, parent)
236{
237}
238
239} // namespace Qt3DRender
240
241QT_END_NAMESPACE
242
243#include "moc_qabstracttextureimage.cpp"
244

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qt3d/src/render/texture/qabstracttextureimage.cpp