Auf dieser Seite

QSGTexture Class

Die Klasse „QSGTexture“ ist die Basisklasse für Texturen, die im Szenenbaum verwendet werden. Mehr...

Header: #include <QSGTexture>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Erbt von: QObject
Vererbt an:

QSGDynamicTexture

Öffentliche Typen

enum AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x }
enum Filtering { None, Nearest, Linear }
enum WrapMode { Repeat, ClampToEdge, MirroredRepeat }

Öffentliche Funktionen

QSGTexture()
virtual ~QSGTexture() override
QSGTexture::AnisotropyLevel anisotropyLevel() const
(since 6.0) virtual void commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)
virtual qint64 comparisonKey() const = 0
QRectF convertToNormalizedSourceRect(const QRectF &rect) const
QSGTexture::Filtering filtering() const
virtual bool hasAlphaChannel() const = 0
virtual bool hasMipmaps() const = 0
QSGTexture::WrapMode horizontalWrapMode() const
virtual bool isAtlasTexture() const
QSGTexture::Filtering mipmapFiltering() const
QNativeInterface *nativeInterface() const
virtual QRectF normalizedTextureSubRect() const
virtual QSGTexture *removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const
(since 6.0) virtual QRhiTexture *rhiTexture() const
void setAnisotropyLevel(QSGTexture::AnisotropyLevel level)
void setFiltering(QSGTexture::Filtering filter)
void setHorizontalWrapMode(QSGTexture::WrapMode hwrap)
void setMipmapFiltering(QSGTexture::Filtering filter)
void setVerticalWrapMode(QSGTexture::WrapMode vwrap)
virtual QSize textureSize() const = 0
QSGTexture::WrapMode verticalWrapMode() const

Ausführliche Beschreibung

Benutzer können ihre eigenen Texturklassen frei implementieren, um beliebige Eingabetexturen zu unterstützen, wie beispielsweise YUV-Videobilder oder 8-Bit-Alphamasken. Der Szenengraph stellt eine Standardimplementierung für RGBA-Texturen bereit. Die Standardimplementierung wird nicht direkt instanziiert, sondern über Factory-Funktionen wie ` QQuickWindow::createTextureFromImage()` erstellt.

Bei der Standardimplementierung basiert jede `QSGTexture` auf einem ` QRhiTexture`, das wiederum ein natives Texturobjekt enthält, wie beispielsweise eine OpenGL-Textur oder ein Vulkan-Bild.

Die Größe in Pixeln wird von ` textureSize()` angegeben. ` hasAlphaChannel()` gibt an, ob die Textur Opazitätswerte enthält, und ` hasMipmaps()` gibt an, ob die Textur Mipmap-Ebenen enthält.

Materials Funktionen, die mit Texturen arbeiten, implementieren ` updateSampledImage()` neu, um eine Logik bereitzustellen, die entscheidet, welche zugrunde liegende native Textur von `QSGTexture` an einem bestimmten Shader-Ressourcen-Bindungspunkt bereitgestellt werden soll.

QSGTexture trennt Bild- (Textur-) und Sampler-Objekte nicht voneinander. Die Parameter für Filterung und Umbruch können mit ` setMipmapFiltering()`, ` setFiltering()`, ` setHorizontalWrapMode()` und ` setVerticalWrapMode()` festgelegt werden. Der Szenengraph und die Grafikabstraktion von Qt kümmern sich gegebenenfalls um die Erstellung separater Sampler-Objekte.

Texturatlasse

Einige Szenengraph-Backends verwenden Texturatlasse, bei denen mehrere kleine Texturen zu einer großen Textur zusammengefasst werden. Ist dies der Fall, gibt die Funktion ` isAtlasTexture()` den Wert „true“ zurück. Atlasse werden verwendet, um den Rendering-Algorithmus bei der Sortierung zu unterstützen, was die Leistung steigert. Atlas sind zudem für das Batching (das Zusammenführen von Geometrie zur Reduzierung der Anzahl der Draw-Calls) unerlässlich, da zwei Instanzen desselben Materials, die zwei verschiedene QSGTextures verwenden, nicht gebatchet werden können. Beziehen sich beide QSGTextures hingegen auf denselben Atlas, ist ein Batching möglich, vorausgesetzt, die Materialien sind ansonsten kompatibel.

