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: |
Ö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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGTexture::AnisotropyNone | 0 | Keine anisotrope Filterung. |
QSGTexture::Anisotropy2x | 1 | 2-fache anisotrope Filterung. |
QSGTexture::Anisotropy4x | 2 | 4-fache anisotrope Filterung. |
QSGTexture::Anisotropy8x | 3 | 8-fache anisotrope Filterung. |
QSGTexture::Anisotropy16x | 4 | 16-fache anisotrope Filterung. |
enum QSGTexture::Filtering
Legt fest, wie die Abtastung von Texeln gefiltert werden soll, wenn die Texturkoordinaten nicht pixelausgerichtet sind.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGTexture::None | 0 | Es soll keine Filterung stattfinden. Dieser Wert wird nur in Verbindung mit ` setMipmapFiltering()` verwendet. |
QSGTexture::Nearest | 1 | Die Abtastung gibt das nächstgelegene Texel zurück. |
QSGTexture::Linear | 2 | Die Abtastung gibt eine lineare Interpolation der benachbarten Texel zurück. |
enum QSGTexture::WrapMode
Legt fest, wie der Sampler Texturkoordinaten behandeln soll.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGTexture::Repeat | 0 | Es wird nur der Bruchteil der Texturkoordinate verwendet, wodurch sich Werte über 1 und unter 0 wiederholen. |
QSGTexture::ClampToEdge | 1 | Werte über 1 werden auf 1 begrenzt, Werte unter 0 auf 0. |
QSGTexture::MirroredRepeat | 2 | Ist 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:
Bietet Zugriff auf Direct3D 11-Texturobjekte und ermöglicht deren Übernahme | |
Bietet Zugriff auf Direct3D 12-Texturobjekte und ermöglicht deren Verwendung | |
Bietet Zugriff auf Metal-Texturobjekte und ermöglicht deren Verwendung | |
Bietet Zugriff auf OpenGL-Texturobjekte und ermöglicht deren Verwendung | |
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.