このページでは

QRhiSwapChain Class

Swapchainのリソース。詳細...

ヘッダー: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
以下のように: Qt 6.6
継承元: QRhiResource

パブリック型

enum Flag { SurfaceHasPreMulAlpha, SurfaceHasNonPreMulAlpha, sRGB, UsedAsTransferSource, NoVSync, MinimalBufferCount }
flags Flags
enum Format { SDR, HDRExtendedSrgbLinear, HDR10, HDRExtendedDisplayP3Linear }
enum StereoTargetBuffer { LeftBuffer, RightBuffer }

パブリック関数

virtual bool createOrResize() = 0
virtual QRhiCommandBuffer *currentFrameCommandBuffer() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
QSize currentPixelSize() const
QRhiRenderBuffer *depthStencil() const
QRhiSwapChain::Flags flags() const
QRhiSwapChain::Format format() const
virtual QRhiSwapChainHdrInfo hdrInfo()
virtual bool isFormatSupported(QRhiSwapChain::Format f) = 0
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() = 0
QRhiSwapChainProxyData proxyData() const
QRhiRenderPassDescriptor *renderPassDescriptor() const
int sampleCount() const
void setDepthStencil(QRhiRenderBuffer *ds)
void setFlags(QRhiSwapChain::Flags f)
void setFormat(QRhiSwapChain::Format f)
void setProxyData(const QRhiSwapChainProxyData &d)
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSampleCount(int samples)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
void setWindow(QWindow *window)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const
virtual QSize surfacePixelSize() = 0
QWindow *window() const

再実装されたパブリック関数

virtual QRhiResource::Type resourceType() const override

詳細な説明

スワップチェーンを使用すると、レンダリング結果をサーフェスに表示できます。スワップチェーンは通常、一連の色バッファによって支えられています。これらのうち、一度に1つだけが表示されます。

以下は、QWindow 上にレンダリングを行うために、スワップチェーンおよび関連するリソースを作成・管理するための典型的なパターンです:

void init()
{
    sc = rhi->newSwapChain();
    ds = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
                              QSize(), // no need to set the size here due to UsedWithSwapChainOnly
                              1,
                              QRhiRenderBuffer::UsedWithSwapChainOnly);
    sc->setWindow(window);
    sc->setDepthStencil(ds);
    rp = sc->newCompatibleRenderPassDescriptor();
    sc->setRenderPassDescriptor(rp);
    resizeSwapChain();
}

void resizeSwapChain()
{
    hasSwapChain = sc->createOrResize();
}

void render()
{
    if (!hasSwapChain || notExposed)
        return;

    if (sc->currentPixelSize() != sc->surfacePixelSize() || newlyExposed) {
        resizeSwapChain();
        if (!hasSwapChain)
            return;
        newlyExposed = false;
    }

    rhi->beginFrame(sc);
    // ...
    rhi->endFrame(sc);
}

スワップチェーンのサイズ変更にQWindow のサイズ変更イベントに依存することは避けてください。特に、サーフェスのサイズがQWindow で報告される寸法と常に完全に一致するとは限らないことを考慮してください。安全でクロスプラットフォームに対応したアプローチは、新しいフレームを開始するたびにsurfacePixelSize()を使用してチェックを行うことです。

スワップチェーンの解放は、QWindow および基盤となるネイティブウィンドウが完全に起動し、正常に動作している間に実行する必要があります。前の例を基に説明します:

void releaseSwapChain()
{
    if (hasSwapChain) {
        sc->destroy();
        hasSwapChain = false;
    }
}

// assuming Window is our QWindow subclass
bool Window::event(QEvent *e)
{
    switch (e->type()) {
    case QEvent::UpdateRequest: // for QWindow::requestUpdate()
        render();
        break;
    case QEvent::PlatformSurface:
        if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
            releaseSwapChain();
        break;
    default:
        break;
    }
    return QWindow::event(e);
}

