QSGTexture Class

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

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

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

Detaillierte Beschreibung

Benutzer können ihre eigenen Texturklassen frei implementieren, um beliebige Eingabetexturen, wie YUV-Videoframes oder 8-Bit-Alphamasken, zu unterstützen. Die Standard-Implementierung wird nicht direkt instanziiert, sondern über Factory-Funktionen wie QQuickWindow::createTextureFromImage() erzeugt.

Bei der Standardimplementierung wird jede QSGTexture durch eine QRhiTexture unterstützt, die wiederum ein natives Texturobjekt enthält, wie z. B. eine OpenGL-Textur oder ein Vulkan-Bild.

Die Größe in Pixeln wird durch textureSize() angegeben. hasAlphaChannel() meldet, ob die Textur Deckkraftwerte enthält und hasMipmaps() meldet, ob die Textur Mipmap-Ebenen enthält.

Materials die mit Texturen arbeiten, implementieren updateSampledImage() neu, um eine Logik bereitzustellen, die entscheidet, welche QSGTexture zugrundeliegende native Textur an einem bestimmten Shader-Ressourcen-Bindungspunkt ausgesetzt werden soll.

QSGTexture trennt nicht zwischen Bild (Textur) und Sampler Objekten. Die Parameter für Filterung und Wrapping können mit setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() und setVerticalWrapMode() angegeben werden. Der Szenegraph und die Qt-Grafikabstraktion kümmern sich um die Erstellung von separaten Sampler-Objekten, falls zutreffend.

Textur-Atlanten

Einige Szenengraphen-Backends verwenden Texturatlanten, die mehrere kleine Texturen zu einer großen Textur gruppieren. Wenn dies der Fall ist, gibt die Funktion isAtlasTexture() true zurück. Atlanten werden verwendet, um dem Rendering-Algorithmus zu helfen, eine bessere Sortierung vorzunehmen, was die Leistung erhöht. Atlanten sind auch für das Stapeln (Zusammenführen von Geometrie, um die Anzahl der Zeichenaufrufe zu reduzieren) wichtig, da zwei Instanzen desselben Materials mit zwei verschiedenen QSGTexturen nicht stapelbar sind, wohingegen, wenn beide QSGTexturen auf denselben Atlas verweisen, ein Stapeln möglich ist, vorausgesetzt, die Materialien sind ansonsten kompatibel.

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

Wenn die Textur so verwendet wird, dass ein Atlas nicht vorzuziehen ist, kann die Funktion removedFromAtlas() verwendet werden, um eine nicht-atlasierte Kopie zu extrahieren.

Hinweis: Alle Klassen mit dem Präfix QSG sollten nur im Rendering-Thread des Szenegraphs verwendet werden. Siehe Scene Graph und Rendering für weitere Informationen.

Dokumentation der Mitgliedstypen

enum QSGTexture::AnisotropyLevel

Gibt den Grad der anisotropen Filterung an, der verwendet wird, wenn die Textur nicht am Bildschirm ausgerichtet ist.

KonstanteWertBeschreibung
QSGTexture::AnisotropyNone0Keine anisotrope Filterung.
QSGTexture::Anisotropy2x12x anisotrope Filterung.
QSGTexture::Anisotropy4x24x anisotrope Filterung.
QSGTexture::Anisotropy8x38x anisotrope Filterung.
QSGTexture::Anisotropy16x416x anisotrope Filterung.

enum QSGTexture::Filtering

Gibt an, wie das Sampling von Texeln gefiltert werden soll, wenn die Texturkoordinaten nicht pixelgenau ausgerichtet sind.

KonstanteWertBeschreibung
QSGTexture::None0Es soll keine Filterung erfolgen. Dieser Wert wird nur in Verbindung mit setMipmapFiltering() verwendet.
QSGTexture::Nearest1Sampling liefert das nächstgelegene Texel.
QSGTexture::Linear2Sampling gibt eine lineare Interpolation der benachbarten Texel zurück.

enum QSGTexture::WrapMode

Gibt an, wie der Sampler Texturkoordinaten behandeln soll.

KonstanteWertBeschreibung
QSGTexture::Repeat0Nur der gebrochene Teil der Texturkoordinate wird verwendet, so dass Werte über 1 und unter 0 wiederholt werden.
QSGTexture::ClampToEdge1Werte über 1 werden auf 1 geklemmt und Werte unter 0 werden auf 0 geklemmt.
QSGTexture::MirroredRepeat2Wenn die Texturkoordinate gerade ist, 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 Mitgliedsfunktionen

QSGTexture::QSGTexture()

Konstruiert die QSGTexture-Basisklasse.

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

Zerstört die QSGTexture.

QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const

Gibt den Anisotropie-Level zurück, der für die Filterung dieser Textur verwendet wird.

Siehe auch setAnisotropyLevel().

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

Rufen Sie diese Funktion auf, um das Hochladen von Bildern auf resourceUpdates in die Warteschlange zu stellen, falls es noch ausstehende Vorgänge gibt. Wenn es keine neuen Daten gibt (z.B. weil es seit dem letzten Aufruf dieser Funktion kein setImage() gab), tut die Funktion nichts.

