QQuickRhiItem Class

Die Klasse QQuickRhiItem ist eine portable Alternative zu QQuickFramebufferObject, die nicht an OpenGL gebunden ist, sondern die Integration von Rendering mit den QRhi APIs mit Qt Quick ermöglicht. Mehr...

Kopfzeile: #include <QQuickRhiItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Seit: Qt 6.7
Erbt: QQuickItem
Status: Vorläufig

Diese Klasse befindet sich in der Entwicklung und kann sich noch ändern.

Eigenschaften

Öffentliche Funktionen

QQuickRhiItem(QQuickItem *parent = nullptr)
virtual ~QQuickRhiItem() override
bool alphaBlending() const
QQuickRhiItem::TextureFormat colorBufferFormat() const
QSize effectiveColorBufferSize() const
int fixedColorBufferHeight() const
int fixedColorBufferWidth() const
bool isMirrorVerticallyEnabled() const
int sampleCount() const
void setAlphaBlending(bool enable)
void setColorBufferFormat(QQuickRhiItem::TextureFormat format)
void setFixedColorBufferHeight(int height)
void setFixedColorBufferWidth(int width)
void setMirrorVertically(bool enable)
void setSampleCount(int samples)

Reimplementierte öffentliche Funktionen

virtual bool isTextureProvider() const override
virtual QSGTextureProvider *textureProvider() const override

Signale

Geschützte Funktionen

virtual QQuickRhiItemRenderer *createRenderer() = 0
bool isAutoRenderTargetEnabled() const
void setAutoRenderTarget(bool enabled)

Reimplementierte geschützte Funktionen

virtual bool event(QEvent *e) override
virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override
virtual void releaseResources() override

Detaillierte Beschreibung

Hinweis: QQuickRhiItem befindet sich in der Tech-Preview von Qt 6.7. Die API befindet sich in der Entwicklung und kann sich noch ändern.

QQuickRhiItem ist praktisch das Gegenstück zu QRhiWidget in der Welt von Qt Quick. Beide sind als Unterklassen gedacht und ermöglichen ein QRhi-basiertes Rendering, das auf einen Farbpuffer außerhalb des Bildschirms abzielt. Das resultierende 2D-Bild wird dann mit dem Rest der Qt Quick Szene zusammengesetzt.

Hinweis: Während QQuickRhiItem eine öffentliche Qt API ist, bietet die QRhi Familie von Klassen im Qt Gui Modul, einschließlich QShader und QShaderDescription, begrenzte Kompatibilitätsgarantien. Es gibt keine Quell- oder Binärkompatibilitätsgarantien für diese Klassen, was bedeutet, dass die API nur mit der Qt-Version funktioniert, mit der die Anwendung entwickelt wurde. Quellcode-inkompatible Änderungen sollen jedoch so gering wie möglich gehalten werden und werden nur in kleineren Versionen (6.7, 6.8, usw.) vorgenommen. qquickrhiitem.h enthält keine QRhi-bezogenen Header direkt. Um diese Klassen bei der Implementierung einer QQuickRhiItem-Unterklasse zu verwenden, verlinken Sie auf Qt::GuiPrivate (wenn Sie CMake verwenden) und fügen Sie die entsprechenden Header mit dem Präfix rhi ein, zum Beispiel #include <rhi/qrhi.h>.

QQuickRhiItem ist ein Ersatz für die Legacy-Klasse QQuickFramebufferObject. Letztere ist von Natur aus an OpenGL / OpenGL ES gebunden, wohingegen QQuickRhiItem mit den QRhi Klassen arbeitet und es ermöglicht, denselben Rendering-Code mit Vulkan, Metal, Direct 3D 11/12 und OpenGL / OpenGL ES auszuführen. Konzeptionell und funktionell sind sie sehr ähnlich, und die Migration von QQuickFramebufferObject zu QQuickRhiItem ist unkompliziert. QQuickFramebufferObject ist weiterhin verfügbar, um die Kompatibilität für bestehenden Anwendungscode zu gewährleisten, der direkt mit der OpenGL-API arbeitet.

Hinweis: QQuickRhiItem ist nicht funktionsfähig, wenn die software Anpassung des Qt Quick Szenegraphen verwendet wird.

Auf den meisten Plattformen erfolgt das Rendering des Szenegraphen und damit auch das Rendering durch QQuickRhiItem in einem eigenen Thread. Aus diesem Grund erzwingt die Klasse QQuickRhiItem eine strikte Trennung zwischen der Item-Implementierung (der Unterklasse QQuickItem ) und der eigentlichen Rendering-Logik. Die gesamte Logik des Elements, wie z. B. Eigenschaften und UI-bezogene Hilfsfunktionen, die QML zur Verfügung gestellt werden, müssen sich in der Unterklasse QQuickRhiItem befinden. Alles, was sich auf das Rendering bezieht, muss sich in der Klasse QQuickRhiItemRenderer befinden. Um Race Conditions und Lese-/Schreibprobleme von zwei Threads zu vermeiden, ist es wichtig, dass der Renderer und das Item niemals gemeinsame Variablen lesen oder schreiben. Die Kommunikation zwischen dem Element und dem Renderer sollte hauptsächlich über die Funktion QQuickRhiItem::synchronize() erfolgen. Diese Funktion wird auf dem Render-Thread aufgerufen, während der GUI-Thread blockiert ist. Die Verwendung von Warteschlangenverbindungen oder Ereignissen für die Kommunikation zwischen Element und Renderer ist ebenfalls möglich.

Anwendungen müssen sowohl QQuickRhiItem als auch QQuickRhiItemRenderer subclassifizieren. Die rein virtuelle Funktion createRenderer() muss neu implementiert werden, um eine neue Instanz der Unterklasse QQuickRhiItemRenderer zurückzugeben.

Wie bei QRhiWidget verwaltet QQuickRhiItem automatisch den Farbpuffer, bei dem es sich normalerweise um eine 2D-Textur (QRhiTexture) oder um QRhiRenderBuffer handelt, wenn Multisampling verwendet wird. (einige 3D-APIs unterscheiden zwischen Texturen und Renderbuffern, während bei einigen anderen die zugrunde liegende native Ressource die gleiche ist; Renderbuffer werden hauptsächlich verwendet, um Multisampling mit OpenGL ES 3.0 zu ermöglichen)

Die Größe der Textur wird standardmäßig an die Größe des Objekts angepasst (unter Berücksichtigung von device pixel ratio ). Ändert sich die Größe des Objekts, wird die Textur in der richtigen Größe neu erstellt. Wenn eine feste Größe bevorzugt wird, setzen Sie fixedColorBufferWidth und fixedColorBufferHeight auf Werte ungleich Null.

QQuickRhiItem ist ein texture provider und kann direkt in ShaderEffects und anderen Klassen verwendet werden, die Texturanbieter nutzen.

QQuickRhiItem ist zwar nicht der primäre Anwendungsfall, ermöglicht aber auch die Einbindung von Rendering-Code, der direkt eine 3D-Grafik-API wie Vulkan, Metal, Direct 3D oder OpenGL verwendet. Siehe QRhiCommandBuffer::beginExternal() für Details zur Aufzeichnung nativer Befehle in einem QRhi Rendering-Durchgang sowie QRhiTexture::createFrom() für eine Möglichkeit, eine vorhandene native Textur zu umhüllen und sie dann mit QRhi in einem nachfolgenden Rendering-Durchgang zu verwenden. Siehe auch QQuickGraphicsConfiguration bezüglich der Konfiguration der nativen 3D-API-Umgebung (z. B. Geräteerweiterungen) und beachten Sie, dass QQuickWindow mit einem benutzerdefinierten QVulkanInstance verbunden werden kann, indem QWindow::setVulkanInstance() früh genug aufgerufen wird.