スワップチェーンの初期化や最初のフレームのレンダリング開始は、いつでも開始できるわけではありません。安全でクロスプラットフォームに対応したアプローチは、exposeイベントに依存することです。QExposeEvent は、プラットフォームに応じて、ウィンドウがマップされたり、隠れたり、サイズ変更されたりするたびに送信される、大まかに定義されたイベントです。

void Window::exposeEvent(QExposeEvent *)
{
    // initialize and start rendering when the window becomes usable for graphics purposes
    if (isExposed() && !running) {
        running = true;
        init();
    }

    // stop pushing frames when not exposed or size becomes 0
    if ((!isExposed() || (hasSwapChain && sc->surfacePixelSize().isEmpty())) && running)
        notExposed = true;

    // continue when exposed again and the surface has a valid size
    if (isExposed() && running && notExposed && !sc->surfacePixelSize().isEmpty()) {
        notExposed = false;
        newlyExposed = true;
    }

    if (isExposed() && !sc->surfacePixelSize().isEmpty())
        render();
}

レンダリングが開始された後、新しいフレームを要求する簡単な方法は `QWindow::requestUpdate()` です。一部のプラットフォームではこれは単なる小さなタイマーに過ぎませんが、他のプラットフォームでは特定の実装がされています。例えば、macOS や iOS ではCVDisplayLink によってサポートされている場合があります。上記の例は、`QEvent::UpdateRequest` を処理することで、更新要求に対応できるようすでに準備されています。

QRhiRenderTarget として機能する一方で、QRhiSwapChainはQRhiCommandBuffer も管理します。QRhi::endFrame()を呼び出すと、記録されたコマンドが送信されると同時に、present リクエストがキューに入れられます。 デフォルトの動作では、スワップ間隔を1に設定してこれを行うため、ディスプレイの垂直リフレッシュレートへの同期が有効になります。したがって、beginFrame()およびendFrame()を呼び出すレンダリングスレッドは、vsyncに合わせてスロットリングされます。一部のバックエンドでは、flags()内でQRhiSwapChain:NoVSync を渡すことで、これを無効にすることができます。

マルチサンプリング (MSAA) は、setSampleCount() を通じて要求された場合、アプリケーションに対して透過的に処理されます。該当する場合、QRhiSwapChain は追加のカラーバッファの作成と、フレーム終了時のマルチサンプル解決コマンドの発行を処理します。 OpenGLの場合、QRhi を初期化する前にQSurfaceFormat::setDefaultFormat()を呼び出し、QSurfaceFormat を介して適切なサンプル数を指定する必要があります。

注:これは 互換性の保証が限定的な RHI API です。詳細については、QRhi を参照してください。

メンバ型のドキュメント

enum QRhiSwapChain::Flag
flags QRhiSwapChain::Flags

スワップチェーンの特性を記述するためのフラグ値

定数値説明
QRhiSwapChain::SurfaceHasPreMulAlpha1 << 0ターゲットサーフェスが、プリマルチプライされたアルファを持つ透過性を持つことを示します。例えば、ターゲットのQWindow でアルファチャンネルが有効になっている場合、Qt Quick はこの設定を使用します。これは、シーングラフレンダラーが常に、アルファが赤、緑、青の値に乗算されたフラグメントを出力するためです。 プラットフォーム間で同一の挙動を保証するため、スワップチェーンでこのフラグが設定されている場合は、常にターゲットの `QWindow ` において `QSurfaceFormat::alphaBufferSize()` を 0 以外の値に設定してください。
QRhiSwapChain::SurfaceHasNonPreMulAlpha1 << 1ターゲットサーフェスが、プリマルチプライドアルファではない透過性を持つことを示します。システムのコンポジターが常にプリマルチプライドアルファのコンテンツを想定している場合、一部のシステムではこれがサポートされない可能性があることに注意してください。その場合、このフラグが設定された際の挙動は、SurfaceHasPreMulAlpha と同等になると予想されます。
QRhiSwapChain::sRGB1 << 2適用可能な場合、スワップチェーンの色バッファおよび/またはレンダリングターゲットビューに対して sRGB 形式を選択するよう要求します。これにより、このスワップチェーンをターゲットとするすべてのコンテンツに対して sRGB フレームバッファの更新およびブレンドが有効化されることに注意してください。また、この設定を無効にすることはできません。 OpenGL の場合、さらにQWindow のQSurfaceFormat に対して `sRGBColorSpace ` を設定してください。これは、スワップチェーンのフォーマットが `QRhiSwapChain::SDR` に設定されている場合にのみ適用されます。
QRhiSwapChain::UsedAsTransferSource1 << 3QRhiResourceUpdateBatch::readBackTexture() において、このスワップチェーンがリードバックのソースとして使用されることを示します。
QRhiSwapChain::NoVSync1 << 4垂直同期の待機を無効化し、レンダリングスレッドのスロットリングも回避するよう要求します。この動作はバックエンドに依存し、これを制御できる場合にのみ適用されます。バックエンドによっては、この要求を完全に無視する場合もあります。OpenGL の場合、代わりにQSurfaceFormat::setSwapInterval() を使用してQWindow のスワップ間隔を 0 に設定してみてください。
QRhiSwapChain::MinimalBufferCount1 << 5スワップチェーンを最小数のバッファで作成するよう要求します。グラフィックス実装でこれより高い最小数が設定されていない限り、実際には2となります。 この設定は、Vulkanなど、グラフィックスAPIを介してそのような制御が可能なバックエンドでのみ適用されます。デフォルトでは、要求するバッファの数はバックエンドが決定し(実際にはほとんどの場合2または3のいずれかになります)、アプリケーションが関与する必要はありません。 ただし、たとえば Vulkan の場合、モバイルデバイス上の特定の実装で発生する奇妙なパフォーマンスの問題を回避するためなど、バックエンドはより多い数(3)を好む傾向があります。一部のプラットフォームでは、バッファ数を少なく(2)に強制する方が有益である場合があるため、このフラグによってそれを強制できるようになっています。 なお、これらはいずれも処理中のフレーム数には影響を与えないため、スワップチェーンの画像バッファ数がN より大きい場合でも、CPU(QRhi )はGPUより最大でN - 1 フレーム先までのフレームを準備し続けます。(N =QRhi::FramesInFlight 、通常は2)。

Flags型は、QFlags<Flag>のtypedefです。これは、Flag値の論理和(OR)の組み合わせを格納します。

enum QRhiSwapChain::Format

スワップチェーンのフォーマットを定義します。デフォルトのフォーマットは SDR です。

この列挙型は、isFormatSupported() とともに使用して、指定された形式でのスワップチェーンの作成がプラットフォームおよびウィンドウに関連付けられた画面でサポートされているかどうかを事前に確認したり、setFormat() とともに使用して、createOrResize() を初めて呼び出す前にスワップチェーンに要求された形式を設定したりするために使用されます。

定数値説明
QRhiSwapChain::SDR0バックエンドおよびプラットフォームに応じて、8 ビット RGBA または BGRA。特に OpenGL ES の場合、プラットフォームが 8 ビット未満しか提供しないことがあります(例えば、EGL やQSurfaceFormat が 565 または 444 フォーマットを選択した場合など。これはQRhi の制御の範囲外です)。標準ダイナミックレンジ。QRhiSwapChain::sRGB フラグの設定と組み合わせることが可能です。
QRhiSwapChain::HDRExtendedSrgbLinear116ビット浮動小数点RGBA、ハイダイナミックレンジ、拡張線形sRGB(scRGB)色空間。これにはRec. 709の原色(SDR/sRGBと同じ)と線形色が含まれます。 ディスプレイのネイティブ色空間(HDR10など)への変換は、ウィンドウシステムによって行われます。Windowsでは、これはシステムコンポジターの標準色空間であり、デスクトッププラットフォームにおけるHDRスワップチェーン全般に対して推奨されるフォーマットです。
QRhiSwapChain::HDR10210ビットの符号なし整数RGBまたはBGR(2ビットのアルファチャンネル付き)、高ダイナミックレンジ、ST2084 PQ伝達関数を持つHDR10(Rec. 2020)色空間。
QRhiSwapChain::HDRExtendedDisplayP3Linear316ビット浮動小数点RGBA、高ダイナミックレンジ、拡張リニアDisplay P3色空間。iOSやVisionOSなどのプラットフォームにおけるHDRの主な選択肢です。

enum QRhiSwapChain::StereoTargetBuffer

ステレオスワップチェーンで使用するバックバッファを選択します。

定数値
QRhiSwapChain::LeftBuffer0
QRhiSwapChain::RightBuffer1

メンバ関数のドキュメント

[pure virtual] bool QRhiSwapChain::createOrResize()

まだ作成されていない場合はスワップチェーンを作成し、ターゲットとなるサーフェスの現在のサイズに合わせてスワップチェーンのバッファサイズを変更します。ターゲットとなるサーフェスのサイズが以前と異なる場合は、いつでもこの関数を呼び出してください。

注: destroy()は 、スワップチェーンを完全に解放する必要がある場合(通常はQPlatformSurfaceEvent::SurfaceAboutToBeDestroyed を実行する場合)にのみ呼び出してください 。サイズ変更を行うには、createOrResize()を呼び出してください。

成功した場合はtrue を、グラフィックス操作が失敗した場合はfalse を返します。戻り値にかかわらず、destroy()の呼び出しは常に安全です。

[pure virtual] QRhiCommandBuffer *QRhiSwapChain::currentFrameCommandBuffer()

このスワップチェーンを使用して beginFrame() が呼び出されたことを前提として、beginFrame -endFrame ブロック内でレンダリングコマンドやリソースの更新を記録できるコマンドバッファを返します。

注: 返されたオブジェクトは 、endFrame() 実行後も次の beginFrame() が呼び出されるまでは有効ですが、その間は返されたコマンドバッファを使用してコマンドを記録してはなりません。むしろ、lastCompletedGpuTime() を呼び出すなどして、そのフレーム(またはそれ以前のフレーム)中に収集されたデータを照会するために使用できます。

注:この値は フレーム間でキャッシュしたり再利用したりしてはなりません。呼び出し側は、beginFrame() が再度呼び出された後は、返されたオブジェクトを保持してはなりません。代わりに、この関数を呼び出してコマンドバッファオブジェクトを再度照会する必要があります。