Von Materialien, die rhi Texturen beinhalten, wird erwartet, dass sie diese Funktion von ihrer updateSampledImage()-Implementierung aus aufrufen, typischerweise ohne irgendwelche Bedingungen, indem sie state.rhi() und state.resourceUpdateBatch() von QSGMaterialShader::RenderState übergeben.

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

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt einen Schlüssel zurück, der für den Vergleich von Texturen geeignet ist. Wird typischerweise in QSGMaterial::compare()-Implementierungen verwendet.

Ein einfacher Vergleich von QSGTexture Zeigern ist nicht immer ausreichend, da zwei QSGTexture Instanzen, die auf das gleiche native Texturobjekt verweisen, auch als gleich angesehen werden sollten. Daher die Notwendigkeit für diese Funktion.

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

Ein QSGTexture, unter dem sich kein natives Texturobjekt befindet, ist in der Regel nicht gleich einem anderen QSGTexture, so dass der Rückgabewert entsprechend gestaltet werden muss. Es gibt Ausnahmen, insbesondere wenn Atlasing verwendet wird (wo mehrere Texturen die gleiche Atlas-Textur unter der Haube teilen), das ist dann bis zu den Unterklassen-Implementierungen zu behandeln, wie angemessen.

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

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

Gibt rect umgewandelt in normalisierte Koordinaten zurück.

Siehe auch normalizedTextureSubRect().

QSGTexture::Filtering QSGTexture::filtering() const

Gibt den für diese Textur zu verwendenden Sampling-Modus 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 Atlasses ist oder nicht.

Die Standardimplementierung gibt false zurück.

QSGTexture::Filtering QSGTexture::mipmapFiltering() const

Gibt zurück, ob Mipmapping beim Sampling von dieser Textur 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 bietet Zugriff auf die plattformspezifische Funktionalität von QSGTexture, wie im QNativeInterface Namespace deklariert:

QNativeInterface::QSGD3D11Texture

Ermöglicht den Zugriff auf und die Übernahme von Direct3D 11-Texturobjekten

QNativeInterface::QSGD3D12Texture

Ermöglicht den Zugriff auf und die Übernahme von Direct3D 12-Texturobjekten

QNativeInterface::QSGMetalTexture

Ermöglicht den Zugriff auf und die Übernahme von Metal-Texturobjekten

QNativeInterface::QSGOpenGLTexture

Ermöglicht den Zugriff auf und die Übernahme von OpenGL-Texturobjekten

QNativeInterface::QSGVulkanTexture

Ermöglicht den Zugriff auf und die Übernahme von Vulkan-Bildobjekten

Dies ermöglicht den Zugriff auf das zugrundeliegende native Texturobjekt, z. B. die GLuint Textur-ID bei OpenGL oder das VkImage -Handle bei Vulkan.

Wenn die angeforderte Schnittstelle nicht verfügbar ist, wird 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, so dass die Texturkoordinaten nicht aktualisiert werden müssen.

Das Entfernen einer Textur aus einem Atlas ist vor allem dann nützlich, wenn sie an einen Shader weitergegeben wird, der mit den Texturkoordinaten 0-1 anstelle des Textursubrekts innerhalb des Atlas arbeitet.

Wenn die Textur nicht Teil eines Texturatlasses ist, gibt diese Funktion 0 zurück.

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

resourceUpdates ist ein optionaler Ressourcen-Aktualisierungsstapel, für den Texturoperationen, falls vorhanden, in die Warteschlange gestellt werden. Materialien können eine Instanz von QSGMaterialShader::RenderState abrufen. Wenn null, erstellt die removedFromAtlas()-Implementierung ihren eigenen Stapel und sendet ihn sofort. Wenn jedoch eine gültige Instanz angegeben ist, wird diese Funktion den Aktualisierungsstapel nicht übermitteln.

Warnung: Diese Funktion kann 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, wenn es keine gibt (entweder weil intern noch keine gültige Textur erstellt wurde oder weil das Konzept nicht auf das verwendete Scenegraph-Backend anwendbar ist).

Von dieser Funktion wird nicht erwartet, dass sie eine neue QRhiTexture erstellt, wenn es keine gibt. In diesem Fall sollte sie null zurückgeben. Die Erwartung an den Renderer ist, dass eine Null-Textur dazu führt, dass 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)

Setzt den Grad der anisotropen Filterung auf level. Der Standardwert ist QSGTexture::AnisotropyNone, was bedeutet, dass keine anisotrope Filterung aktiviert ist.

Hinweis: Die Anforderung kann je nach verwendeter Grafik-API ignoriert werden. Es gibt keine Garantie, dass die anisotrope Filterung zur Laufzeit unterstützt wird.

Siehe auch anisotropyLevel().

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

Setzt den Abtastmodus auf filter.

Siehe auch filtering().

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

Setzt den horizontalen Umbruchmodus auf hwrap

Siehe auch horizontalWrapMode().

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

Setzt den Mipmap-Sampling-Modus auf filter.

Die Einstellung der Mipmap-Filterung hat keine Auswirkungen, wenn die Textur keine Mipmaps hat.

Siehe auch mipmapFiltering() und hasMipmaps().

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

Setzt den vertikalen Umbruchmodus 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().

© 2025 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.