Add type safe native texture accessors
Following the pattern from QtGui. Task-number: QTBUG-85239 Change-Id: I07b4456028d0f45223ad10e55ce65f423bab6a9b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
6826b2decc
commit
fb96109bbc
|
@ -263,10 +263,7 @@ void CustomTextureNode::sync()
|
|||
m_texture = [m_device newTextureWithDescriptor: desc];
|
||||
[desc release];
|
||||
|
||||
QSGTexture *wrapper = m_window->createTextureFromNativeObject(QQuickWindow::NativeObjectTexture,
|
||||
quint64(m_texture),
|
||||
0,
|
||||
m_size);
|
||||
QSGTexture *wrapper = QPlatformInterface::QSGMetalTexture::fromNative((MTLTexture *) m_texture, m_window, m_size);
|
||||
|
||||
qDebug() << "Got QSGTexture wrapper" << wrapper << "for an MTLTexture of size" << m_size;
|
||||
|
||||
|
|
|
@ -716,11 +716,12 @@ void CustomTextureNode::sync()
|
|||
delete texture();
|
||||
freeTexture();
|
||||
buildTexture(m_size);
|
||||
QSGTexture *wrapper = m_window->createTextureFromNativeObject(QQuickWindow::NativeObjectTexture,
|
||||
quint64(m_texture),
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
m_size);
|
||||
QSGTexture *wrapper = QPlatformInterface::QSGVulkanTexture::fromNative(m_texture,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
m_window,
|
||||
m_size);
|
||||
setTexture(wrapper);
|
||||
Q_ASSERT(wrapper->platformInterface<QPlatformInterface::QSGVulkanTexture>()->nativeImage() == m_texture);
|
||||
}
|
||||
|
||||
m_t = float(static_cast<CustomTextureItem *>(m_item)->t());
|
||||
|
|
|
@ -123,6 +123,7 @@ qt_add_module(Quick
|
|||
scenegraph/coreapi/qsgrendernode.cpp scenegraph/coreapi/qsgrendernode.h scenegraph/coreapi/qsgrendernode_p.h
|
||||
scenegraph/coreapi/qsgrhivisualizer.cpp scenegraph/coreapi/qsgrhivisualizer_p.h
|
||||
scenegraph/coreapi/qsgtexture.cpp scenegraph/coreapi/qsgtexture.h scenegraph/coreapi/qsgtexture_p.h
|
||||
scenegraph/coreapi/qsgtexture_platform.h
|
||||
scenegraph/qsgadaptationlayer.cpp scenegraph/qsgadaptationlayer_p.h
|
||||
scenegraph/qsgbasicglyphnode.cpp scenegraph/qsgbasicglyphnode_p.h
|
||||
scenegraph/qsgbasicinternalimagenode.cpp scenegraph/qsgbasicinternalimagenode_p.h
|
||||
|
@ -398,6 +399,11 @@ qt_extend_target(Quick CONDITION QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT
|
|||
util/qquickopenglutils.cpp util/qquickopenglutils.h
|
||||
)
|
||||
|
||||
qt_extend_target(Quick CONDITION IOS OR MACOS
|
||||
SOURCES
|
||||
scenegraph/coreapi/qsgtexture_mac.mm
|
||||
)
|
||||
|
||||
qt_extend_target(Quick CONDITION QT_FEATURE_thread
|
||||
SOURCES
|
||||
scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop_p.h
|
||||
|
|
|
@ -123,6 +123,7 @@ qt_add_module(Quick
|
|||
scenegraph/coreapi/qsgrendernode.cpp scenegraph/coreapi/qsgrendernode.h scenegraph/coreapi/qsgrendernode_p.h
|
||||
scenegraph/coreapi/qsgrhivisualizer.cpp scenegraph/coreapi/qsgrhivisualizer_p.h
|
||||
scenegraph/coreapi/qsgtexture.cpp scenegraph/coreapi/qsgtexture.h scenegraph/coreapi/qsgtexture_p.h
|
||||
scenegraph/coreapi/qsgtexture_platform.h
|
||||
scenegraph/qsgadaptationlayer.cpp scenegraph/qsgadaptationlayer_p.h
|
||||
scenegraph/qsgbasicglyphnode.cpp scenegraph/qsgbasicglyphnode_p.h
|
||||
scenegraph/qsgbasicinternalimagenode.cpp scenegraph/qsgbasicinternalimagenode_p.h
|
||||
|
@ -398,6 +399,11 @@ qt_extend_target(Quick CONDITION QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT
|
|||
util/qquickopenglutils.cpp util/qquickopenglutils.h
|
||||
)
|
||||
|
||||
qt_extend_target(Quick CONDITION IOS OR MACOS
|
||||
SOURCES
|
||||
scenegraph/coreapi/qsgtexture_mac.mm
|
||||
)
|
||||
|
||||
qt_extend_target(Quick CONDITION QT_FEATURE_thread
|
||||
SOURCES
|
||||
scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop_p.h
|
||||
|
|
|
@ -346,10 +346,10 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode
|
|||
displayTexture = n->msDisplayFbo->texture();
|
||||
}
|
||||
|
||||
QSGTexture *wrapper = window()->createTextureFromNativeObject(QQuickWindow::NativeObjectTexture,
|
||||
displayTexture, 0,
|
||||
n->fbo->size(),
|
||||
QQuickWindow::TextureHasAlphaChannel);
|
||||
QSGTexture *wrapper = QPlatformInterface::QSGOpenGLTexture::fromNative(displayTexture,
|
||||
window(),
|
||||
n->fbo->size(),
|
||||
QQuickWindow::TextureHasAlphaChannel);
|
||||
n->setTexture(wrapper);
|
||||
}
|
||||
|
||||
|
|
|
@ -1495,9 +1495,10 @@ void QQuickWindowPrivate::cleanup(QSGNode *n)
|
|||
QQuickWindow by calling rendererInterface(). The enablers for this
|
||||
integration are the beforeRendering(), beforeRenderPassRecording(),
|
||||
afterRenderPassRecording(), and related signals. These allow rendering
|
||||
underlays or overlays. Alternatively, createTextureFromNativeObject() allows
|
||||
wrapping an existing native texture or image object in a QSGTexture that can
|
||||
then be used with the scene graph.
|
||||
underlays or overlays. Alternatively, QPlatformInterface::QSGOpenGLTexture,
|
||||
QPlatformInterface::QSGVulkanTexture, and other similar classes allow
|
||||
wrapping an existing native texture or image object in a QSGTexture that
|
||||
can then be used with the scene graph.
|
||||
|
||||
\section2 Rendering without Acceleration
|
||||
|
||||
|
@ -4805,80 +4806,22 @@ QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, CreateText
|
|||
return d->context->createTexture(image, flags);
|
||||
}
|
||||
|
||||
/*!
|
||||
\enum QQuickWindow::NativeObjectType
|
||||
\since 5.14
|
||||
|
||||
Specifies the type of the native object passed to functions such as
|
||||
createTextureFromNativeObject().
|
||||
|
||||
\value NativeObjectTexture The native object is a 2D texture (OpenGL,
|
||||
Direct3D 11, Metal) or image (Vulkan).
|
||||
*/
|
||||
|
||||
/*!
|
||||
Creates a new QSGTexture object from an existing native object.
|
||||
|
||||
The native object is wrapped, but not owned, by the resulting QSGTexture.
|
||||
The caller of the function is responsible for deleting the returned
|
||||
QSGTexture, but that will not destroy the underlying native object.
|
||||
|
||||
\a type specifies the type of the object. In practice the type is
|
||||
NativeObjectTexture, indicating that the native object is a texture or
|
||||
image of the underlying graphics API. Other types may be introduced in the
|
||||
future.
|
||||
|
||||
This function is currently suitable for 2D RGBA textures only.
|
||||
|
||||
\warning This function will return null if the scenegraph has not yet been
|
||||
initialized.
|
||||
|
||||
Use \a options to customize the texture attributes. Only the
|
||||
TextureHasAlphaChannel and TextureHasMipmaps are taken into account here.
|
||||
|
||||
\warning Unlike the now-removed createTextureFromId() in Qt 5, this function
|
||||
never takes ownership of the native object, and the TextureOwnsGLTexture
|
||||
flag is ignored.
|
||||
|
||||
\a size specifies the size in pixels.
|
||||
|
||||
\a nativeObjectHandle is a 64-bit container for the native object handle. With
|
||||
OpenGL, the native handle is a GLuint value, so \a nativeObjectHandle then
|
||||
contains a GLuint. With Vulkan, \a nativeObjectHandle contains a VkImage, and
|
||||
with Direct3D 11 and Metal it contains a ID3D11Texture2D or MTLTexture pointer.
|
||||
|
||||
\a nativeLayout is only used for APIs like Vulkan. When applicable, it must
|
||||
specify the current image layout, such as, a VkImageLayout value.
|
||||
|
||||
\sa sceneGraphInitialized(), QSGTexture, QSGTexture::nativeTexture(),
|
||||
{Scene Graph - Metal Texture Import}, {Scene Graph - Vulkan Texture Import}
|
||||
|
||||
\since 5.14
|
||||
*/
|
||||
QSGTexture *QQuickWindow::createTextureFromNativeObject(NativeObjectType type,
|
||||
quint64 nativeObjectHandle,
|
||||
int nativeLayout,
|
||||
const QSize &size,
|
||||
CreateTextureOptions options) const
|
||||
QSGTexture *QQuickWindowPrivate::createTextureFromNativeTexture(quint64 nativeObjectHandle,
|
||||
int nativeLayout,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options) const
|
||||
{
|
||||
if (type != NativeObjectTexture) {
|
||||
qWarning("createTextureFromNativeObject: only textures are supported");
|
||||
if (!rhi)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Q_D(const QQuickWindow);
|
||||
if (d->rhi) {
|
||||
QSGPlainTexture *texture = new QSGPlainTexture;
|
||||
texture->setTextureFromNativeObject(d->rhi, type, nativeObjectHandle, nativeLayout,
|
||||
size, options.testFlag(TextureHasMipmaps));
|
||||
texture->setHasAlphaChannel(options & TextureHasAlphaChannel);
|
||||
// note that the QRhiTexture does not (and cannot) own the native object
|
||||
texture->setOwnsTexture(true); // texture meaning the QRhiTexture here, not the native object
|
||||
texture->setTextureSize(size);
|
||||
return texture;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
QSGPlainTexture *texture = new QSGPlainTexture;
|
||||
texture->setTextureFromNativeTexture(rhi, nativeObjectHandle, nativeLayout,
|
||||
size, options.testFlag(QQuickWindow::TextureHasMipmaps));
|
||||
texture->setHasAlphaChannel(options & QQuickWindow::TextureHasAlphaChannel);
|
||||
// note that the QRhiTexture does not (and cannot) own the native object
|
||||
texture->setOwnsTexture(true); // texture meaning the QRhiTexture here, not the native object
|
||||
texture->setTextureSize(size);
|
||||
return texture;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
@ -113,11 +113,6 @@ public:
|
|||
};
|
||||
Q_ENUM(TextRenderType)
|
||||
|
||||
enum NativeObjectType {
|
||||
NativeObjectTexture
|
||||
};
|
||||
Q_ENUM(NativeObjectType)
|
||||
|
||||
explicit QQuickWindow(QWindow *parent = nullptr);
|
||||
explicit QQuickWindow(QQuickRenderControl *renderControl);
|
||||
|
||||
|
@ -156,12 +151,6 @@ public:
|
|||
QSGTexture *createTextureFromImage(const QImage &image) const;
|
||||
QSGTexture *createTextureFromImage(const QImage &image, CreateTextureOptions options) const;
|
||||
|
||||
QSGTexture *createTextureFromNativeObject(NativeObjectType type,
|
||||
quint64 nativeObjectHandle,
|
||||
int nativeLayout,
|
||||
const QSize &size,
|
||||
CreateTextureOptions options = CreateTextureOption()) const;
|
||||
|
||||
void setColor(const QColor &color);
|
||||
QColor color() const;
|
||||
|
||||
|
|
|
@ -242,6 +242,11 @@ public:
|
|||
|
||||
bool emitError(QQuickWindow::SceneGraphError error, const QString &msg);
|
||||
|
||||
QSGTexture *createTextureFromNativeTexture(quint64 nativeObjectHandle,
|
||||
int nativeLayout,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options) const;
|
||||
|
||||
QQuickItem::UpdatePaintNodeData updatePaintNodeData;
|
||||
|
||||
QQuickItem *dirtyItemList;
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QSGSoftwareLayer::QSGSoftwareLayer(QSGRenderContext *renderContext)
|
||||
: QSGLayer(*(new QSGTexturePrivate))
|
||||
: QSGLayer(*(new QSGTexturePrivate(this)))
|
||||
, m_item(nullptr)
|
||||
, m_context(renderContext)
|
||||
, m_renderer(nullptr)
|
||||
|
|
|
@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
|
|||
Q_LOGGING_CATEGORY(QSG_LOG_TEXTUREIO, "qt.scenegraph.textureio");
|
||||
|
||||
QSGCompressedTexture::QSGCompressedTexture(const QTextureFileData &texData)
|
||||
: QSGTexture(*(new QSGTexturePrivate)),
|
||||
: QSGTexture(*(new QSGTexturePrivate(this))),
|
||||
m_textureData(texData)
|
||||
{
|
||||
m_size = m_textureData.size();
|
||||
|
|
|
@ -38,8 +38,11 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "qsgtexture_p.h"
|
||||
#include "qsgtexture_platform.h"
|
||||
#include <private/qqmlglobal_p.h>
|
||||
#include <private/qsgmaterialshader_p.h>
|
||||
#include <private/qquickitem_p.h> // qquickwindow_p.h cannot be included on its own due to template nonsense
|
||||
#include <private/qquickwindow_p.h>
|
||||
#include <QtGui/private/qrhi_p.h>
|
||||
|
||||
#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) && defined(__GLIBC__)
|
||||
|
@ -101,7 +104,7 @@ QSGSamplerDescription QSGSamplerDescription::fromTexture(QSGTexture *t)
|
|||
return s;
|
||||
}
|
||||
|
||||
QSGTexturePrivate::QSGTexturePrivate()
|
||||
QSGTexturePrivate::QSGTexturePrivate(QSGTexture *t)
|
||||
: wrapChanged(false)
|
||||
, filteringChanged(false)
|
||||
, anisotropyChanged(false)
|
||||
|
@ -110,6 +113,18 @@ QSGTexturePrivate::QSGTexturePrivate()
|
|||
, mipmapMode(QSGTexture::None)
|
||||
, filterMode(QSGTexture::Nearest)
|
||||
, anisotropyLevel(QSGTexture::AnisotropyNone)
|
||||
#if QT_CONFIG(opengl)
|
||||
, m_openglTextureAccessor(t)
|
||||
#endif
|
||||
#ifdef Q_OS_WIN
|
||||
, m_d3d11TextureAccessor(t)
|
||||
#endif
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
|
||||
, m_metalTextureAccessor(t)
|
||||
#endif
|
||||
#if QT_CONFIG(vulkan)
|
||||
, m_vulkanTextureAccessor(t)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -314,34 +329,11 @@ 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 64-bit container of the native object handle.
|
||||
|
||||
With OpenGL, the native handle is a GLuint value, so \c object then
|
||||
contains a GLuint. With Vulkan, \c object contains a VkImage, and
|
||||
with Direct3D 11 and Metal it contains a ID3D11Texture2D or MTLTexture
|
||||
pointer.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\variable QSGTexture::NativeTexture::layout
|
||||
\brief Specifies the current image layout for APIs like Vulkan.
|
||||
|
||||
For Vulkan, \c layout contains a \c VkImageLayout value.
|
||||
*/
|
||||
|
||||
/*!
|
||||
Constructs the QSGTexture base class.
|
||||
*/
|
||||
QSGTexture::QSGTexture()
|
||||
: QObject(*(new QSGTexturePrivate))
|
||||
: QObject(*(new QSGTexturePrivate(this)))
|
||||
{
|
||||
#ifndef QT_NO_DEBUG
|
||||
if (qsg_leak_check)
|
||||
|
@ -651,24 +643,6 @@ void QSGTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *res
|
|||
Q_UNUSED(resourceUpdates);
|
||||
}
|
||||
|
||||
/*!
|
||||
\return the platform-specific texture data for this texture.
|
||||
|
||||
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
|
||||
{
|
||||
if (auto *tex = rhiTexture()) {
|
||||
auto nativeTexture = tex->nativeTexture();
|
||||
return {nativeTexture.object, nativeTexture.layout};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
bool QSGTexturePrivate::hasDirtySamplerOptions() const
|
||||
{
|
||||
return wrapChanged || filteringChanged || anisotropyChanged;
|
||||
|
@ -714,6 +688,324 @@ QSGDynamicTexture::QSGDynamicTexture(QSGTexturePrivate &dd)
|
|||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn template<typename T> T *QSGTexture::platformInterface<T>()
|
||||
|
||||
Returns a platform interface of type T for the texture.
|
||||
|
||||
This function provides access to platform specific functionality of
|
||||
QSGTexture, as defined in the QPlatformInterface namespace. This allows
|
||||
accessing the underlying native texture object, such as, the \c GLuint
|
||||
texture ID with OpenGL, or the \c VkImage handle with Vulkan.
|
||||
|
||||
If the requested interface is not available a \nullptr is returned.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\namespace QPlatformInterface
|
||||
\inmodule QtQuick
|
||||
\since 6.0
|
||||
|
||||
\brief The QPlatformInterface namespace contains graphics API specific
|
||||
interfaces that allow accessing the underlying graphics resources and allow
|
||||
creating QSGTexture instances that wrap an existing native resource.
|
||||
|
||||
The classes in this namespace can be passed to
|
||||
QSGTexture::platformInterface() to gain access to the appropriate graphics
|
||||
API specific interface, as long as the scene graph has been initialized with
|
||||
the graphics API in question.
|
||||
|
||||
\sa QSGTexture::platformInterface()
|
||||
*/
|
||||
|
||||
#if QT_CONFIG(opengl) || defined(Q_CLANG_QDOC)
|
||||
namespace QPlatformInterface {
|
||||
/*!
|
||||
\class QPlatformInterface::QSGOpenGLTexture
|
||||
\inmodule QtQuick
|
||||
\brief Provides access to and enables adopting OpenGL texture objects.
|
||||
\since 6.0
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn VkImage QPlatformInterface::QSGOpenGLTexture::nativeTexture() const
|
||||
\return the OpenGL texture ID.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QSGOpenGLTexture::~QSGOpenGLTexture()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
Creates a new QSGTexture wrapping an existing OpenGL texture object.
|
||||
|
||||
The native object specified in \a textureId is wrapped, but not owned, by
|
||||
the resulting QSGTexture. The caller of the function is responsible for
|
||||
deleting the returned QSGTexture, but that will not destroy the underlying
|
||||
native object.
|
||||
|
||||
This function is currently suitable for 2D RGBA textures only.
|
||||
|
||||
\warning This function will return null if the scenegraph has not yet been
|
||||
initialized.
|
||||
|
||||
Use \a options to customize the texture attributes. Only the
|
||||
TextureHasAlphaChannel and TextureHasMipmaps are taken into account here.
|
||||
|
||||
\a size specifies the size in pixels.
|
||||
|
||||
\note This function must be called on the scenegraph rendering thread.
|
||||
|
||||
\sa QQuickWindow::sceneGraphInitialized(), QSGTexture,
|
||||
{Scene Graph - Metal Texture Import}, {Scene Graph - Vulkan Texture Import}
|
||||
|
||||
\since 6.0
|
||||
*/
|
||||
QSGTexture *QSGOpenGLTexture::fromNative(GLuint textureId,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options)
|
||||
{
|
||||
return QQuickWindowPrivate::get(window)->createTextureFromNativeTexture(quint64(textureId), 0, size, options);
|
||||
}
|
||||
} // QPlatformInterface
|
||||
|
||||
GLuint QSGTexturePlatformOpenGL::nativeTexture() const
|
||||
{
|
||||
if (auto *tex = m_texture->rhiTexture())
|
||||
return GLuint(tex->nativeTexture().object);
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<> Q_QUICK_EXPORT
|
||||
QPlatformInterface::QSGOpenGLTexture *QSGTexture::platformInterface<QPlatformInterface::QSGOpenGLTexture>()
|
||||
{
|
||||
Q_D(QSGTexture);
|
||||
return &d->m_openglTextureAccessor;
|
||||
}
|
||||
#endif // opengl
|
||||
|
||||
#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
|
||||
namespace QPlatformInterface {
|
||||
/*!
|
||||
\class QPlatformInterface::QSGD3D11Texture
|
||||
\inmodule QtQuick
|
||||
\brief Provides access to and enables adopting Direct3D 11 texture objects.
|
||||
\since 6.0
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void *QPlatformInterface::QSGD3D11Texture::nativeTexture() const
|
||||
\return the ID3D11Texture2D object.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QSGD3D11Texture::~QSGD3D11Texture()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
Creates a new QSGTexture wrapping an existing Direct 3D 11 \a texture object.
|
||||
|
||||
The native object is wrapped, but not owned, by the resulting QSGTexture.
|
||||
The caller of the function is responsible for deleting the returned
|
||||
QSGTexture, but that will not destroy the underlying native object.
|
||||
|
||||
This function is currently suitable for 2D RGBA textures only.
|
||||
|
||||
\warning This function will return null if the scene graph has not yet been
|
||||
initialized.
|
||||
|
||||
Use \a options to customize the texture attributes. Only the
|
||||
TextureHasAlphaChannel and TextureHasMipmaps are taken into account here.
|
||||
|
||||
\a size specifies the size in pixels.
|
||||
|
||||
\note This function must be called on the scene graph rendering thread.
|
||||
|
||||
\sa QQuickWindow::sceneGraphInitialized(), QSGTexture,
|
||||
{Scene Graph - Metal Texture Import}, {Scene Graph - Vulkan Texture Import}
|
||||
|
||||
\since 6.0
|
||||
*/
|
||||
QSGTexture *QSGD3D11Texture::fromNative(void *texture,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options)
|
||||
{
|
||||
return QQuickWindowPrivate::get(window)->createTextureFromNativeTexture(quint64(texture), 0, size, options);
|
||||
}
|
||||
} // QPlatformInterface
|
||||
|
||||
void *QSGTexturePlatformD3D11::nativeTexture() const
|
||||
{
|
||||
if (auto *tex = m_texture->rhiTexture())
|
||||
return reinterpret_cast<void *>(quintptr(tex->nativeTexture().object));
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<> Q_QUICK_EXPORT
|
||||
QPlatformInterface::QSGD3D11Texture *QSGTexture::platformInterface<QPlatformInterface::QSGD3D11Texture>()
|
||||
{
|
||||
Q_D(QSGTexture);
|
||||
return &d->m_d3d11TextureAccessor;
|
||||
}
|
||||
#endif // win
|
||||
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS) || defined(Q_CLANG_QDOC)
|
||||
namespace QPlatformInterface {
|
||||
/*!
|
||||
\class QPlatformInterface::QSGMetalTexture
|
||||
\inmodule QtQuick
|
||||
\brief Provides access to and enables adopting Metal texture objects.
|
||||
\since 6.0
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn MTLTexture *QPlatformInterface::QSGMetalTexture::nativeTexture() const
|
||||
\return the Metal texture object.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QSGMetalTexture::~QSGMetalTexture()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QSGTexture *QPlatformInterface::QSGMetalTexture::fromNative(MTLTexture *texture, QQuickWindow *window, const QSize &size, QQuickWindow::CreateTextureOptions options)
|
||||
|
||||
Creates a new QSGTexture wrapping an existing Metal \a texture object.
|
||||
|
||||
The native object is wrapped, but not owned, by the resulting QSGTexture.
|
||||
The caller of the function is responsible for deleting the returned
|
||||
QSGTexture, but that will not destroy the underlying native object.
|
||||
|
||||
This function is currently suitable for 2D RGBA textures only.
|
||||
|
||||
\warning This function will return null if the scene graph has not yet been
|
||||
initialized.
|
||||
|
||||
Use \a options to customize the texture attributes. Only the
|
||||
TextureHasAlphaChannel and TextureHasMipmaps are taken into account here.
|
||||
|
||||
\a size specifies the size in pixels.
|
||||
|
||||
\note This function must be called on the scene graph rendering thread.
|
||||
|
||||
\sa QQuickWindow::sceneGraphInitialized(), QSGTexture,
|
||||
{Scene Graph - Metal Texture Import}, {Scene Graph - Vulkan Texture Import}
|
||||
|
||||
\since 6.0
|
||||
*/
|
||||
|
||||
} // QPlatformInterface
|
||||
|
||||
MTLTexture *QSGTexturePlatformMetal::nativeTexture() const
|
||||
{
|
||||
if (auto *tex = m_texture->rhiTexture())
|
||||
return (MTLTexture *) quintptr(tex->nativeTexture().object);
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<> Q_QUICK_EXPORT
|
||||
QPlatformInterface::QSGMetalTexture *QSGTexture::platformInterface<QPlatformInterface::QSGMetalTexture>()
|
||||
{
|
||||
Q_D(QSGTexture);
|
||||
return &d->m_metalTextureAccessor;
|
||||
}
|
||||
#endif // win
|
||||
|
||||
#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
|
||||
namespace QPlatformInterface {
|
||||
/*!
|
||||
\class QPlatformInterface::QSGVulkanTexture
|
||||
\inmodule QtQuick
|
||||
\brief Provides access to and enables adopting Vulkan image objects.
|
||||
\since 6.0
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn VkImage QPlatformInterface::QSGVulkanTexture::nativeImage() const
|
||||
\return the VkImage handle.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn VkImageLayout QPlatformInterface::QSGVulkanTexture::nativeImageLayout() const
|
||||
\return the image layout.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QSGVulkanTexture::~QSGVulkanTexture()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
Creates a new QSGTexture wrapping an existing Vulkan \a image object.
|
||||
|
||||
The native object is wrapped, but not owned, by the resulting QSGTexture.
|
||||
The caller of the function is responsible for deleting the returned
|
||||
QSGTexture, but that will not destroy the underlying native object.
|
||||
|
||||
This function is currently suitable for 2D RGBA textures only.
|
||||
|
||||
\warning This function will return null if the scene graph has not yet been
|
||||
initialized.
|
||||
|
||||
\a layout must specify the current layout of the image.
|
||||
|
||||
Use \a options to customize the texture attributes. Only the
|
||||
TextureHasAlphaChannel and TextureHasMipmaps are taken into account here.
|
||||
|
||||
\a size specifies the size in pixels.
|
||||
|
||||
\note This function must be called on the scene graph rendering thread.
|
||||
|
||||
\sa QQuickWindow::sceneGraphInitialized(), QSGTexture,
|
||||
{Scene Graph - Metal Texture Import}, {Scene Graph - Vulkan Texture Import}
|
||||
|
||||
\since 6.0
|
||||
*/
|
||||
QSGTexture *QSGVulkanTexture::fromNative(VkImage image,
|
||||
VkImageLayout layout,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options)
|
||||
{
|
||||
return QQuickWindowPrivate::get(window)->createTextureFromNativeTexture(quint64(image), layout, size, options);
|
||||
}
|
||||
} // QPlatformInterface
|
||||
|
||||
VkImage QSGTexturePlatformVulkan::nativeImage() const
|
||||
{
|
||||
if (auto *tex = m_texture->rhiTexture())
|
||||
return VkImage(tex->nativeTexture().object);
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
VkImageLayout QSGTexturePlatformVulkan::nativeImageLayout() const
|
||||
{
|
||||
if (auto *tex = m_texture->rhiTexture())
|
||||
return VkImageLayout(tex->nativeTexture().layout);
|
||||
return VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
}
|
||||
|
||||
template<> Q_QUICK_EXPORT
|
||||
QPlatformInterface::QSGVulkanTexture *QSGTexture::platformInterface<QPlatformInterface::QSGVulkanTexture>()
|
||||
{
|
||||
Q_D(QSGTexture);
|
||||
return &d->m_vulkanTextureAccessor;
|
||||
}
|
||||
#endif // vulkan
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "moc_qsgtexture.cpp"
|
||||
|
|
|
@ -41,8 +41,9 @@
|
|||
#define QSGTEXTURE_H
|
||||
|
||||
#include <QtQuick/qtquickglobal.h>
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QImage>
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QtGui/qimage.h>
|
||||
#include <QtQuick/qsgtexture_platform.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -80,14 +81,8 @@ public:
|
|||
Anisotropy16x
|
||||
};
|
||||
|
||||
struct NativeTexture {
|
||||
quint64 object;
|
||||
int layout;
|
||||
};
|
||||
|
||||
virtual qint64 comparisonKey() const = 0;
|
||||
virtual QRhiTexture *rhiTexture() const;
|
||||
NativeTexture nativeTexture() const;
|
||||
virtual QSize textureSize() const = 0;
|
||||
virtual bool hasAlphaChannel() const = 0;
|
||||
virtual bool hasMipmaps() const = 0;
|
||||
|
@ -117,6 +112,8 @@ public:
|
|||
|
||||
inline QRectF convertToNormalizedSourceRect(const QRectF &rect) const;
|
||||
|
||||
template<typename T> T *platformInterface();
|
||||
|
||||
protected:
|
||||
QSGTexture(QSGTexturePrivate &dd);
|
||||
};
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtQuick module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qsgtexture_p.h"
|
||||
#include "qsgtexture_platform.h"
|
||||
#include <private/qquickitem_p.h>
|
||||
#include <private/qquickwindow_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
namespace QPlatformInterface {
|
||||
|
||||
QSGTexture *QSGMetalTexture::fromNative(MTLTexture *texture,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options)
|
||||
{
|
||||
return QQuickWindowPrivate::get(window)->createTextureFromNativeTexture(quint64(texture), 0, size, options);
|
||||
}
|
||||
|
||||
} // QPlatformInterface
|
||||
|
||||
QT_END_NAMESPACE
|
|
@ -74,11 +74,56 @@ bool operator==(const QSGSamplerDescription &a, const QSGSamplerDescription &b)
|
|||
bool operator!=(const QSGSamplerDescription &a, const QSGSamplerDescription &b) Q_DECL_NOTHROW;
|
||||
size_t qHash(const QSGSamplerDescription &s, uint seed = 0) Q_DECL_NOTHROW;
|
||||
|
||||
#if QT_CONFIG(opengl)
|
||||
class Q_QUICK_PRIVATE_EXPORT QSGTexturePlatformOpenGL : public QPlatformInterface::QSGOpenGLTexture
|
||||
{
|
||||
public:
|
||||
QSGTexturePlatformOpenGL(QSGTexture *t) : m_texture(t) { }
|
||||
QSGTexture *m_texture;
|
||||
|
||||
GLuint nativeTexture() const override;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
class Q_QUICK_PRIVATE_EXPORT QSGTexturePlatformD3D11 : public QPlatformInterface::QSGD3D11Texture
|
||||
{
|
||||
public:
|
||||
QSGTexturePlatformD3D11(QSGTexture *t) : m_texture(t) { }
|
||||
QSGTexture *m_texture;
|
||||
|
||||
void *nativeTexture() const override;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
|
||||
class Q_QUICK_PRIVATE_EXPORT QSGTexturePlatformMetal : public QPlatformInterface::QSGMetalTexture
|
||||
{
|
||||
public:
|
||||
QSGTexturePlatformMetal(QSGTexture *t) : m_texture(t) { }
|
||||
QSGTexture *m_texture;
|
||||
|
||||
MTLTexture *nativeTexture() const override;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(vulkan)
|
||||
class Q_QUICK_PRIVATE_EXPORT QSGTexturePlatformVulkan : public QPlatformInterface::QSGVulkanTexture
|
||||
{
|
||||
public:
|
||||
QSGTexturePlatformVulkan(QSGTexture *t) : m_texture(t) { }
|
||||
QSGTexture *m_texture;
|
||||
|
||||
VkImage nativeImage() const override;
|
||||
VkImageLayout nativeImageLayout() const override;
|
||||
};
|
||||
#endif
|
||||
|
||||
class Q_QUICK_PRIVATE_EXPORT QSGTexturePrivate : public QObjectPrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QSGTexture)
|
||||
public:
|
||||
QSGTexturePrivate();
|
||||
QSGTexturePrivate(QSGTexture *t);
|
||||
static QSGTexturePrivate *get(QSGTexture *t) { return t->d_func(); }
|
||||
void resetDirtySamplerOptions();
|
||||
bool hasDirtySamplerOptions() const;
|
||||
|
@ -92,6 +137,22 @@ public:
|
|||
uint mipmapMode : 2;
|
||||
uint filterMode : 2;
|
||||
uint anisotropyLevel: 3;
|
||||
|
||||
// While we could make QSGTexturePrivate implement all the interfaces, we
|
||||
// rather choose to use separate objects to avoid clashes in the function
|
||||
// names and signatures.
|
||||
#if QT_CONFIG(opengl)
|
||||
QSGTexturePlatformOpenGL m_openglTextureAccessor;
|
||||
#endif
|
||||
#ifdef Q_OS_WIN
|
||||
QSGTexturePlatformD3D11 m_d3d11TextureAccessor;
|
||||
#endif
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
|
||||
QSGTexturePlatformMetal m_metalTextureAccessor;
|
||||
#endif
|
||||
#if QT_CONFIG(vulkan)
|
||||
QSGTexturePlatformVulkan m_vulkanTextureAccessor;
|
||||
#endif
|
||||
};
|
||||
|
||||
Q_QUICK_PRIVATE_EXPORT bool qsg_safeguard_texture(QSGTexture *);
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtQuick module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QSGTEXTURE_PLATFORM_H
|
||||
#define QSGTEXTURE_PLATFORM_H
|
||||
|
||||
#include <QtQuick/qquickwindow.h>
|
||||
|
||||
#if QT_CONFIG(opengl)
|
||||
#include <QtGui/qopengl.h>
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(vulkan)
|
||||
#include <QtGui/qvulkaninstance.h>
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS) || defined(Q_CLANG_QDOC)
|
||||
Q_FORWARD_DECLARE_OBJC_CLASS(MTLTexture);
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
namespace QPlatformInterface {
|
||||
|
||||
#if QT_CONFIG(opengl) || defined(Q_CLANG_QDOC)
|
||||
class Q_QUICK_EXPORT QSGOpenGLTexture
|
||||
{
|
||||
public:
|
||||
virtual ~QSGOpenGLTexture();
|
||||
virtual GLuint nativeTexture() const = 0;
|
||||
static QSGTexture *fromNative(GLuint textureId,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options = {});
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
|
||||
class Q_QUICK_EXPORT QSGD3D11Texture
|
||||
{
|
||||
public:
|
||||
virtual ~QSGD3D11Texture();
|
||||
virtual void *nativeTexture() const = 0;
|
||||
static QSGTexture *fromNative(void *texture,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options = {});
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS) || defined(Q_CLANG_QDOC)
|
||||
class Q_QUICK_EXPORT QSGMetalTexture
|
||||
{
|
||||
public:
|
||||
virtual ~QSGMetalTexture();
|
||||
virtual MTLTexture *nativeTexture() const = 0;
|
||||
static QSGTexture *fromNative(MTLTexture *texture,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options = {});
|
||||
};
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
|
||||
class Q_QUICK_EXPORT QSGVulkanTexture
|
||||
{
|
||||
public:
|
||||
virtual ~QSGVulkanTexture();
|
||||
virtual VkImage nativeImage() const = 0;
|
||||
virtual VkImageLayout nativeImageLayout() const = 0;
|
||||
static QSGTexture *fromNative(VkImage image,
|
||||
VkImageLayout layout,
|
||||
QQuickWindow *window,
|
||||
const QSize &size,
|
||||
QQuickWindow::CreateTextureOptions options = {});
|
||||
};
|
||||
#endif
|
||||
|
||||
} // QPlatformInterface
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QSGTEXTURE_PLATFORM_H
|
|
@ -44,7 +44,7 @@
|
|||
#include <private/qsgdefaultrendercontext_p.h>
|
||||
|
||||
QSGRhiLayer::QSGRhiLayer(QSGRenderContext *context)
|
||||
: QSGLayer(*(new QSGTexturePrivate))
|
||||
: QSGLayer(*(new QSGTexturePrivate(this)))
|
||||
, m_mipmap(false)
|
||||
, m_live(true)
|
||||
, m_recursive(false)
|
||||
|
|
|
@ -19,6 +19,7 @@ HEADERS += \
|
|||
$$PWD/coreapi/qsggeometry_p.h \
|
||||
$$PWD/coreapi/qsgtexture.h \
|
||||
$$PWD/coreapi/qsgtexture_p.h \
|
||||
$$PWD/coreapi/qsgtexture_platform.h \
|
||||
$$PWD/coreapi/qsgbatchrenderer_p.h \
|
||||
$$PWD/coreapi/qsgrhivisualizer_p.h
|
||||
|
||||
|
@ -36,6 +37,10 @@ SOURCES += \
|
|||
$$PWD/coreapi/qsgbatchrenderer.cpp \
|
||||
$$PWD/coreapi/qsgrhivisualizer.cpp
|
||||
|
||||
macos|ios {
|
||||
SOURCES += \
|
||||
$$PWD/coreapi/qsgtexture_mac.mm
|
||||
}
|
||||
|
||||
# Util API
|
||||
HEADERS += \
|
||||
|
|
|
@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
|
|||
#define QT_MINIMUM_DYNAMIC_FBO_SIZE 64U
|
||||
|
||||
QSGPainterTexture::QSGPainterTexture()
|
||||
: QSGPlainTexture(*(new QSGPlainTexturePrivate))
|
||||
: QSGPlainTexture(*(new QSGPlainTexturePrivate(this)))
|
||||
{
|
||||
m_retain_image = true;
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QSGPlainTexture::QSGPlainTexture()
|
||||
: QSGTexture(*(new QSGPlainTexturePrivate))
|
||||
: QSGTexture(*(new QSGPlainTexturePrivate(this)))
|
||||
, m_texture(nullptr)
|
||||
, m_has_alpha(false)
|
||||
, m_dirty_texture(false)
|
||||
|
@ -100,12 +100,10 @@ void QSGPlainTexture::setTexture(QRhiTexture *texture) // RHI only
|
|||
m_mipmaps_generated = false;
|
||||
}
|
||||
|
||||
void QSGPlainTexture::setTextureFromNativeObject(QRhi *rhi, QQuickWindow::NativeObjectType type,
|
||||
quint64 nativeObjectHandle, int nativeLayout,
|
||||
const QSize &size, bool mipmap)
|
||||
void QSGPlainTexture::setTextureFromNativeTexture(QRhi *rhi,
|
||||
quint64 nativeObjectHandle, int nativeLayout,
|
||||
const QSize &size, bool mipmap)
|
||||
{
|
||||
Q_UNUSED(type);
|
||||
|
||||
QRhiTexture::Flags flags;
|
||||
if (mipmap)
|
||||
flags |= QRhiTexture::MipMapped | QRhiTexture::UsedWithGenerateMips;
|
||||
|
|
|
@ -87,9 +87,9 @@ public:
|
|||
void commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) override;
|
||||
|
||||
void setTexture(QRhiTexture *texture);
|
||||
void setTextureFromNativeObject(QRhi *rhi, QQuickWindow::NativeObjectType type,
|
||||
quint64 nativeObjectHandle, int nativeLayout,
|
||||
const QSize &size, bool mipmap);
|
||||
void setTextureFromNativeTexture(QRhi *rhi,
|
||||
quint64 nativeObjectHandle, int nativeLayout,
|
||||
const QSize &size, bool mipmap);
|
||||
|
||||
static QSGPlainTexture *fromImage(const QImage &image) {
|
||||
QSGPlainTexture *t = new QSGPlainTexture();
|
||||
|
@ -119,6 +119,7 @@ class QSGPlainTexturePrivate : public QSGTexturePrivate
|
|||
{
|
||||
Q_DECLARE_PUBLIC(QSGPlainTexture)
|
||||
public:
|
||||
QSGPlainTexturePrivate(QSGTexture *t) : QSGTexturePrivate(t) { }
|
||||
QSGTexture::Filtering m_last_mipmap_filter = QSGTexture::None;
|
||||
};
|
||||
|
||||
|
|
|
@ -338,7 +338,7 @@ void Atlas::enqueueTextureUpload(TextureBase *t, QRhiResourceUpdateBatch *resour
|
|||
}
|
||||
|
||||
TextureBase::TextureBase(AtlasBase *atlas, const QRect &textureRect)
|
||||
: QSGTexture(*(new QSGTexturePrivate))
|
||||
: QSGTexture(*(new QSGTexturePrivate(this)))
|
||||
, m_allocated_rect(textureRect)
|
||||
, m_atlas(atlas)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue