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: |
Ö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.
Konstante | Wert | Beschreibung |
---|---|---|
QSGTexture::AnisotropyNone | 0 | Keine anisotrope Filterung. |
QSGTexture::Anisotropy2x | 1 | 2x anisotrope Filterung. |
QSGTexture::Anisotropy4x | 2 | 4x anisotrope Filterung. |
QSGTexture::Anisotropy8x | 3 | 8x anisotrope Filterung. |
QSGTexture::Anisotropy16x | 4 | 16x anisotrope Filterung. |
enum QSGTexture::Filtering
Gibt an, wie das Sampling von Texeln gefiltert werden soll, wenn die Texturkoordinaten nicht pixelgenau ausgerichtet sind.
Konstante | Wert | Beschreibung |
---|---|---|
QSGTexture::None | 0 | Es soll keine Filterung erfolgen. Dieser Wert wird nur in Verbindung mit setMipmapFiltering() verwendet. |
QSGTexture::Nearest | 1 | Sampling liefert das nächstgelegene Texel. |
QSGTexture::Linear | 2 | Sampling gibt eine lineare Interpolation der benachbarten Texel zurück. |
enum QSGTexture::WrapMode
Gibt an, wie der Sampler Texturkoordinaten behandeln soll.
Konstante | Wert | Beschreibung |
---|---|---|
QSGTexture::Repeat | 0 | Nur der gebrochene Teil der Texturkoordinate wird verwendet, so dass Werte über 1 und unter 0 wiederholt werden. |
QSGTexture::ClampToEdge | 1 | Werte über 1 werden auf 1 geklemmt und Werte unter 0 werden auf 0 geklemmt. |
QSGTexture::MirroredRepeat | 2 | Wenn 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:
Ermöglicht den Zugriff auf und die Übernahme von Direct3D 11-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von Direct3D 12-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von Metal-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von OpenGL-Texturobjekten | |
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.