QQuickRhiItem Class
QQuickRhiItem クラスは、QQuickFramebufferObject の移植性の高い代替クラスであり、OpenGLに依存せず、Qt Quick を通じてQRhi のAPIとレンダリングを統合することができます。詳細...
| ヘッダー: | #include <QQuickRhiItem> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| 以下のように: | Qt 6.7 |
| 継承元: | QQuickItem |
パブリック型
| enum class | TextureFormat { RGBA8, RGBA16F, RGBA32F, RGB10A2 } |
プロパティ
|
|
パブリック関数
| 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) |
再実装されたパブリック関数
| virtual bool | isTextureProvider() const override |
| virtual QSGTextureProvider * | textureProvider() const override |
シグナル
| void | alphaBlendingChanged() |
| void | colorBufferFormatChanged() |
| void | effectiveColorBufferSizeChanged() |
| void | fixedColorBufferHeightChanged() |
| void | fixedColorBufferWidthChanged() |
| void | mirrorVerticallyChanged() |
| void | sampleCountChanged() |
保護された関数
| virtual QQuickRhiItemRenderer * | createRenderer() = 0 |
| bool | isAutoRenderTargetEnabled() const |
| void | setAutoRenderTarget(bool enabled) |
再実装されたプロテクト関数
| virtual bool | event(QEvent *e) override |
| virtual void | geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override |
| virtual void | releaseResources() override |
詳細な説明
QQuickRhiItemは、Qt Quick の世界において、実質的にQRhiWidget に対応するものです。これらはいずれもサブクラス化されることを想定しており、オフスクリーンのカラーバッファをターゲットとするQRhi ベースのレンダリングを記録することができます。その結果生成された2D画像は、Qt Quick シーンの他の部分と合成されます。
注:Q QuickRhiItemはQ tのパブリックAPIですが、 Qt GUIモジュール内のQRhi クラス群(QShader やQShaderDescription を含む)については、互換性の保証は限定的です。これらのクラスについては、ソースやバイナリの互換性が保証されておらず、APIが動作することが保証されるのは、アプリケーションの開発に使用されたQtバージョンに限られます。 ただし、ソース互換性を損なう変更は最小限に抑えることを目指しており、マイナーリリース(6.7、6.8など)でのみ行われます。qquickrhiitem.h には、QRhi に関連するヘッダーファイルは直接含まれていません。 QQuickRhiItem のサブクラスを実装する際にこれらのクラスを使用するには、Qt::GuiPrivate にリンクし(CMake を使用している場合)、rhi というプレフィックスが付いた適切なヘッダー(例:#include <rhi/qrhi.h> )をインクルードしてください。
QQuickRhiItemは、従来のQQuickFramebufferObject クラスの代替となります。後者は本質的にOpenGL / OpenGL ESに紐づいていますが、QQuickRhiItemはQRhi クラスと連携するため、Vulkan、Metal、Direct 3D 11/12、およびOpenGL / OpenGL ESで同じレンダリングコードを実行することが可能です。 概念的にも機能的にも両者は非常に似ており、QQuickFramebufferObject からQQuickRhiItemへの移行は簡単です。OpenGL APIを直接使用する既存のアプリケーションコードとの互換性を確保するため、QQuickFramebufferObject は引き続き利用可能です。
注: Qt Quick のシーングラフのsoftware 適応版を使用する場合、QQuickRhiItemは 機能しません。
ほとんどのプラットフォームでは、シーングラフのレンダリング、ひいては QQuickRhiItem によるレンダリングは、専用のスレッド上で実行されます。このため、QQuickRhiItem クラスでは、アイテムの実装(QQuickItem のサブクラス)と実際のレンダリングロジックとの間に厳格な分離が課されています。 QMLに対して公開されるプロパティやUI関連のヘルパー関数など、すべてのアイテムロジックはQQuickRhiItemサブクラス内に配置する必要があります。レンダリングに関連するすべての処理は、QQuickRhiItemRenderer クラス内に配置する必要があります。2つのスレッドによる競合状態や読み書きの問題を回避するため、レンダラーとアイテムが共有変数を読み書きしないようにすることが重要です。 アイテムとレンダラー間の通信は、主に QQuickRhiItem::synchronize() 関数を介して行われるべきです。この関数は、GUI スレッドがブロックされている間に、レンダリングスレッド上で呼び出されます。アイテムとレンダラー間の通信に、キュー化された接続やイベントを使用することも可能です。
アプリケーションは、QQuickRhiItemとQQuickRhiItemRenderer の両方のサブクラスを作成する必要があります。純粋仮想関数createRenderer()は、QQuickRhiItemRenderer サブクラスの新しいインスタンスを返すように再実装する必要があります。
QRhiWidget と同様に、QQuickRhiItemはカラーバッファを自動的に管理します。このカラーバッファは、通常は2Dテクスチャ(QRhiTexture )であり、マルチサンプリングが使用されている場合はQRhiRenderBuffer となります。 (3D APIによっては、テクスチャとレンダリングバッファを区別するものもあれば、基盤となるネイティブリソースが同じであるものもあります。レンダリングバッファは主に、OpenGL ES 3.0でのマルチサンプリングを可能にするために使用されます)
テクスチャのサイズは、デフォルトではアイテムのサイズに合わせて調整されます(device pixel ratio が考慮されます)。アイテムのサイズが変更されると、テクスチャは正しいサイズで再作成されます。固定サイズを希望する場合は、fixedColorBufferWidth およびfixedColorBufferHeight を0以外の値に設定してください。
QQuickRhiItemはtexture provider であり、ShaderEffects や、テクスチャプロバイダを利用するその他のクラスで直接使用できます。
主なユースケースではありませんが、QQuickRhiItem では、Vulkan、Metal、Direct 3D、OpenGL などの 3D グラフィックス API を直接使用するレンダリングコードを組み込むことも可能です。QRhi のレンダリングパス内でネイティブコマンドを記録する方法の詳細については、QRhiCommandBuffer::beginExternal()を参照してください。また、既存のネイティブテクスチャをラップし、その後のレンダリングパスでQRhi と共に使用する方法については、QRhiTexture::createFrom()を参照してください。 また、ネイティブ 3D API 環境(デバイス拡張機能など)の設定については、QQuickGraphicsConfiguration を参照してください。なお、QQuickWindow は、QWindow::setVulkanInstance() を適切なタイミングで呼び出すことで、カスタムQVulkanInstance と関連付けることができます。
注:QQuickRhiItemは 、常にQQuickWindow が使用するのと同じQRhi インスタンス(ひいては、同じOpenGLコンテキスト、Vulkanデバイスなど)を使用します。使用する基盤となる3DグラフィックスAPIを選択するには、QQuickWindow に対して、十分に早い段階でsetGraphicsApi()を呼び出してください。 シーングラフが初期化されてしまうと変更は不可能となり、シーン内のすべての QQuickRhiItem インスタンスは同じ 3D API を使用してレンダリングされます。
簡単な例
以下の QQuickRhiItem のサブクラスを例に挙げます。ここでは完全な形で示しています。これは、パースペクティブ投影を用いて単一の三角形をレンダリングするもので、三角形はカスタムアイテムのangle プロパティに基づいて回転します(つまり、QML のNumberAnimation などのアニメーションで制御することが可能です)。
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();
}注目すべきは、この単純なクラスが「QRhiWidget 」の紹介で示されたコードとほぼ全く同じであるという点です。頂点シェーダーとフラグメントシェーダーも同様です。これらはVulkanスタイルのGLSLソースコードとして提供されており、まずQtのシェーダーインフラストラクチャによって処理される必要があります。 これは、qsb コマンドラインツールを手動で実行するか、CMakeのqt_add_shaders()関数を使用することで実現されます。QQuickRhiItemは、アプリケーションに同梱されている、これらの前処理済みの.qsb ファイルをロードします。Qtのシェーダー変換インフラストラクチャに関する詳細については、Qtの「Shader Tools」を参照してください。
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);
}QML(QML_NAMED_ELEMENT に注意)で定義されれば、このカスタムアイテムはどのシーンでもインスタンス化できます。(CMakeプロジェクト内で、qt_add_qml_module()に対して指定された適切なURI をインポートした後)
ExampleRhiItem {
anchors.fill: parent
anchors.margins: 10
NumberAnimation on angle { from: 0; to: 360; duration: 5000; loops: Animation.Infinite }
}より複雑な例については、「シーングラフ - RHI テクスチャアイテム」を参照してください。
関連項目: QQuickRhiItemRenderer 、シーングラフ - RHI テクスチャアイテム、QRhi 、および「シーングラフとレンダリング」。
メンバ型のドキュメント
enum class QQuickRhiItem::TextureFormat
QQuickRhiItem がレンダリングするバッキングテクスチャの形式を指定します。
| 定数 | 値 | 説明 |
|---|---|---|
QQuickRhiItem::TextureFormat::RGBA8 | 0 | 「QRhiTexture::RGBA8 」を参照してください。これがデフォルトです。 |
QQuickRhiItem::TextureFormat::RGBA16F | 1 | 「QRhiTexture::RGBA16F 」を参照してください。 |
QQuickRhiItem::TextureFormat::RGBA32F | 2 | QRhiTexture::RGBA32F を参照してください。 |
QQuickRhiItem::TextureFormat::RGB10A2 | 3 | QRhiTexture::RGB10A2 を参照してください。 |
QRhiTextureも参照してください 。
プロパティのドキュメント
alphaBlending : bool
QQuickRhiItem およびそのレンダラーによって生成されたコンテンツでテクスチャ化されたクワッドを描画する際、ブレンディングを常に有効にするかどうかを制御します。
デフォルト値は `false` です。これはパフォーマンス上の理由によるものです。半透明処理が関与しない場合、QQuickRhiItemRenderer は不透明な色でクリアされ、アルファ値が 1 未満のフラグメントは決してレンダリングされないため、ブレンディングを有効にしても意味がありません。
QQuickRhiItemRenderer のサブクラスが半透明処理を伴うレンダリングを行う場合は、このプロパティをtrueに設定してください。
注: 特定の条件下では 、このプロパティの値にかかわらず、ブレンドが実行される場合があります。たとえば、アイテムのopacity (より正確には、親チェーンから継承された複合不透明度)が1未満の場合、このプロパティがfalseに設定されていても、ブレンドは自動的に有効になります。
注: Qt Quick のシーングラフは 、プリマルチプライドアルファに依存しており、それを前提としています。例えば、レンダラーの背景をアルファ値0.5でクリアしたい場合は、赤、緑、青のクリアカラー値にも0.5を乗算するようにしてください。そうしないと、ブレンディングの結果が不正確になります。
アクセス関数:
| bool | alphaBlending() const |
| void | setAlphaBlending(bool enable) |
Notifierシグナル:
| void | alphaBlendingChanged() |
colorBufferFormat : TextureFormat
このプロパティは、カラーバッファとして使用されるテクスチャのフォーマットを制御します。デフォルト値は `TextureFormat::RGBA8` です。`QQuickRhiItem ` は、`QRhiTexture` でサポートされているフォーマットの一部へのレンダリングをサポートしています。`QRhi::isTextureFormatSupported()` によってサポートされていると報告されたフォーマットのみを指定してください。それ以外の場合、レンダリングは機能しません。
注: アイテムとそのレンダラーがすでに初期化され、レンダリングが完了している状態で新しいフォーマットを設定すると 、テクスチャフォーマットの違いにより関連するQRhiRenderPassDescriptor が互換性を失った場合、レンダラーによって作成されたすべてのQRhiGraphicsPipeline オブジェクトが使用できなくなる可能性があります。sampleCount を動的に変更する場合と同様に、これは、initialize() または render() の実装において、既存のパイプラインを解放し、新しいパイプラインを作成する処理を適切に行う必要があることを意味します。
アクセス関数:
| QQuickRhiItem::TextureFormat | colorBufferFormat() const |
| void | setColorBufferFormat(QQuickRhiItem::TextureFormat format) |
Notifierシグナル:
| void | colorBufferFormatChanged() |
[read-only] effectiveColorBufferSize : QSize
このプロパティは、基となるカラーバッファ(QRhiTexture またはQRhiRenderBuffer )のサイズをピクセル単位で返します。これは、GUI(メイン)スレッド、QMLバインディング、またはJavaScriptでの使用を目的として提供されています。
注: シーングラフのレンダリングスレッド上で動作するQQuickRhiItemRenderer の実装では 、このプロパティを使用しないでください。それらの実装では、render target からサイズを取得する必要があります。
注: レンダリングスレッドでレンダリングが行われると値が変化するため、メインスレッドの観点からは、この値は 非同期的に利用可能になります。つまり、このプロパティは主にQMLバインディングで有用です。アプリケーションコードは、QQuickRhiItem オブジェクトの構築時点で値がすでに最新であることを前提にしてはなりません。
これは読み取り専用のプロパティです。
アクセス関数:
| QSize | effectiveColorBufferSize() const |
Notifierシグナル:
| void | effectiveColorBufferSizeChanged() |
fixedColorBufferHeight : int
アイテムに関連付けられたテクスチャの固定高さ(ピクセル単位)。 アイテムのサイズに依存しない固定のテクスチャサイズを設定したい場合に適用されます。このサイズはアイテムのジオメトリ(シーン内でのサイズや配置)には影響を与えないため、テクスチャの内容はアイテムの領域に合わせて引き伸ばされた(拡大された)状態、または縮小された状態で表示されます。
デフォルトの値は `0` です。値が 0 の場合、テクスチャのサイズはアイテムのサイズに追従します(texture size =item size *device pixel ratio )。
固定の幅と高さを設定するユースケースの詳細については、fixedColorBufferWidth を参照してください。
アクセス関数:
| int | fixedColorBufferHeight() const |
| void | setFixedColorBufferHeight(int height) |
Notifierシグナル:
| void | fixedColorBufferHeightChanged() |
fixedColorBufferWidth : int
アイテムに関連付けられたテクスチャまたはレンダーバッファの固定幅(ピクセル単位)。 アイテムのサイズに依存しない固定のカラーバッファサイズを設定したい場合に適用されます。このサイズはアイテムのジオメトリ(シーン内でのサイズや配置)には影響を与えないため、テクスチャの内容はアイテムの領域に合わせて引き伸ばされた(拡大された)状態、あるいは縮小された状態で表示されます。
たとえば、アイテムの(ピクセル)サイズのちょうど 2 倍のサイズを設定すると、事実上 2 倍のスーパーサンプリング(2 倍の解像度でレンダリングし、シーン内のアイテムに対応するクワッドにテクスチャを適用する際に暗黙的に縮小する)が行われます。 一方、アイテムのピクセルサイズの半分となるサイズを設定すると、実質的に半分の解像度でレンダリングを行い、その結果をアップスケーリングすることになります。
デフォルトでは、この値は `0` です。値が 0 の場合、テクスチャのサイズはアイテムのサイズに従います。(texture size =item size *device pixel ratio )。
注:デバイスピクセル比 (システムコンポジターのスケーリング係数)は 、パフォーマンスに大きな影響を与える可能性があります。スケーリング係数が2 (200%)の場合、解像度が2倍になるため、開発者やUIデザイナーが認識するアイテムのサイズの2倍でレンダリングされ、その後、コンテンツが実質的に縮小されます。これは、デバイス・ピクセル比が1のシステムで、このプロパティをアイテムのピクセルサイズの2倍に設定した場合に起こる現象と同様です。 したがって、システムで 1 より大きいデバイス ピクセル比が使用されている場合、多くの最新のデスクトップ システムでは、その必要性もパフォーマンスの余裕もないため、このプロパティがアイテムのピクセルサイズよりも大きいサイズで使用されることはほとんどないと思われます。 その代わりに、このプロパティの主な用途は、アイテム(および場合によってはウィンドウ)のジオメトリがどれほど大きくても、それを盲目的に追従するのではなく、適度に低い解像度でレンダリングするために、より小さいサイズを設定することです。
アクセス関数:
| int | fixedColorBufferWidth() const |
| void | setFixedColorBufferWidth(int width) |
通知シグナル:
| void | fixedColorBufferWidthChanged() |
mirrorVertically : bool
このプロパティは、テクスチャ付きクワッドを描画する際に、テクスチャのUVを反転させるかどうかを制御します。オフスクリーンカラーバッファの内容や、QQuickRhiItemRenderer によって実装されるレンダリングには影響しません。
デフォルト値はfalse です。
アクセス関数:
| bool | isMirrorVerticallyEnabled() const |
| void | setMirrorVertically(bool enable) |
通知シグナル:
| void | mirrorVerticallyChanged() |
sampleCount : int
このプロパティは、マルチサンプルアンチエイリアシング(MSAA)のサンプル数を制御します。デフォルトでは、値は1 となっており、これはMSAAが無効になっていることを意味します。
有効な値は 1、4、8、場合によっては 16 および 32 です。QRhi::supportedSampleCounts() を使用すると、実行時にサポートされているサンプル数を照会できますが、通常、アプリケーションでは 1(MSAA なし)、4x(標準 MSAA)、または 8x(高 MSAA)を指定する必要があります。
注: 新しい値を設定すると 、それ以降、レンダラーによって作成されるすべてのQRhiGraphicsPipeline オブジェクトは、同じサンプル数を使用する必要があります。異なるサンプル数で作成された既存のQRhiGraphicsPipeline オブジェクトは、それ以降使用してはなりません。 値が変更されると、すべてのカラーバッファおよび深度・ステンシルバッファが自動的に破棄・再作成され、initialize()が再度呼び出されます。ただし、isAutoRenderTargetEnabled()がfalse に設定されている場合、深度・ステンシルバッファや追加のカラーバッファに関しては、アプリケーション側でこれを管理する必要があります。
サンプル数をデフォルトの 1 からより大きな値に変更すると、colorTexture() はnullptr となり、msaaColorBuffer() は有効なオブジェクトを返し始めます。1(または 0)に戻すと、逆のことが起こります。つまり、次の initialize() の呼び出しでは、msaaColorBuffer() はnullptr を返すようになり、colorTexture() は再び有効になります。 さらに、resolveTexture() は、サンプル数が 1 より大きい場合(つまり、MSAA が使用されている場合)、有効な(マルチサンプルではない)QRhiTexture を返します。
アクセス関数:
| int | sampleCount() const |
| void | setSampleCount(int samples) |
通知シグナル:
| void | sampleCountChanged() |
QQuickRhiItemRenderer::msaaColorBuffer() およびQQuickRhiItemRenderer::resolveTexture()も参照してください 。
メンバ関数のドキュメント
[explicit] QQuickRhiItem::QQuickRhiItem(QQuickItem *parent = nullptr)
指定されたparent を使用して、新しいQQuickRhiItemを生成します。
[override virtual noexcept] QQuickRhiItem::~QQuickRhiItem()
デストラクタ。
[pure virtual protected] QQuickRhiItemRenderer *QQuickRhiItem::createRenderer()
この関数を再実装して、QQuickRhiItemRenderer のサブクラスの新しいインスタンスを作成し、それを返してください。
この関数は、GUIスレッドがブロックされている間に、レンダリングスレッド上で呼び出されます。
[override virtual protected] bool QQuickRhiItem::event(QEvent *e)
QQuickItem::event(QEvent *ev) を再実装します。
[override virtual protected] void QQuickRhiItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) を再実装します。
[protected] bool QQuickRhiItem::isAutoRenderTargetEnabled() const
現在の自動深度・ステンシルバッファおよびレンダリングターゲットの管理設定を返します。
デフォルトでは、この値はtrue です。
setAutoRenderTarget()も参照してください 。
[override virtual] bool QQuickRhiItem::isTextureProvider() const
QQuickItem::isTextureProvider() const を再実装します。
[override virtual protected] void QQuickRhiItem::releaseResources()
QQuickItem::releaseResources() を再実装します。
[protected] void QQuickRhiItem::setAutoRenderTarget(bool enabled)
このアイテムによって、深度ステンシルQRhiRenderBuffer およびQRhiTextureRenderTarget が自動的に作成・維持されるかどうかを制御します。デフォルト値はtrue です。これを無効にするには、例えば派生クラスのコンストラクタなどから、enabled をfalse に設定して、この関数を早い段階で呼び出してください。
自動モードでは、深度・ステンシルバッファのサイズとサンプル数は、カラーバッファテクスチャの設定に従います。非自動モードでは、renderTarget() および depthStencilBuffer() は常にnullptr を返すため、これらのオブジェクトの設定と管理は、アプリケーション側の initialize() の実装に委ねられます。
[override virtual] QSGTextureProvider *QQuickRhiItem::textureProvider() const
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.