QQuickRhiItem Class
La classe QQuickRhiItem est une alternative portable à QQuickFramebufferObject qui n'est pas liée à OpenGL, mais qui permet plutôt d'intégrer le rendu avec les API de QRhi avec Qt Quick. Plus...
| En-tête : | #include <QQuickRhiItem> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Quick)target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake : | QT += quick |
| Depuis : | Qt 6.7 |
| Hérite : | QQuickItem |
Types publics
| enum class | TextureFormat { RGBA8, RGBA16F, RGBA32F, RGB10A2 } |
Propriétés
|
|
Fonctions publiques
| 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) |
Fonctions publiques réimplémentées
| virtual bool | isTextureProvider() const override |
| virtual QSGTextureProvider * | textureProvider() const override |
Signaux
| void | alphaBlendingChanged() |
| void | colorBufferFormatChanged() |
| void | effectiveColorBufferSizeChanged() |
| void | fixedColorBufferHeightChanged() |
| void | fixedColorBufferWidthChanged() |
| void | mirrorVerticallyChanged() |
| void | sampleCountChanged() |
Fonctions protégées
| virtual QQuickRhiItemRenderer * | createRenderer() = 0 |
| bool | isAutoRenderTargetEnabled() const |
| void | setAutoRenderTarget(bool enabled) |
Fonctions protégées réimplémentées
| virtual bool | event(QEvent *e) override |
| virtual void | geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override |
| virtual void | releaseResources() override |
Description détaillée
QQuickRhiItem est en fait la contrepartie de QRhiWidget dans le monde de Qt Quick. Ces deux éléments sont destinés à être sous-classés, et ils permettent tous deux l'enregistrement QRhi-based rendering that targets an offscreen color buffer. L'image 2D résultante est ensuite composée avec le reste de la scène Qt Quick.
Remarque : bien que QQuickRhiItem soit une API Qt publique, la famille QRhi de classes du module Qt GUI, y compris QShader et QShaderDescription, offre des garanties de compatibilité limitées. Il n'existe aucune garantie de compatibilité source ou binaire pour ces classes, ce qui signifie que l'API n'est garantie de fonctionner qu'avec la version de Qt avec laquelle l'application a été développée. Les changements incompatibles avec le code source doivent cependant être réduits au minimum et ne seront effectués que dans les versions mineures (6.7, 6.8, etc.). qquickrhiitem.h n'inclut pas directement les en-têtes liés à QRhi. Pour utiliser ces classes lors de l'implémentation d'une sous-classe de QQuickRhiItem, créez un lien vers Qt::GuiPrivate (si vous utilisez CMake) et incluez les en-têtes appropriés avec le préfixe rhi, par exemple #include <rhi/qrhi.h>.
QQuickRhiItem remplace l'ancienne classe QQuickFramebufferObject. Cette dernière est intrinsèquement liée à OpenGL / OpenGL ES, alors que QQuickRhiItem fonctionne avec les classes QRhi, permettant d'exécuter le même code de rendu avec Vulkan, Metal, Direct 3D 11/12, et OpenGL / OpenGL ES. Conceptuellement et fonctionnellement, ils sont très proches, et la migration de QQuickFramebufferObject vers QQuickRhiItem est simple. QQuickFramebufferObject continue d'être disponible pour assurer la compatibilité avec le code d'application existant qui fonctionne directement avec l'API OpenGL.
Remarque : QQuickRhiItem ne fonctionnera pas si vous utilisez l'adaptation software du graphe de scène Qt Quick.
Sur la plupart des plates-formes, le rendu du graphe de scène, et donc le rendu effectué par le QQuickRhiItem, se produira sur un thread dédié. C'est pourquoi la classe QQuickRhiItem impose une séparation stricte entre l'implémentation de l'élément (la sous-classe QQuickItem ) et la logique de rendu proprement dite. Toute la logique de l'élément, telle que les propriétés et les fonctions d'aide liées à l'interface utilisateur exposées à QML, doit se trouver dans la sous-classe QQuickRhiItem. Tout ce qui concerne le rendu doit se trouver dans la classe QQuickRhiItemRenderer. Pour éviter les conditions de course et les problèmes de lecture/écriture à partir de deux threads, il est important que le moteur de rendu et l'élément ne lisent ni n'écrivent jamais de variables partagées. La communication entre l'élément et le moteur de rendu doit se faire principalement via la fonction QQuickRhiItem::synchronize(). Cette fonction sera appelée sur le thread de rendu pendant que le thread de l'interface graphique est bloqué. Il est également possible d'utiliser des connexions ou des événements en file d'attente pour la communication entre l'élément et le moteur de rendu.
Les applications doivent sous-classer à la fois QQuickRhiItem et QQuickRhiItemRenderer. La fonction purement virtuelle createRenderer() doit être réimplémentée pour renvoyer une nouvelle instance de la sous-classe QQuickRhiItemRenderer.
Comme pour QRhiWidget, QQuickRhiItem gère automatiquement le tampon de couleur, qui est une texture 2D (QRhiTexture) normalement, ou une QRhiRenderBuffer lorsque le multi-échantillonnage est utilisé. (certaines API 3D font la différence entre les textures et les renderbuffers, alors que pour d'autres, la ressource native sous-jacente est la même ; les renderbuffers sont utilisés principalement pour permettre le multi-échantillonnage avec OpenGL ES 3.0).
La taille de la texture s'adapte par défaut à la taille de l'objet (en tenant compte de device pixel ratio ). Si la taille de l'objet change, la texture est recréée avec la taille correcte. Si vous préférez une taille fixe, définissez fixedColorBufferWidth et fixedColorBufferHeight à des valeurs non nulles.
QQuickRhiItem est un texture provider et peut être utilisé directement dans ShaderEffects et d'autres classes qui consomment des fournisseurs de textures.
Bien qu'il ne s'agisse pas d'un cas d'utilisation primaire, QQuickRhiItem permet également d'incorporer du code de rendu qui utilise directement une API graphique 3D telle que Vulkan, Metal, Direct 3D ou OpenGL. Voir QRhiCommandBuffer::beginExternal() pour plus de détails sur l'enregistrement de commandes natives dans une passe de rendu QRhi, ainsi que QRhiTexture::createFrom() pour un moyen d'envelopper une texture native existante et de l'utiliser avec QRhi dans une passe de rendu ultérieure. Voir également QQuickGraphicsConfiguration pour la configuration de l'environnement de l'API 3D native (par exemple, les extensions de périphériques) et noter que QQuickWindow peut être associé à une QVulkanInstance personnalisée en appelant QWindow::setVulkanInstance() suffisamment tôt.
Remarque : QQuickRhiItem utilise toujours la même instance QRhi que QQuickWindow (et par extension, le même contexte OpenGL, le même périphérique Vulkan, etc.) Pour choisir l'API graphique 3D sous-jacente utilisée, appelez setGraphicsApi() sur QQuickWindow suffisamment tôt. Il n'est pas possible de le changer une fois que le graphe de scène a été initialisé, et toutes les instances de QQuickRhiItem dans la scène effectueront le rendu en utilisant la même API 3D.
Un exemple simple
Prenons la sous-classe suivante de QQuickRhiItem. Elle est présentée ici dans sa forme complète. Elle rend un simple triangle avec une projection en perspective, où le triangle est tourné en fonction de la propriété angle de l'élément personnalisé. (ce qui signifie qu'elle peut être pilotée, par exemple, par des animations telles que NumberAnimation à partir de QML).
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(); }
Il est à noter que cette classe simple est presque exactement la même que le code montré dans l'introduction de QRhiWidget. Les vertex et fragment shaders sont également les mêmes. Ils sont fournis en tant que code source GLSL de style Vulkan et doivent d'abord être traités par l'infrastructure de shaders Qt. Ceci est réalisé soit en exécutant manuellement l'outil de ligne de commande qsb, soit en utilisant la fonction qt_add_shaders() dans CMake. Le QQuickRhiItem charge ces fichiers pré-traités .qsb qui sont livrés avec l'application. Voir Qt Shader Tools pour plus d'informations sur l'infrastructure de traduction des shaders de 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);
}Une fois exposé à QML (notez le QML_NAMED_ELEMENT), notre élément personnalisé peut être instancié dans n'importe quelle scène. (après avoir importé le site URI approprié spécifié pour qt_add_qml_module dans le projet CMake).
ExampleRhiItem {
anchors.fill: parent
anchors.margins: 10
NumberAnimation on angle { from: 0; to: 360; duration: 5000; loops: Animation.Infinite }
}Voir Scene Graph - RHI Texture Item pour un exemple plus complexe.
Voir aussi QQuickRhiItemRenderer, Scene Graph - RHI Texture Item, QRhi, et Scene Graph and Rendering.
Documentation sur les types de membres
enum class QQuickRhiItem::TextureFormat
Spécifie le format de la texture d'appui sur laquelle le site QQuickRhiItem effectue le rendu.
| Constante | Valeur | Description |
|---|---|---|
QQuickRhiItem::TextureFormat::RGBA8 | 0 | Voir QRhiTexture::RGBA8. Il s'agit de la valeur par défaut. |
QQuickRhiItem::TextureFormat::RGBA16F | 1 | Voir QRhiTexture::RGBA16F. |
QQuickRhiItem::TextureFormat::RGBA32F | 2 | Voir QRhiTexture::RGBA32F. |
QQuickRhiItem::TextureFormat::RGB10A2 | 3 | Voir QRhiTexture::RGB10A2. |
Voir aussi QRhiTexture.
Documentation sur les propriétés
alphaBlending : bool
Contrôle si l'estompage est toujours activé lors du dessin du quadrilatère texturé avec le contenu généré par QQuickRhiItem et son moteur de rendu.
La valeur par défaut est false. C'est pour des raisons de performance : si la semi-transparence n'est pas impliquée, parce que QQuickRhiItemRenderer s'efface vers une couleur opaque et ne rend jamais les fragments avec un alpha plus petit que 1, il n'y a pas d'intérêt à activer l'estompage.
Si la sous-classe QQuickRhiItemRenderer effectue un rendu avec une semi-transparence, définissez cette propriété à true (vrai).
Remarque : dans certaines conditions, le blending sera toujours appliqué, quelle que soit la valeur de cette propriété. Par exemple, si l'opacité de l'élément opacity (plus précisément, l'opacité combinée héritée de la chaîne parentale) est inférieure à 1, l'estompage sera automatiquement activé même si cette propriété est définie sur false.
Remarque : le graphe de scène Qt Quick s'appuie sur l'alpha prémultiplié et s'y attend. Par exemple, si l'intention est d'éclaircir l'arrière-plan dans le moteur de rendu à une valeur alpha de 0,5, assurez-vous de multiplier les valeurs de couleur rouge, verte et bleue par 0,5 également. Sinon, les résultats du mélange seront incorrects.
Fonctions d'accès :
| bool | alphaBlending() const |
| void | setAlphaBlending(bool enable) |
Signal de notification :
| void | alphaBlendingChanged() |
colorBufferFormat : TextureFormat
Cette propriété contrôle le format de la texture utilisée comme tampon de couleur. La valeur par défaut est TextureFormat::RGBA8. QQuickRhiItem prend en charge le rendu d'un sous-ensemble de formats pris en charge par QRhiTexture. Seuls les formats signalés comme pris en charge par QRhi::isTextureFormatSupported() doivent être spécifiés, sinon le rendu ne sera pas fonctionnel.
Remarque : la définition d'un nouveau format lorsque l'élément et son moteur de rendu sont déjà initialisés et ont effectué le rendu implique que tous les objets QRhiGraphicsPipeline créés par le moteur de rendu peuvent devenir inutilisables, si l'objet QRhiRenderPassDescriptor associé est désormais incompatible en raison du format de texture différent. De même que pour le changement dynamique de sampleCount, cela signifie que les implémentations de initialize() ou render() doivent alors se charger de libérer les pipelines existants et d'en créer de nouveaux.
Fonctions d'accès :
| QQuickRhiItem::TextureFormat | colorBufferFormat() const |
| void | setColorBufferFormat(QQuickRhiItem::TextureFormat format) |
Signal Notifier :
| void | colorBufferFormatChanged() |
[read-only] effectiveColorBufferSize : QSize
Cette propriété indique la taille, en pixels, du tampon de couleur sous-jacent ( QRhiTexture ou QRhiRenderBuffer). Elle est fournie pour être utilisée sur le fil d'exécution de l'interface graphique (principal), dans les liaisons QML ou JavaScript.
Remarque : les implémentations deQQuickRhiItemRenderer, fonctionnant sur le thread de rendu du graphe de scène, ne doivent pas utiliser cette propriété. Elles doivent plutôt demander la taille à l'adresse render target.
Note : La valeur devient disponible de manière asynchrone du point de vue du fil d'exécution principal, en ce sens que la valeur change lorsque le rendu a lieu sur le fil d'exécution. Cela signifie que cette propriété est principalement utile dans les liaisons QML. Le code de l'application ne doit pas supposer que la valeur est déjà à jour lorsque l'objet QQuickRhiItem est construit.
Il s'agit d'une propriété en lecture seule.
Fonctions d'accès :
| QSize | effectiveColorBufferSize() const |
Signal du notificateur :
| void | effectiveColorBufferSizeChanged() |
fixedColorBufferHeight : int
Hauteur fixe, en pixels, de la texture associée à l'élément. Cette option est utile lorsque l'on souhaite obtenir une taille de texture fixe qui ne dépend pas de la taille de l'élément. Cette taille n'a aucun effet sur la géométrie de l'élément (sa taille et son emplacement dans la scène), ce qui signifie que le contenu de la texture apparaîtra étiré (à l'échelle supérieure) ou réduit sur la zone de l'élément.
Par défaut, la valeur est 0. Une valeur de 0 signifie que la taille de la texture suit la taille de l'élément. (texture size = item size * device pixel ratio).
Voir fixedColorBufferWidth pour plus d'informations sur les cas d'utilisation de la définition d'une largeur et d'une hauteur fixes.
Fonctions d'accès :
| int | fixedColorBufferHeight() const |
| void | setFixedColorBufferHeight(int height) |
Signal de notification :
| void | fixedColorBufferHeightChanged() |
fixedColorBufferWidth : int
La largeur fixe, en pixels, de la texture ou du tampon de rendu associé à l'élément. Cette option est utile lorsque l'on souhaite disposer d'une taille de tampon de couleur fixe qui ne dépend pas de la taille de l'élément. Cette taille n'a aucun effet sur la géométrie de l'élément (sa taille et son emplacement dans la scène), ce qui signifie que le contenu de la texture apparaîtra étiré (à l'échelle supérieure) ou réduit sur la zone de l'élément.
Par exemple, la définition d'une taille correspondant exactement au double de la taille (en pixels) de l'objet permet d'effectuer un suréchantillonnage 2x (rendu à une résolution deux fois supérieure, puis réduction implicite de l'échelle lors de la texturation du quadrilatère correspondant à l'objet dans la scène). D'autre part, la définition d'une taille égale à la moitié de la taille en pixels de l'élément permet d'obtenir un rendu à la moitié de la résolution, puis d'augmenter l'échelle des résultats.
Par défaut, la valeur est 0. Une valeur de 0 signifie que la taille de la texture suit la taille de l'élément. (texture size = item size * device pixel ratio).
Remarque : le rapport de pixel de l'appareil (le facteur d'échelle du compositeur du système) peut avoir un impact important sur les performances, puisqu'un facteur d'échelle de 2 (200 %) signifie un rendu à deux fois la résolution, donc deux fois ce que le développeur et le concepteur de l'interface utilisateur perçoivent comme la taille de l'élément, et donc une réduction effective du contenu, de manière similaire à ce qui se passe lorsque l'on définit cette propriété à deux fois la taille de pixel de l'élément sur un système où le rapport de pixel de l'appareil est de 1. Par conséquent, cette propriété devrait être rarement utilisée pour des tailles supérieures à la taille en pixels de l'élément, car de nombreux systèmes de bureau modernes n'en ont pas besoin et ne disposent pas du budget de performance nécessaire, lorsqu'un rapport de pixels supérieur à 1 est de toute façon utilisé par le système. Le principal cas d'utilisation de cette propriété est la définition d'une taille plus petite, afin d'obtenir un rendu à une résolution raisonnablement plus petite au lieu de suivre aveuglément la géométrie de l'élément (et éventuellement de la fenêtre), quelle que soit sa taille.
Fonctions d'accès :
| int | fixedColorBufferWidth() const |
| void | setFixedColorBufferWidth(int width) |
Signal de notification :
| void | fixedColorBufferWidthChanged() |
mirrorVertically : bool
Cette propriété détermine si les UV de texture sont inversés lors du dessin du quadrillage texturé. Elle n'a aucun effet sur le contenu du tampon de couleurs hors écran et sur le rendu mis en œuvre par QQuickRhiItemRenderer.
La valeur par défaut est false.
Fonctions d'accès :
| bool | isMirrorVerticallyEnabled() const |
| void | setMirrorVertically(bool enable) |
Signal de notification :
| void | mirrorVerticallyChanged() |
sampleCount : int
Cette propriété contrôle le nombre d'échantillons pour l'anticrénelage multi-échantillon. Par défaut, la valeur est 1, ce qui signifie que le MSAA est désactivé.
Les valeurs valides sont 1, 4, 8, et parfois 16 et 32. QRhi::supportedSampleCounts() peut être utilisé pour demander le nombre d'échantillons pris en charge au moment de l'exécution, mais les applications devraient généralement demander 1 (pas de MSAA), 4x (MSAA normal) ou 8x (MSAA élevé).
Remarque : la définition d'une nouvelle valeur implique que tous les objets QRhiGraphicsPipeline créés par le moteur de rendu doivent désormais utiliser le même nombre d'échantillons. Les objets QRhiGraphicsPipeline existants créés avec un nombre d'échantillons différent ne doivent plus être utilisés. Lorsque la valeur change, tous les tampons de couleur et de profondeur sont détruits et recréés automatiquement, et initialize() est invoqué à nouveau. Cependant, lorsque isAutoRenderTargetEnabled() est false, c'est à l'application de gérer cela en ce qui concerne le tampon de profondeur ou les tampons de couleur supplémentaires.
Le passage du nombre d'échantillons de la valeur par défaut de 1 à une valeur plus élevée implique que colorTexture() devient nullptr et que msaaColorBuffer() commence à renvoyer un objet valide. Revenir à 1 (ou 0) implique l'inverse : lors du prochain appel à initialize(), msaaColorBuffer() renverra nullptr, tandis que colorTexture() redeviendra valide. En outre, resolveTexture() renvoie une adresse QRhiTexture valide (sans multi-échantillon) lorsque le nombre d'échantillons est supérieur à 1 (c'est-à-dire lorsque le MSAA est utilisé).
Fonctions d'accès :
| int | sampleCount() const |
| void | setSampleCount(int samples) |
Signal de notification :
| void | sampleCountChanged() |
Voir également QQuickRhiItemRenderer::msaaColorBuffer() et QQuickRhiItemRenderer::resolveTexture().
Documentation des fonctions membres
[explicit] QQuickRhiItem::QQuickRhiItem(QQuickItem *parent = nullptr)
Construit un nouveau QQuickRhiItem avec l'adresse parent.
[override virtual noexcept] QQuickRhiItem::~QQuickRhiItem()
Destructeur.
[pure virtual protected] QQuickRhiItemRenderer *QQuickRhiItem::createRenderer()
Réimplémentez cette fonction pour créer et renvoyer une nouvelle instance d'une sous-classe de QQuickRhiItemRenderer.
Cette fonction sera appelée sur le thread de rendu pendant que le thread de l'interface graphique est bloqué.
[override virtual protected] bool QQuickRhiItem::event(QEvent *e)
Réimplémente : QQuickItem::event(QEvent *ev).
[override virtual protected] void QQuickRhiItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
Réimplémente : QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry).
[protected] bool QQuickRhiItem::isAutoRenderTargetEnabled() const
Renvoie le paramètre actuel de gestion automatique du tampon de profondeur et de la cible de rendu.
Par défaut, cette valeur est true.
Voir aussi setAutoRenderTarget().
[override virtual] bool QQuickRhiItem::isTextureProvider() const
Réimplémente : QQuickItem::isTextureProvider() const.
[override virtual protected] void QQuickRhiItem::releaseResources()
Réimplémente : QQuickItem::releaseResources().
[protected] void QQuickRhiItem::setAutoRenderTarget(bool enabled)
Détermine si un gabarit de profondeur QRhiRenderBuffer et un QRhiTextureRenderTarget sont créés et maintenus automatiquement par l'élément. La valeur par défaut est true. Appelez cette fonction dès le début, par exemple à partir du constructeur de la classe dérivée, avec la valeur enabled fixée à false pour désactiver cette fonction.
En mode automatique, la taille et le nombre d'échantillons du tampon de profondeur suivent les paramètres de la texture du tampon de couleur. En mode non automatique, renderTarget() et depthStencilBuffer() renvoient toujours nullptr et c'est alors à l'implémentation de initialize() de l'application de s'occuper de la configuration et de la gestion de ces objets.
[override virtual] QSGTextureProvider *QQuickRhiItem::textureProvider() const
Réimplémente : QQuickItem::textureProvider() const.
© 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.