Die Position der Textur innerhalb des Atlas wird mit der Funktion ` normalizedTextureSubRect()` angegeben.

Wird die Textur so verwendet, dass ein Atlas nicht vorteilhaft ist, kann die Funktion ` removedFromAtlas()` verwendet werden, um eine nicht im Atlas enthaltene Kopie zu extrahieren.

Hinweis: Alle Klassen mit dem Präfix „QSG“ sollten ausschließlich im Rendering-Thread des Szenengraphen verwendet werden. Weitere Informationen finden Sie unter „Szenengraph und Rendering “.

Dokumentation zu Mitgliedstypen

enum QSGTexture::AnisotropyLevel

Legt den Grad der anisotropen Filterung fest, der verwendet werden soll, wenn die Textur nicht bildschirmausgerichtet ist.

KonstanteWertBeschreibung
QSGTexture::AnisotropyNone0Keine anisotrope Filterung.
QSGTexture::Anisotropy2x12-fache anisotrope Filterung.
QSGTexture::Anisotropy4x24-fache anisotrope Filterung.
QSGTexture::Anisotropy8x38-fache anisotrope Filterung.
QSGTexture::Anisotropy16x416-fache anisotrope Filterung.

enum QSGTexture::Filtering

Legt fest, wie die Abtastung von Texeln gefiltert werden soll, wenn die Texturkoordinaten nicht pixelausgerichtet sind.

KonstanteWertBeschreibung
QSGTexture::None0Es soll keine Filterung stattfinden. Dieser Wert wird nur in Verbindung mit ` setMipmapFiltering()` verwendet.
QSGTexture::Nearest1Die Abtastung gibt das nächstgelegene Texel zurück.
QSGTexture::Linear2Die Abtastung gibt eine lineare Interpolation der benachbarten Texel zurück.

enum QSGTexture::WrapMode

Legt fest, wie der Sampler Texturkoordinaten behandeln soll.

KonstanteWertBeschreibung
QSGTexture::Repeat0Es wird nur der Bruchteil der Texturkoordinate verwendet, wodurch sich Werte über 1 und unter 0 wiederholen.
QSGTexture::ClampToEdge1Werte über 1 werden auf 1 begrenzt, Werte unter 0 auf 0.
QSGTexture::MirroredRepeat2Ist die Texturkoordinate gerade, wird nur der Bruchteil verwendet. Ist sie ungerade, wird die Texturkoordinate auf ` 1 - fractional part` gesetzt. Dieser Wert wurde in Qt 5.10 eingeführt.

Dokumentation der Member-Funktionen

QSGTexture::QSGTexture()

Erstellt die Basisklasse „QSGTexture“.

[override virtual noexcept] QSGTexture::~QSGTexture()

Zerstört die „ QSGTexture “.

QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const

Gibt den für die Filterung dieser Textur verwendeten Anisotropiegrad zurück.

Siehe auch „ setAnisotropyLevel()“.

[virtual, since 6.0] void QSGTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)

Rufen Sie diese Funktion auf, um Bild-Upload-Vorgänge an resourceUpdates in die Warteschlange zu stellen, falls noch ausstehende Vorgänge vorhanden sind. Wenn keine neuen Daten vorliegen (beispielsweise weil seit dem letzten Aufruf dieser Funktion kein setImage()-Aufruf stattgefunden hat), führt die Funktion keine Aktion aus.

Materialien, die Texturen von rhi verwenden, sollten diese Funktion aus ihrer ` updateSampledImage()`-Implementierung aufrufen – in der Regel ohne Bedingungen – und dabei ` state.rhi() ` und ` state.resourceUpdateBatch() ` aus dem ` QSGMaterialShader::RenderState` übergeben.

Warnung: Diese Funktion darf nur vom Rendering-Thread aus aufgerufen werden.

Diese Funktion wurde in Qt 6.0 eingeführt.

[pure virtual] qint64 QSGTexture::comparisonKey() const