Hinweis: QQuickRhiItem verwendet immer dieselbe QRhi Instanz, die QQuickWindow verwendet (und damit auch denselben OpenGL-Kontext, dasselbe Vulkan-Gerät usw.). Um auszuwählen, welche zugrunde liegende 3D-Grafik-API verwendet wird, rufen Sie setGraphicsApi() auf QQuickWindow früh genug auf. Eine Änderung ist nicht mehr möglich, sobald der Szenegraph initialisiert wurde, und alle QQuickRhiItem-Instanzen in der Szene werden mit derselben 3D-API gerendert.

Ein einfaches Beispiel

Nehmen Sie die folgende Unterklasse von QQuickRhiItem. Sie ist hier in vollständiger Form dargestellt. Sie rendert ein einzelnes Dreieck mit einer perspektivischen Projektion, wobei das Dreieck auf der Grundlage der Eigenschaft angle des benutzerdefinierten Elements gedreht wird. (d.h. es kann z.B. mit Animationen wie NumberAnimation aus QML gesteuert werden)

class ExampleRhiItemRenderer : public QQuickRhiItemRenderer
{
public:
    void initialize(QRhiCommandBuffer *cb) override;
    void synchronize(QQuickRhiItem *item) override;
    void render(QRhiCommandBuffer *cb) override;

private:
    QRhi *m_rhi = nullptr;
    std::unique_ptr<QRhiBuffer> m_vbuf;
    std::unique_ptr<QRhiBuffer> m_ubuf;
    std::unique_ptr<QRhiShaderResourceBindings> m_srb;
    std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
    QMatrix4x4 m_viewProjection;
    float m_angle = 0.0f;
};

class ExampleRhiItem : public QQuickRhiItem
{
    Q_OBJECT
    QML_NAMED_ELEMENT(ExampleRhiItem)
    Q_PROPERTY(float angle READ angle WRITE setAngle NOTIFY angleChanged)

public:
    QQuickRhiItemRenderer *createRenderer() override;

    float angle() const { return m_angle; }
    void setAngle(float a);

signals:
    void angleChanged();

private:
    float m_angle = 0.0f;
};

QQuickRhiItemRenderer *ExampleRhiItem::createRenderer()
{
    return new ExampleRhiItemRenderer;
}

void ExampleRhiItem::setAngle(float a)
{
    if (m_angle == a)
        return;

    m_angle = a;
    emit angleChanged();
    update();
}

void ExampleRhiItemRenderer::synchronize(QQuickRhiItem *rhiItem)
{
    ExampleRhiItem *item = static_cast<ExampleRhiItem *>(rhiItem);
    if (item->angle() != m_angle)
        m_angle = item->angle();
}

static QShader getShader(const QString &name)
{
    QFile f(name);
    return f.open(QIODevice::ReadOnly) ? QShader::fromSerialized(f.readAll()) : QShader();
}

static float vertexData[] = {
    0.0f,   0.5f,   1.0f, 0.0f, 0.0f,
    -0.5f,  -0.5f,   0.0f, 1.0f, 0.0f,
    0.5f,  -0.5f,   0.0f, 0.0f, 1.0f,
};

void ExampleRhiItemRenderer::initialize(QRhiCommandBuffer *cb)
{
    if (m_rhi != rhi()) {
        m_pipeline.reset();
        m_rhi = rhi();
    }

    if (!m_pipeline) {
        m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData)));
        m_vbuf->create();

        m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
        m_ubuf->create();

        m_srb.reset(m_rhi->newShaderResourceBindings());
        m_srb->setBindings({
            QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, m_ubuf.get()),
        });
        m_srb->create();

        m_pipeline.reset(m_rhi->newGraphicsPipeline());
        m_pipeline->setShaderStages({
            { QRhiShaderStage::Vertex, getShader(QLatin1String(":/shaders/color.vert.qsb")) },
            { QRhiShaderStage::Fragment, getShader(QLatin1String(":/shaders/color.frag.qsb")) }
        });
        QRhiVertexInputLayout inputLayout;
        inputLayout.setBindings({
            { 5 * sizeof(float) }
        });
        inputLayout.setAttributes({
            { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
            { 0, 1, QRhiVertexInputAttribute::Float3, 2 * sizeof(float) }
        });
        m_pipeline->setVertexInputLayout(inputLayout);
        m_pipeline->setShaderResourceBindings(m_srb.get());
        m_pipeline->setRenderPassDescriptor(renderTarget()->renderPassDescriptor());
        m_pipeline->create();

        QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
        resourceUpdates->uploadStaticBuffer(m_vbuf.get(), vertexData);
        cb->resourceUpdate(resourceUpdates);
    }

    const QSize outputSize = renderTarget()->pixelSize();
    m_viewProjection = m_rhi->clipSpaceCorrMatrix();
    m_viewProjection.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
    m_viewProjection.translate(0, 0, -4);
}

void ExampleRhiItemRenderer::render(QRhiCommandBuffer *cb)
{
    QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
    QMatrix4x4 modelViewProjection = m_viewProjection;
    modelViewProjection.rotate(m_angle, 0, 1, 0);
    resourceUpdates->updateDynamicBuffer(m_ubuf.get(), 0, 64, modelViewProjection.constData());

    const QColor clearColor = QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f);
    cb->beginPass(renderTarget(), clearColor, { 1.0f, 0 }, resourceUpdates);

    cb->setGraphicsPipeline(m_pipeline.get());
    const QSize outputSize = renderTarget()->pixelSize();
    cb->setViewport(QRhiViewport(0, 0, outputSize.width(), outputSize.height()));
    cb->setShaderResources();
    const QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), 0);
    cb->setVertexInput(0, 1, &vbufBinding);
    cb->draw(3);

    cb->endPass();
}

Es ist bemerkenswert, dass diese einfache Klasse fast genau dem Code entspricht, der in der Einführung von QRhiWidget gezeigt wird. Die Vertex- und Fragment-Shader sind ebenfalls identisch. Diese werden als GLSL-Quellcode im Vulkan-Stil bereitgestellt und müssen zunächst von der Qt-Shader-Infrastruktur verarbeitet werden. Dies geschieht entweder durch manuelles Ausführen des qsb Kommandozeilen-Tools oder durch Verwendung der Funktion qt_add_shaders() in CMake. Das QQuickRhiItem lädt diese vorverarbeiteten .qsb Dateien, die mit der Anwendung ausgeliefert werden. Siehe Qt Shader Tools für weitere Informationen über die Shader-Übersetzungsinfrastruktur von Qt.

color.vert

#version 440
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;
layout(location = 0) out vec3 v_color;
layout(std140, binding = 0) uniform buf {
    mat4 mvp;
};

void main()
{
    v_color = color;
    gl_Position = mvp * position;
}

color.frag

#version 440
layout(location = 0) in vec3 v_color;
layout(location = 0) out vec4 fragColor;

void main()
{
    fragColor = vec4(v_color, 1.0);
}

Sobald es QML ausgesetzt ist (beachten Sie die QML_NAMED_ELEMENT), kann unser benutzerdefiniertes Element in jeder Szene instanziiert werden. (nach dem Importieren der entsprechenden URI, die für qt_add_qml_module im CMake-Projekt angegeben wurde)

ExampleRhiItem {
    anchors.fill: parent
    anchors.margins: 10
    NumberAnimation on angle { from: 0; to: 360; duration: 5000; loops: Animation.Infinite }
}

Siehe Scene Graph - RHI Texture Item für ein komplexeres Beispiel.

Siehe auch QQuickRhiItemRenderer, Scene Graph - RHI Texture Item, QRhi, und Scene Graph and Rendering.

Dokumentation der Eigenschaften

alphaBlending : bool

Legt fest, ob das Überblenden immer aktiviert ist, wenn das mit dem von QQuickRhiItem und seinem Renderer erzeugten Inhalt texturierte Quadrat gezeichnet wird.

Der Standardwert ist false. Dies geschieht aus Leistungsgründen: Wenn Semitransparenz nicht involviert ist, weil QQuickRhiItemRenderer zu einer undurchsichtigen Farbe wechselt und niemals Fragmente mit Alpha kleiner als 1 rendert, dann macht es keinen Sinn, Blending zu aktivieren.

Wenn die Unterklasse QQuickRhiItemRenderer mit Semitransparenz gerendert wird, setzen Sie diese Eigenschaft auf true.

Hinweis: Unter bestimmten Bedingungen wird die Überblendung unabhängig vom Wert dieser Eigenschaft trotzdem durchgeführt. Wenn zum Beispiel die opacity des Elements (genauer gesagt, die kombinierte Deckkraft, die von der übergeordneten Kette geerbt wurde) kleiner als 1 ist, wird das Überblenden automatisch aktiviert, auch wenn diese Eigenschaft auf false gesetzt ist.

Hinweis: Der Qt Quick Szenengraf ist auf vormultipliziertes Alpha angewiesen und erwartet dies auch. Wenn Sie beispielsweise den Hintergrund im Renderer auf einen Alphawert von 0,5 setzen wollen, müssen Sie die Werte für die roten, grünen und blauen Farben ebenfalls mit 0,5 multiplizieren. Andernfalls werden die Überblendungsergebnisse nicht korrekt sein.

Zugriffsfunktionen:

bool alphaBlending() const
void setAlphaBlending(bool enable)

Benachrichtigungssignal:

void alphaBlendingChanged()

colorBufferFormat : TextureFormat

Diese Eigenschaft steuert das Texturformat für die Textur, die als Farbpuffer verwendet wird. Der Standardwert ist TextureFormat::RGBA8. QQuickRhiItem unterstützt das Rendering in einer Teilmenge der von QRhiTexture unterstützten Formate. Es sollten nur Formate angegeben werden, die von QRhi::isTextureFormatSupported() als unterstützt gemeldet werden, da das Rendering sonst nicht funktioniert.

Hinweis: Das Setzen eines neuen Formats, wenn das Objekt und sein Renderer bereits initialisiert sind und gerendert haben, bedeutet, dass alle QRhiGraphicsPipeline Objekte, die vom Renderer erstellt wurden, unbrauchbar werden können, wenn das zugehörige QRhiRenderPassDescriptor aufgrund des anderen Texturformats nun inkompatibel ist. Ähnlich wie bei der dynamischen Änderung von sampleCount bedeutet dies, dass die initialize()- oder render()-Implementierungen sich dann um die Freigabe der bestehenden Pipelines und die Erstellung neuer Pipelines kümmern müssen.

Zugriffsfunktionen:

QQuickRhiItem::TextureFormat colorBufferFormat() const
void setColorBufferFormat(QQuickRhiItem::TextureFormat format)

Notifier Signal:

void colorBufferFormatChanged()

[read-only] effectiveColorBufferSize : const QSize

Diese Eigenschaft gibt die Größe des zugrunde liegenden Farbpuffers ( QRhiTexture oder QRhiRenderBuffer) in Pixeln an. Sie ist für die Verwendung im GUI (Haupt-)Thread, in QML-Bindungen oder JavaScript vorgesehen.

Hinweis: QQuickRhiItemRenderer Implementierungen, die auf dem Render-Thread des Szenegraphs arbeiten, sollten diese Eigenschaft nicht verwenden. Diese sollten vielmehr die Größe von render target abfragen.

Hinweis: Der Wert wird aus Sicht des Hauptthreads asynchron verfügbar, d. h. der Wert ändert sich, wenn das Rendering auf dem Render-Thread erfolgt. Dies bedeutet, dass diese Eigenschaft hauptsächlich in QML-Bindungen nützlich ist. Der Anwendungscode darf nicht davon ausgehen, dass der Wert bereits aktuell ist, wenn das QQuickRhiItem Objekt erstellt wird.

