QOffscreenSurface Class
QOffscreenSurfaceクラスは、基礎となるプラットフォームのオフスクリーンサーフェスを表します。詳細...
Header: | #include <QOffscreenSurface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
Inherits: | QObject and QSurface |
パブリック関数
QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr) | |
virtual | ~QOffscreenSurface() |
void | create() |
void | destroy() |
bool | isValid() const |
QNativeInterface * | nativeInterface() const |
QSurfaceFormat | requestedFormat() const |
QScreen * | screen() const |
void | setFormat(const QSurfaceFormat &format) |
void | setScreen(QScreen *newScreen) |
再実装パブリック関数
virtual QSurfaceFormat | format() const override |
virtual QSize | size() const override |
virtual QSurface::SurfaceType | surfaceType() const override |
シグナル
void | screenChanged(QScreen *screen) |
詳細説明
QOffscreenSurfaceは、QWindow を作成することなく、任意のスレッドでOpenGLによるレンダリングを可能にするために、QOpenGLContext とともに使用されることを意図しています。
サーフェスは通常レンダリング可能ですが、サーフェスのピクセルにはアクセスできません。QOffscreenSurfaceは、テクスチャやフレームバッファオブジェクトのようなOpenGLリソースを作成するためにのみ使用されるべきである。
アプリケーションは通常、メインのレンダリングスレッドをストールさせないために、QOffscreenSurfaceを使用して、別スレッドで時間のかかるタスクを実行します。QOffscreenSurfaceのコンテキストで作成されたリソースは、メインのOpenGLコンテキストと共有することができます。一般的な使用例としては、テクスチャの非同期アップロードや、QOpenGLFramebufferObject へのレンダリングなどがあります。
オフスクリーン・サーフェスがどのように実装されるかは、基盤となるプラットフォームに依存しますが、通常はピクセル・バッファ(pbuffer)を使用します。プラットフォームがオフスクリーン・サーフェスを実装またはサポートしていない場合、QOffscreenSurface は内部的に不可視のQWindow を使用します。
注意: QOffscreenSurfaceは、いくつかのプラットフォームではQWindow 。クロスプラットフォームのアプリケーションでは、create ()がメイン(GUI)スレッドでのみ呼び出されるようにする必要があります。QOffscreenSurfaceは、他のスレッドでmakeCurrent ()を使用しても安全ですが、初期化と破棄は常にメイン(GUI)スレッドで行わなければなりません。
注意: 与えられたコンテキストやウィンドウとの互換性が保証されたオフスクリーン・サーフェスを作成するには、必ずコンテキストやウィンドウの実際のフォーマット、つまりコンテキストやウィンドウが作成された後に QOpenGLContext::format() やQWindow::format() から返されるQSurfaceFormat にフォーマットを設定してください。QWindow::requestedFormat() から返されたフォーマットをsetFormat() に渡すと、互換性のないオフスクリーン・サーフェスになる可能性があります。
注意: プラットフォームによっては、サーフェスレス・コンテキスト拡張(たとえば、EGL_KHR_surfaceless_context)が利用可能な場合、それを利用することがあります。この場合、基盤となるネイティブ・サーフェスは存在しません。QOffscreenSurfaceの使用例(FBOへのレンダリング、テクスチャのアップロード)では、これは問題ではありません。
メンバー関数ドキュメント
[explicit]
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)
与えられたparent でtargetScreen のオフスクリーンサーフェスを作成します。
create() が呼び出されるまで、基盤となるプラットフォームサーフェスは作成されません。
[virtual noexcept]
QOffscreenSurface::~QOffscreenSurface()
オフスクリーン・サーフェスを破棄します。
void QOffscreenSurface::create()
オフスクリーン・サーフェスに関連するプラットフォーム・リソースを割り当てます。
この時点で、setFormat() を使用して設定されたサーフェス形式が、実際のネイティブ・サーフェスに解決されます。
必要に応じてdestroy() を呼び出して、プラットフォーム・リソースを解放する。
注意: プラットフォームによっては、この関数をメイン(GUI)スレッド上で呼び出す必要があります。
destroy()も参照してください 。
void QOffscreenSurface::destroy()
このオフスクリーンサーフェスに関連付けられたネイティブプラットフォームリソースを解放します。
create() も参照 。
[override virtual]
QSurfaceFormat QOffscreenSurface::format() const
再インプリメント:QSurface::format() const.
このオフスクリーン・サーフェスの実際のフォーマットを返します。
オフスクリーン・サーフェスが作成された後、この関数はサーフェスの実際のフォーマットを返します。要求されたフォーマットがプラットフォームによって満たされなかった場合、要求されたフォーマットと異なる可能性があります。
setFormat()、create()、requestedFormat()も参照 。
bool QOffscreenSurface::isValid() const
このオフスクリーン・サーフェスが有効な場合はtrue
を返し、そうでない場合はfalse
を返す。
プラットフォームのリソースが正常に割り当てられた場合、オフスクリーン・サーフェスは有効である。
create()も参照 。
template <typename QNativeInterface> QNativeInterface *QOffscreenSurface::nativeInterface() const
指定されたタイプのサーフェスのネイティブ・インターフェースを返します。
この関数は、QNativeInterface 名前空間で定義されている QOffScreenSurface のプラットフォーム固有の機能へのアクセスを提供します:
Android におけるオフスクリーンサーフェスのネイティブインターフェース |
要求されたインターフェースが利用できない場合は、nullptr
が返されます。
QSurfaceFormat QOffscreenSurface::requestedFormat() const
このオフスクリーンサーフェスの要求されたサーフェスフォーマットを返します。
要求されたフォーマットがプラットフォームの実装でサポートされていない場合、requestedFormat は実際のオフスクリーン・サーフェスのフォーマットとは異なります。
これはsetFormat() で設定された値です。
QScreen *QOffscreenSurface::screen() const
オフスクリーン・サーフェスが接続されているスクリーンを返します。
setScreen() も参照 。
[signal]
void QOffscreenSurface::screenChanged(QScreen *screen)
このシグナルは、オフスクリーン・サーフェスのscreen が変更されたときに発せられます。これは、setScreen() で明示的に設定された場合と、ウィンドウのスクリーンが削除されたときに自動的に設定された場合があります。
void QOffscreenSurface::setFormat(const QSurfaceFormat &format)
オフスクリーン・サーフェスformat を設定します。
サーフェスのフォーマットはcreate() 関数で解決されます。create() の後にこの関数を呼び出しても、ネイティブサーフェスのサーフェスフォーマットは再解決されません。
format()、create()、destroy()も参照 。
void QOffscreenSurface::setScreen(QScreen *newScreen)
オフスクリーン・サーフェスが接続されているスクリーンを設定します。
オフスクリーン・サーフェスが作成されている場合は、newScreen に再作成されます。
screen()も参照してください 。
[override virtual]
QSize QOffscreenSurface::size() const
再インプリメント:QSurface::size() const.
オフスクリーン・サーフェスのサイズを返します。
[override virtual]
QSurface::SurfaceType QOffscreenSurface::surfaceType() const
再インプリメント:QSurface::surfaceType() const.
オフスクリーン・サーフェスのサーフェス型を返します。
オフスクリーン・サーフェスのサーフェス型は常にQSurface::OpenGLSurface です。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。