Gibt einen Schlüssel zurück, der zum Vergleichen von Texturen geeignet ist. Wird typischerweise in Implementierungen von ` QSGMaterial::compare()` verwendet.

Der bloße Vergleich von ` QSGTexture `-Zeigern reicht nicht immer aus, da zwei ` QSGTexture `-Instanzen, die auf dasselbe zugrunde liegende native Texturobjekt verweisen, ebenfalls als gleich angesehen werden sollten. Daher ist diese Funktion erforderlich.

Von Implementierungen dieser Funktion wird nicht erwartet und sie sollten auch keine Grafikressourcen (native Texturobjekte) erstellen, falls noch keine vorhanden sind.

Ein ` QSGTexture `, dem kein natives Texturobjekt zugrunde liegt, ist in der Regel mit keinem anderen ` QSGTexture` gleich, daher muss der Rückgabewert entsprechend gestaltet werden. Hiervon gibt es Ausnahmen, insbesondere bei der Verwendung von Atlas-Techniken (bei denen sich mehrere Texturen hinter den Kulissen dieselbe Atlas-Textur teilen); dies ist dann den Implementierungen der Unterklassen überlassen, die entsprechend damit umgehen müssen.

Warnung: Diese Funktion darf nur vom Rendering-Thread aus aufgerufen werden.

QRectF QSGTexture::convertToNormalizedSourceRect(const QRectF &rect) const

Gibt „ rect “ in normalisierten Koordinaten zurück.

Siehe auch ` normalizedTextureSubRect()`.

QSGTexture::Filtering QSGTexture::filtering() const

Gibt den für diese Textur zu verwendenden Abtastmodus zurück.

Siehe auch „ setFiltering()“.

[pure virtual] bool QSGTexture::hasAlphaChannel() const

Gibt „true“ zurück, wenn die Texturdaten einen Alphakanal enthalten.

[pure virtual] bool QSGTexture::hasMipmaps() const

Gibt „true“ zurück, wenn die Texturdaten Mipmap-Ebenen enthalten.

QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const

Gibt den horizontalen Umbruchmodus zurück, der für diese Textur verwendet werden soll.

Siehe auch „ setHorizontalWrapMode()“.

[virtual] bool QSGTexture::isAtlasTexture() const

Gibt zurück, ob diese Textur Teil eines Atlas ist oder nicht.

Die Standardimplementierung gibt „false“ zurück.

QSGTexture::Filtering QSGTexture::mipmapFiltering() const

Gibt zurück, ob beim Abtasten dieser Textur Mipmapping verwendet werden soll.

Siehe auch ` setMipmapFiltering()`.

template <typename QNativeInterface> QNativeInterface *QSGTexture::nativeInterface() const

Gibt eine native Schnittstelle des angegebenen Typs für die Textur zurück.

Diese Funktion ermöglicht den Zugriff auf plattformspezifische Funktionen von „ QSGTexture “, wie sie im Namespace „ QNativeInterface “ deklariert sind:

QNativeInterface::QSGD3D11Texture

Bietet Zugriff auf Direct3D 11-Texturobjekte und ermöglicht deren Übernahme

QNativeInterface::QSGD3D12Texture

Bietet Zugriff auf Direct3D 12-Texturobjekte und ermöglicht deren Verwendung

QNativeInterface::QSGMetalTexture

Bietet Zugriff auf Metal-Texturobjekte und ermöglicht deren Verwendung

QNativeInterface::QSGOpenGLTexture

Bietet Zugriff auf OpenGL-Texturobjekte und ermöglicht deren Verwendung

QNativeInterface::QSGVulkanTexture

Bietet Zugriff auf Vulkan-Bildobjekte und ermöglicht deren Übernahme

Dies ermöglicht den Zugriff auf das zugrunde liegende native Texturobjekt, wie beispielsweise die Textur-ID „ GLuint “ bei OpenGL oder das Handle „ VkImage “ bei Vulkan.

Ist die angeforderte Schnittstelle nicht verfügbar, wird ein „ nullptr “ zurückgegeben.

