diff options
author | Paul Olav Tvete <paul.tvete@qt.io> | 2019-11-29 12:43:38 +0100 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@qt.io> | 2019-12-17 13:08:41 +0100 |
commit | 5b8a0966ce32fbe9739f955c759cf16131e72f7c (patch) | |
tree | 026c0d936c214676c724bd42c0c8afc0cb311bcd /src/quick/scenegraph/coreapi/qsgtexture.cpp | |
parent | cc759804aa4156eb75094345dbfe21597b2fe3b8 (diff) |
Add API to get the platform specific texture handle
Also update the implementation of setTextureFromNativeObject
to use the new API from QRhi
Task-number: QTBUG-78570
Change-Id: Ic43371c4bb7a1dd14bfe5ef0d8ce2ef50e1d25d6
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgtexture.cpp')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgtexture.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgtexture.cpp b/src/quick/scenegraph/coreapi/qsgtexture.cpp index 58b42e4094..715633fdba 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) |