[pure virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()

スワップチェーンの現在のバックバッファをレンダリングするために、`beginPass()` で使用できるレンダリングターゲットを返します。このスワップチェーンで `beginFrame()` が呼び出された `QRhi::beginFrame()` - `QRhi::endFrame()` ブロック内でのみ有効です。

注:この 値は 、フレーム間でキャッシュして再利用してはなりません。

[virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)

スワップチェーンの左または右のバックバッファにレンダリングするために、`beginPass()` で使用できるレンダリングターゲットを返します。このオーバーロードは、ステレオレンダリングの場合、つまり、関連付けられた `QWindow ` が単一のカラーバッファではなく、各眼用に1つずつ計2つのカラーバッファによって裏付けられている場合にのみ使用してください。

ステレオレンダリングがサポートされていない場合、戻り値はデフォルトのターゲットになります。Metalを除くすべてのハードウェアバックエンドで、QSurfaceFormat::StereoBuffers と組み合わせてサポートされています(実行時にグラフィックスおよびディスプレイドライバースタックによってサポートされていることを前提とします)。MetalおよびNullバックエンドは、このオーバーロードからデフォルトのレンダリングターゲットを返します。

注:この値は 、フレーム間でキャッシュしたり再利用したりしてはなりません。

QSize QRhiSwapChain::currentPixelSize() const

スワップチェーンが最後に正常に構築された際のサイズを返します。これを使用して、createOrResize() を再度呼び出す必要があるかどうかを判断します。currentPixelSize() != surfacePixelSize() の場合、スワップチェーンのサイズ変更が必要です。

注:一般的なレンダリングロジックでは 、新しいフレームの準備を開始する際、この関数を呼び出して出力サイズを取得し、この関数から返されたサイズに基づいて(ビューポートなどの)依存する計算を行います。

多くの場合、その値は `QWindow::size() * QWindow::devicePixelRatio()` と同じですが、`QWindow` が報告するサイズを信頼しても、すべてのプラットフォームやグラフィックス API の実装において正確であるとは限りません。したがって、出力レイヤーまたはサーフェスの寸法(ピクセル単位)を特定する必要がある場合は、この関数の使用を強く推奨します。

また、専用のレンダリングスレッド上でQRhi を使用する際に発生しうるデータ競合を回避できるという利点もあります。これは、メインスレッド上で更新されたデータにアクセスする可能性のあるQWindow 関数を呼び出す必要がなくなるためです。

surfacePixelSize()も参照してください 。

QRhiRenderBuffer *QRhiSwapChain::depthStencil() const

深度・ステンシル用に現在関連付けられているレンダリングバッファを返します。

setDepthStencil()も参照してください 。

QRhiSwapChain::Flags QRhiSwapChain::flags() const

現在設定されているフラグを返します。

setFlags()も参照してください 。

QRhiSwapChain::Format QRhiSwapChain::format() const

現在設定されているフォーマットを返します。

setFormat()も参照してください 。

[virtual] QRhiSwapChainHdrInfo QRhiSwapChain::hdrInfo()

関連付けられたディスプレイのHDR情報を返します。

この操作が低コストであると想定しないでください。プラットフォームによっては、この関数がさまざまなプラットフォームクエリを実行し、パフォーマンスに影響を与える可能性があります。

注: ウィンドウがset である限り、createOrResize()の前に呼び出すことができます 。

注: 初期化済みのスワップチェーンを持つウィンドウを、異なるディスプレイ間(特性の異なる HDR から HDR へ、HDR から SDR へなど)に移動した場合の挙動は 、現時点では明確に定義されておらず、ウィンドウシステムやコンポジターに大きく依存し、プラットフォームによって挙動が異なる可能性があります。 現在、QRhi は、createOrResize()の実行時点でスワップチェーンに関連付けられていたウィンドウが属していたディスプレイについて、hdrInfo()が利用可能な場合に有効なデータを返すことのみを保証しています。

QRhiSwapChainHdrInfoも参照してください 。

[pure virtual] bool QRhiSwapChain::isFormatSupported(QRhiSwapChain::Format f)

指定されたスワップチェーン形式 `f ` がサポートされている場合、`true` を返します。SDR は常にサポートされています。

注: createOrResize()とは独立して呼び出すことができますが 、window()はあらかじめ設定されている必要があります。 ウィンドウが設定されていない状態で呼び出すと、バックエンドやプラットフォームによっては予期しない結果になる可能性があります(HDR フォーマットの場合は、ほぼ確実に false になります)。これは、HDR フォーマットのサポートが通常、その時点でスワップチェーンに関連付けられているウィンドウが出力先(画面)に属していることに依存しているためです。 HDR フォーマットで結果が true の場合、その間にウィンドウが別の画面に移動されない限り、そのフォーマットでのスワップチェーンの作成は成功すると予想されます。

この関数の主な用途は、ウィンドウがすでに設定された後、最初の `createOrResize()` を呼び出す前にこれを呼び出すことです。これにより、QRhi バックエンドは、プラットフォームやウィンドウシステムに固有のクエリを実行して、そのウィンドウ(およびそれが表示されている画面)が、指定されたフォーマットで真の HDR 出力が可能かどうかを判断できるようになります。

フォーマットがサポートされていると報告された場合は、setFormat() を呼び出して要求されたフォーマットを設定し、createOrResize() を呼び出してください。ただし、その影響には注意が必要です。HDR フォーマットを正常に要求すると、異なる色空間への対応、HDR 非対応のコンテンツに対するホワイトレベル補正、トーンマッピング方法の調整、オフスクリーン・レンダリングターゲット設定の調整などが必要になる場合があります。

setFormat()も参照してください 。

[pure virtual] QRhiRenderPassDescriptor *QRhiSwapChain::newCompatibleRenderPassDescriptor()

このスワップチェーンと互換性のある新しいQRhiRenderPassDescriptor を返します。

返り値は 2 つの方法で使用されます。setRenderPassDescriptor() およびQRhiGraphicsPipeline::setRenderPassDescriptor() に渡すことができます。レンダリングパス記述子は、アタッチメント(色、深度/ステンシル)およびflags() によって影響を受ける可能性のあるロード/ストアの挙動を記述します。QRhiGraphicsPipeline は、compatible QRhiRenderPassDescriptor が設定されているスワップチェーンと組み合わせてのみ使用できます。

createOrResize()も参照してください 。

QRhiSwapChainProxyData QRhiSwapChain::proxyData() const

現在設定されているプロキシデータを返します。

setProxyData()も参照してください 。

QRhiRenderPassDescriptor *QRhiSwapChain::renderPassDescriptor() const

現在関連付けられているQRhiRenderPassDescriptor オブジェクトを返します。

setRenderPassDescriptor()も参照してください 。

[override virtual] QRhiResource::Type QRhiSwapChain::resourceType() const

QRhiResource::resourceType() const を再実装します。

リソースの型を返します。

int QRhiSwapChain::sampleCount() const

現在設定されているサンプル数を返します。1 は、マルチサンプルアンチエイリアシングが有効でないことを意味します。

setSampleCount()も参照してください 。

void QRhiSwapChain::setDepthStencil(QRhiRenderBuffer *ds)

レンダリングバッファ `ds ` を、深度・ステンシルバッファとして使用するように設定します。

depthStencil()も参照してください 。

void QRhiSwapChain::setFlags(QRhiSwapChain::Flags f)

フラグ「f 」を設定します。

flags()も参照してください 。

void QRhiSwapChain::setFormat(QRhiSwapChain::Format f)

f のフォーマットを設定します。

isFormatSupported() によってサポートされていないと報告されるフォーマットの設定は避けてください。特定のフォーマットのサポートは、スワップチェーンに関連付けられたウィンドウが開かれている画面によって異なる場合があることに注意してください。Windows や macOS などの一部のプラットフォームでは、HDR 出力を機能させるには、ディスプレイ設定で HDR 出力が有効になっている必要があります。

ハイダイナミックレンジ出力に関する詳細については、isFormatSupported()、QRhiSwapChainHdrInfo 、およびFormat を参照してください。

format()も参照してください 。

void QRhiSwapChain::setProxyData(const QRhiSwapChainProxyData &d)

プロキシデータ `d` を設定します。

proxyData() およびQRhi::updateSwapChainProxyData()も参照してください 。

void QRhiSwapChain::setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)