Dies ist eine schreibgeschützte Eigenschaft.

Zugriffsfunktionen:

QSize effectiveColorBufferSize() const

Notifier-Signal:

void effectiveColorBufferSizeChanged()

fixedColorBufferHeight : int

Die feste Höhe der dem Element zugeordneten Textur in Pixeln. Relevant, wenn eine feste Texturgröße gewünscht wird, die nicht von der Größe des Objekts abhängt. Diese Größe hat keinen Einfluss auf die Geometrie des Gegenstands (seine Größe und Platzierung in der Szene), was bedeutet, dass der Inhalt der Textur auf der Fläche des Gegenstands gestreckt (vergrößert) oder verkleinert erscheint.

Wenn Sie z. B. eine Größe einstellen, die genau doppelt so groß ist wie die (Pixel-)Größe des Objekts, führen Sie effektiv ein 2x-Supersampling durch (Rendering mit doppelter Auflösung und dann implizite Verkleinerung beim Texturieren des dem Objekt entsprechenden Quad in der Szene).

Standardmäßig ist der Wert 0. Ein Wert von 0 bedeutet, dass die Größe der Textur der Größe des Objekts folgt. (texture size = item size * device pixel ratio).

Zugriffsfunktionen:

int fixedColorBufferHeight() const
void setFixedColorBufferHeight(int height)

Benachrichtigungssignal:

void fixedColorBufferHeightChanged()

fixedColorBufferWidth : int

Die feste Breite der dem Objekt zugeordneten Textur oder des Renderbuffers in Pixeln. Relevant, wenn eine feste Farbpuffergröße gewünscht ist, die nicht von der Größe des Objekts abhängt. Diese Größe hat keinen Einfluss auf die Geometrie des Objekts (seine Größe und Platzierung in der Szene), was bedeutet, dass der Inhalt der Textur auf die Fläche des Objekts gestreckt (vergrößert) oder verkleinert wird.

Wenn Sie z. B. eine Größe einstellen, die genau doppelt so groß ist wie die (Pixel-)Größe des Objekts, führen Sie effektiv ein 2x-Supersampling durch (Rendering mit doppelter Auflösung und dann implizite Verkleinerung beim Texturieren des dem Objekt entsprechenden Quad in der Szene).

Standardmäßig ist der Wert 0. Ein Wert von 0 bedeutet, dass die Größe der Textur der Größe des Objekts folgt. (texture size = item size * device pixel ratio).

Zugriffsfunktionen:

int fixedColorBufferWidth() const
void setFixedColorBufferWidth(int width)

Benachrichtigungssignal:

void fixedColorBufferWidthChanged()

mirrorVertically : bool

Diese Eigenschaft steuert, ob die Textur-UVs beim Zeichnen des texturierten Quad gespiegelt werden. Sie hat keine Auswirkung auf den Inhalt des Offscreen-Farbpuffers und das von QQuickRhiItemRenderer implementierte Rendering.

Der Standardwert ist false.

Zugriffsfunktionen:

bool isMirrorVerticallyEnabled() const
void setMirrorVertically(bool enable)

Benachrichtigungssignal:

void mirrorVerticallyChanged()

sampleCount : int

Diese Eigenschaft steuert die Anzahl der Samples für Multisample Antialiasing. Standardmäßig ist der Wert 1, was bedeutet, dass MSAA deaktiviert ist.

Gültige Werte sind 1, 4, 8, und manchmal 16 und 32. QRhi::supportedSampleCounts() kann verwendet werden, um die unterstützten Samplezahlen zur Laufzeit abzufragen, aber normalerweise sollten Anwendungen 1 (kein MSAA), 4x (normales MSAA) oder 8x (hohes MSAA) anfordern.

