diff options
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgtexture.cpp')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgtexture.cpp | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgtexture.cpp b/src/quick/scenegraph/coreapi/qsgtexture.cpp index 58b42e4094..418aaca605 100644 --- a/src/quick/scenegraph/coreapi/qsgtexture.cpp +++ b/src/quick/scenegraph/coreapi/qsgtexture.cpp @@ -317,6 +317,34 @@ static void qt_debug_remove_texture(QSGTexture* texture) \since 5.9 */ +/*! + \class QSGTexture::NativeTexture + \brief Contains information about the underlying native resources of a texture. + \since 5.15 + */ + +/*! + \variable QSGTexture::NativeTexture::object + \brief a pointer to the native object handle. + + With OpenGL, the native handle is a GLuint value, so \c object is then a + pointer to a GLuint. With Vulkan, the native handle is a VkImage, so \c + object is a pointer to a VkImage. With Direct3D 11 and Metal \c + object is a pointer to a ID3D11Texture2D or MTLTexture pointer, respectively. + + \note Pay attention to the fact that \a object is always a pointer + to the native texture handle type, even if the native type itself is a + pointer. + */ + +/*! + \variable QSGTexture::NativeTexture::layout + \brief Specifies the current image layout for APIs like Vulkan. + + For Vulkan, \c layout contains a \c VkImageLayout value. + */ + + #ifndef QT_NO_DEBUG Q_QUICK_PRIVATE_EXPORT void qsg_set_material_failure(); #endif @@ -721,6 +749,28 @@ void QSGTexture::updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch *resourceUp } /*! + \return the platform-specific texture data for this texture. + + \note This is only available when running the graphics API independent + rendering path of the scene graph. Use textureId() otherwise. + + Returns an empty result (\c object is null) if there is no available + underlying native texture. + + \since 5.15 + \sa QQuickWindow::createTextureFromNativeObject() + */ +QSGTexture::NativeTexture QSGTexture::nativeTexture() const +{ + Q_D(const QSGTexture); + if (auto *tex = d->rhiTexture()) { + auto nativeTexture = tex->nativeTexture(); + return {nativeTexture.object, nativeTexture.layout}; + } + return {}; +} + +/*! \internal */ void QSGTexture::setWorkResourceUpdateBatch(QRhiResourceUpdateBatch *resourceUpdates) @@ -792,11 +842,15 @@ void QSGTexturePrivate::updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch *res /*! \fn bool QSGDynamicTexture::updateTexture() - Call this function to explicitly update the dynamic texture. Calling bind() will bind - the content that was previously updated. + Call this function to explicitly update the dynamic texture. The function returns true if the texture was changed as a resul of the update; otherwise returns false. + + \note This function is typically called from QQuickItem::updatePaintNode() + or QSGNode::preprocess(), meaning during the \c{synchronization} or the + \c{node preprocessing} phases of the scenegraph. Calling it at other times + is discouraged and can lead to unexpected behavior. */ /*! |