QRhiRenderPassDescriptor (desc )に関連しています。

renderPassDescriptor()も参照してください 。

void QRhiSwapChain::setSampleCount(int samples)

サンプル数を設定します。samples の一般的な値は、1(MSAA なし)、4(4倍 MSAA)、または 8(8倍 MSAA)です。

sampleCount() およびQRhi::supportedSampleCounts()も参照してください 。

[since 6.9] void QRhiSwapChain::setShadingRateMap(QRhiShadingRateMap *map)

指定されたQRhiShadingRateMap map に関連付けられます。これは、QRhi::VariableRateShadingMap 機能がサポートされていると報告されている場合にのみ機能します。

QRhiCommandBuffer::setShadingRate() も呼び出された場合、各タイルに対して 2 つのシェーディングレートのうち高い方が使用されます。現在、コンバイナの動作を制御する手段は提供されていません。

注: シェーディングレートマップを設定すると 、新しいQRhiRenderPassDescriptor が必要となり、ネイティブのスワップチェーンオブジェクトの一部を再構築する必要があります。したがって、スワップチェーンがすでに設定されている場合は、setShadingRateMap()の直後にnewCompatibleRenderPassDescriptor()およびsetRenderPassDescriptor()を呼び出してください。その後、createOrResize()も再度呼び出す必要があります。 これには連鎖的な影響があり、例えばグラフィックスパイプラインについても、新しいQRhiRenderPassDescriptor に関連付け、再構築する必要があります。この対処方法については、QRhiRenderPassDescriptor::serializedFormat() を参照してください。また、それらに対してもQRhiGraphicsPipeline::UsesShadingRate フラグを設定することを忘れないでください。