Hinweis: Das Setzen eines neuen Wertes bedeutet, dass alle QRhiGraphicsPipeline Objekte, die vom Renderer erstellt werden, von da an dieselbe Sampleanzahl verwenden müssen. Vorhandene QRhiGraphicsPipeline Objekte, die mit einer anderen Sampleanzahl erstellt wurden, dürfen nicht mehr verwendet werden. Wenn sich der Wert ändert, werden alle Farb- und Tiefenschablonenpuffer automatisch zerstört und neu erstellt, und initialize() wird erneut aufgerufen. Wenn isAutoRenderTargetEnabled() jedoch false ist, liegt es an der Anwendung, dies in Bezug auf den Tiefenschablonenpuffer oder zusätzliche Farbpuffer zu verwalten.

Wenn Sie die Anzahl der Abtastungen von der Standardeinstellung 1 auf einen höheren Wert ändern, wird colorTexture() zu nullptr und msaaColorBuffer() beginnt, ein gültiges Objekt zurückzugeben. Das Zurückschalten auf 1 (oder 0) bedeutet das Gegenteil: beim nächsten Aufruf von initialize() wird msaaColorBuffer() nullptr zurückgeben, während colorTexture() wieder gültig wird. Darüber hinaus gibt resolveTexture() ein gültiges (Nicht-Multisample) QRhiTexture zurück, wenn die Anzahl der Samples größer als 1 ist (d.h. MSAA verwendet wird).

Zugriffsfunktionen:

int sampleCount() const
void setSampleCount(int samples)

Melder-Signal:

void sampleCountChanged()

Siehe auch QQuickRhiItemRenderer::msaaColorBuffer() und QQuickRhiItemRenderer::resolveTexture().

Dokumentation der Mitgliedsfunktionen

[explicit] QQuickRhiItem::QQuickRhiItem(QQuickItem *parent = nullptr)

Konstruiert ein neues QQuickRhiItem mit der angegebenen parent.

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

Zerstörer.

[pure virtual protected] QQuickRhiItemRenderer *QQuickRhiItem::createRenderer()

Reimplementieren Sie diese Funktion, um eine neue Instanz einer QQuickRhiItemRenderer Unterklasse zu erstellen und zurückzugeben.

Diese Funktion wird im Rendering-Thread aufgerufen, während der GUI-Thread blockiert ist.

[override virtual protected] bool QQuickRhiItem::event(QEvent *e)

Reimplements: QQuickItem::event(QEvent *ev).

[override virtual protected] void QQuickRhiItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)

Reimplements: QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry).

[protected] bool QQuickRhiItem::isAutoRenderTargetEnabled() const

Gibt die aktuelle Einstellung für die automatische Tiefenschablonenpuffer- und Renderzielverwaltung zurück.

Standardmäßig ist dieser Wert true.

Siehe auch setAutoRenderTarget().

[override virtual] bool QQuickRhiItem::isTextureProvider() const

Reimplements: QQuickItem::isTextureProvider() const.

[override virtual protected] void QQuickRhiItem::releaseResources()

Reimplements: QQuickItem::releaseResources().

[protected] void QQuickRhiItem::setAutoRenderTarget(bool enabled)

Legt fest, ob eine Tiefenschablone QRhiRenderBuffer und eine QRhiTextureRenderTarget automatisch vom Element erstellt und gepflegt wird. Der Standardwert ist true. Rufen Sie diese Funktion frühzeitig auf, zum Beispiel im Konstruktor der abgeleiteten Klasse, und setzen Sie enabled auf false, um dies zu deaktivieren.

Im automatischen Modus folgen die Größe und die Anzahl der Samples des Tiefenschablonenpuffers den Einstellungen der Farbpuffertextur. Im nicht-automatischen Modus geben renderTarget() und depthStencilBuffer() immer nullptr zurück und es liegt dann an der Implementierung von initialize() in der Anwendung, diese Objekte einzurichten und zu verwalten.

[override virtual] QSGTextureProvider *QQuickRhiItem::textureProvider() const

Reimplements: QQuickItem::textureProvider() const.

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