[virtual] QRectF QSGTexture::normalizedTextureSubRect() const

Gibt das Rechteck innerhalb von ` textureSize()` zurück, das diese Textur in normalisierten Koordinaten darstellt.

Die Standardimplementierung gibt ein Rechteck an der Position (0, 0) mit einer Breite und Höhe von 1 zurück.

[virtual] QSGTexture *QSGTexture::removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const

Diese Funktion gibt eine Kopie der aktuellen Textur zurück, die aus ihrem Atlas entfernt wird.

Die aktuelle Textur bleibt unverändert, sodass die Texturkoordinaten nicht aktualisiert werden müssen.

Das Entfernen einer Textur aus einem Atlas ist vor allem dann sinnvoll, wenn sie an einen Shader übergeben wird, der mit den Texturkoordinaten 0–1 arbeitet, anstatt mit dem Textur-Teilbereich innerhalb des Atlas.

Ist die Textur nicht Teil eines Texturatlas, gibt diese Funktion 0 zurück.

Es wird empfohlen, dass Implementierungen dieser Funktion bei mehreren Aufrufen dieselbe Instanz zurückgeben, um den Speicherverbrauch zu begrenzen.

resourceUpdates ist ein optionaler Ressourcen-Update-Batch, in den eventuelle Texturoperationen eingereiht werden. Materialien können eine Instanz über ` QSGMaterialShader::RenderState` abrufen. Ist der Wert null, erstellt die `removedFromAtlas()`-Implementierung einen eigenen Batch und übergibt ihn sofort. Wird jedoch eine gültige Instanz angegeben, übergibt diese Funktion den Update-Batch nicht.

Warnung: Diese Funktion darf nur vom Rendering-Thread aus aufgerufen werden.

[virtual, since 6.0] QRhiTexture *QSGTexture::rhiTexture() const

Gibt die „ QRhiTexture “ für diese „ QSGTexture “ zurück oder null, falls keine vorhanden ist (entweder, weil intern noch keine gültige Textur erstellt wurde, oder weil das Konzept für das verwendete Szenengraph-Backend nicht anwendbar ist).

Es wird nicht erwartet, dass diese Funktion eine neue ` QRhiTexture ` erstellt, falls keine vorhanden ist. In diesem Fall sollte sie `null` zurückgeben. Vom Renderer wird erwartet, dass bei einer `null`-Textur stattdessen eine transparente Dummy-Textur verwendet wird.

Warnung: Diese Funktion kann nur vom Rendering-Thread aus aufgerufen werden.

Diese Funktion wurde in Qt 6.0 eingeführt.

void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)

Legt die Stärke der anisotropen Filterung auf „ level “ fest. Der Standardwert ist „ QSGTexture::AnisotropyNone “, was bedeutet, dass keine anisotrope Filterung aktiviert ist.

Hinweis: Je nach verwendeter Grafik-API wirddie Anforderung möglicherweise ignoriert. Es gibt keine Garantie dafür, dass anisotrope Filterung zur Laufzeit unterstützt wird.

Siehe auch anisotropyLevel().

void QSGTexture::setFiltering(QSGTexture::Filtering filter)

Stellt den Abtastmodus auf „ filter “ ein.

Siehe auch „ filtering()“.

void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)

Legt den horizontalen Zeilenumbruchmodus auf hwrap

Siehe auch horizontalWrapMode().

void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)

Stellt den Mipmap-Abtastmodus auf „ filter “ ein.

Die Einstellung der Mipmap-Filterung hat keine Auswirkung, wenn die Textur keine Mipmaps enthält.

Siehe auch „ mipmapFiltering()“ und „ hasMipmaps()“.

void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)

Stellt den vertikalen Zeilenumbruchmodus auf vwrap

Siehe auch verticalWrapMode().

[pure virtual] QSize QSGTexture::textureSize() const

Gibt die Größe der Textur in Pixeln zurück.

QSGTexture::WrapMode QSGTexture::verticalWrapMode() const

Gibt den vertikalen Umbruchmodus zurück, der für diese Textur verwendet werden soll.

Siehe auch „ setVerticalWrapMode()“.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.