この関数は Qt 6.9 で導入されました。

shadingRateMap()も参照してください 。

void QRhiSwapChain::setWindow(QWindow *window)

window を設定します。

window()も参照してください 。

[since 6.9] QRhiShadingRateMap *QRhiSwapChain::shadingRateMap() const

現在設定されているQRhiShadingRateMap を返します。デフォルトでは、nullptr となります。

この関数は Qt 6.9 で導入されました。

setShadingRateMap()も参照してください 。

[pure virtual] QSize QRhiSwapChain::surfacePixelSize()

戻り値:ウィンドウに関連付けられたサーフェスまたはレイヤーのサイズ。

警告: これが `QWindow::size() * QWindow::devicePixelRatio()` と同じであると想定しないでください 。一部のグラフィックス API やウィンドウシステムインターフェース(例: Vulkan)では、サーフェスが関連付けられたウィンドウとは異なるサイズになる理論上の可能性があります。 このようなケースに対応するため、レンダリングロジックでは、サイズに基づく計算(ビューポートなど)を常に `QRhiSwapChain` から報告されたサイズに基づいて行い、決して `QWindow ` から取得したサイズに基づいて行ってはなりません。

注: 少なくともwindow() がすでに設定されている場合、createOrResize() の前に呼び出すことも可能です。これをcurrentPixelSize() と組み合わせることで、スワップチェーンのサイズ変更が必要なタイミングを検出できます。ただし、基になるネイティブオブジェクト(サーフェス、レイヤーなど)のサイズは「動的」であることに注意してください。そのため、この関数が呼び出されるたびに、基になる実装によって報告された最新の値が返されますが、原子性は保証されません。 したがって、フレーム内で使用されるグラフィックスリソースのピクセルサイズを決定するためにこの関数を使用することは、強く推奨されません。代わりに、currentPixelSize() を使用してください。この関数は、アトミックなサイズを返し、createOrResize() の呼び出しの間で値が変化することはありません。

注: スワップチェーンのカラーバッファと組み合わせて使用されるデプス・ステンシル・バッファについては 、QRhiRenderBuffer:UsedWithSwapChainOnlyフラグによって提供される自動サイズ調整および再構築の動作を利用することを強く推奨します。QRhiRenderBuffer::setPixelSize() に渡すサイズを取得するためだけに、この関数を使用してサーフェスのサイズを照会することは避けてください。前述のように、アトミック性が確保されないためです。

currentPixelSize()も参照してください 。

QWindow *QRhiSwapChain::window() const

現在設定されているウィンドウを返します。

setWindow()も参照してください 。

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