このページでは

QRhiRenderBuffer Class

レンダリングバッファリソース。詳細...

ヘッダー: #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

パブリック型

struct NativeRenderBuffer
enum Flag { UsedWithSwapChainOnly }
flags Flags
enum Type { DepthStencil, Color }

パブリック関数

virtual bool create() = 0
virtual bool createFrom(QRhiRenderBuffer::NativeRenderBuffer src)
QRhiRenderBuffer::Flags flags() const
QSize pixelSize() const
int sampleCount() const
void setFlags(QRhiRenderBuffer::Flags f)
void setPixelSize(const QSize &sz)
void setSampleCount(int s)
void setType(QRhiRenderBuffer::Type t)
QRhiRenderBuffer::Type type() const

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

virtual QRhiResource::Type resourceType() const override

詳細な説明

レンダーバッファはサンプリングや読み取りを行うことはできませんが、場合によってはテクスチャに比べていくつかの利点があります:

DepthStencil のレンダリングバッファは、一部のAPIでは遅延割り当てされ、一時的なメモリをバッキングとして使用する場合があります。一部のプラットフォームでは、これにより深度/ステンシルバッファが物理的なバッキングを一切使用しないことを意味する場合があります。

この一時的な性質には結果として、バックエンドが内部的にレンダリングパスを中断して再起動しなければならない場合、DepthStencil のレンダリングバッファの内容が保持される保証がないという点が挙げられます。Metalでは、間接コマンドバッファを介してドローコールが実装された場合にこれが発生します。これは、ドローカウントの多いdrawIndexedIndirect()の場合や、テッセレーションが使用される場合にも当てはまります。 このような呼び出しの後に記録された描画は、内容を失った深度バッファに対して深度テストを行うことになります。これが問題となる場合は、レンダリングバッファの代わりに、setDepthTexture() を使用して深度または深度・ステンシルQRhiTexture をアタッチしてください。QRhiTextureRenderTarget::DoNotStoreDepthStencilContents が設定されていない限り、これらは中断後も保持されます。

Color renderbufferは、QRhi::MultisampleTexture がサポートされていない場合でもQRhi::MultisampleRenderBuffer がサポートされている可能性があるため、有用です。

レンダリングバッファがバックエンドによってどのように実装されているかは、アプリケーションには公開されません。場合によっては通常のテクスチャがバックエンドとして使用されることもあれば、別の種類のネイティブリソースが使用されることもあります。

QRhiSwapChain のカラーバッファと組み合わせて、深度・ステンシルバッファとして(かつそれとしてのみ)使用されるレンダリングバッファには、UsedWithSwapChainOnly フラグを設定する必要があります。 これには2つの目的があります。1つは、バックエンドや基盤となるAPIによっては、そのようなバッファの方が効率的になる場合があること、もう1つは、QRhi がカラーバッファに合わせてサイズを自動的に調整する機能を提供するため、そのようなレンダバッファではsetPixelSize()やcreate()を呼び出す必要がなくなることです。

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

メンバ型のドキュメント

enum QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags

flags() およびsetFlags() のフラグ値

定数値説明
QRhiRenderBuffer::UsedWithSwapChainOnly1 << 0DepthStencil レンダリングバッファの場合、これは、そのレンダリングバッファがQRhiSwapChain と組み合わせてのみ使用され、それ以外の方法では決して使用されないことを示します。これにより、サイズ調整とリソースの再構築が自動的に行われるため、このフラグが設定されている限り、setPixelSize() やcreate() を呼び出す必要はありません。 このフラグ値は、バックエンド固有の動作を引き起こす場合もあります。例えば OpenGL の場合、別のウィンドウシステムインターフェース API(EGL、GLX など)が使用されている場合、このフラグは特に重要です。これは、QSurfaceFormat で要求されるように、ウィンドウシステムによってすでに深度バッファおよびステンシルバッファが提供されているため、実際のレンダリングバッファリソースの作成を回避できるからです。

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

enum QRhiRenderBuffer::Type

レンダリングバッファの型を指定します

定数値説明
QRhiRenderBuffer::DepthStencil0深度とステンシルの組み合わせ
QRhiRenderBuffer::Color1カラー

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

[pure virtual] bool QRhiRenderBuffer::create()

対応するネイティブグラフィックスリソースを作成します。以前にdestroy() を伴わない create() が実行されたために既にリソースが存在する場合、まず暗黙的にdestroy() が呼び出されます。

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

[virtual] bool QRhiRenderBuffer::createFrom(QRhiRenderBuffer::NativeRenderBuffer src)

create() と似ていますが、新しいネイティブ・レンダーバッファ・オブジェクトは作成されません。その代わりに、src で指定されたネイティブ・レンダーバッファ・オブジェクトが使用されます。

これにより、外部のグラフィックスエンジンから既存のレンダーバッファオブジェクト(グラフィックスAPIに応じて、同じデバイスまたは共有コンテキストに属している必要があります)をインポートすることができます。

注:これは 現在、OpenGL にのみ適用されます。この関数は、EGLImageKHR などの特別な外部オブジェクトにバインドされているレンダーバッファオブジェクトをインポートできるようにするためだけに存在します。 アプリケーションが glEGLImageTargetRenderbufferStorageOES 呼び出しを実行すると、そのレンダバッファオブジェクトをこの関数に渡して、ラッピング用の `QRhiRenderBuffer` を作成できます。この ` ` を `QRhiTextureRenderTarget ` へのカラーアタッチメントとして渡すことで、EGLImage へのレンダリングが可能になります。

注: pixelSize()、sampleCount()、およびflags() は、依然として正しく設定する必要があります。QRhi::newRenderBuffer() に誤ったサイズやその他の値を渡し、その後、ネイティブのレンダーバッファオブジェクトだけでそのような値を推測できると期待して createFrom() を呼び出すのは誤りであり、問題を引き起こします。

注: QRhiRenderBuffer は ネイティブオブジェクトの所有権を取得せず、destroy()もそのオブジェクトを解放しません。

注:この関数は 、QRhi::RenderBufferImport 機能がsupported として報告されている場合にのみ実装されます。それ以外の場合、この関数は何も行わず、戻り値はfalse となります。

成功した場合はtrue を返し、サポートされていない場合はfalse を返します。

QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const

フラグを返します。

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

QSize QRhiRenderBuffer::pixelSize() const

ピクセルサイズを返します。

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

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

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

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

int QRhiRenderBuffer::sampleCount() const

サンプル数を返します。1は、マルチサンプルアンチエイリアシングを行わないことを意味します。

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

void QRhiRenderBuffer::setFlags(QRhiRenderBuffer::Flags f)

フラグをf に設定します。

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

void QRhiRenderBuffer::setPixelSize(const QSize &sz)

サイズ(ピクセル単位)を `sz` に設定します。

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

void QRhiRenderBuffer::setSampleCount(int s)

サンプル数を `s` に設定します。

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

void QRhiRenderBuffer::setType(QRhiRenderBuffer::Type t)

型を「t 」に設定します。

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

QRhiRenderBuffer::Type QRhiRenderBuffer::type() const

レンダリングバッファの型を返します。

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

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