このページでは

ShaderEffectSource QML Type

特定の Qt Quick アイテムをテクスチャに変換して表示します。詳細...

Import Statement: import QtQuick
Inherits:

Item

プロパティ

方法

詳細な説明

ShaderEffectSource 型は、sourceItem をテクスチャにレンダリングし、シーン内に表示します。sourceItem は、まるで完全に不透明なルートアイテムであるかのようにテクスチャに描画されます。したがって、sourceItem 自体は非表示であっても、テクスチャ上には表示されます。

ShaderEffectSourceは、次のように使用できます:

  • ShaderEffect 内のテクスチャソースとして使用できます。これにより、任意の Qt Quick アイテムに適用できます。
  • 複雑なアイテムのキャッシュとして。複雑なアイテムをテクスチャに一度レンダリングしておけば、フレームごとにそのアイテムを再度レンダリングすることなく、自由にアニメーションさせることができます。
  • 不透明度レイヤーとして。ShaderEffectSource を使用すると、各アイテムを個別に処理するのではなく、アイテムをグループとしてまとめて不透明度を適用できます。

シェーダーエフェクトのソースとしてレンダリングされた、重なり合う色付きの矩形

import QtQuick 2.0

Rectangle {
    width: 200
    height: 100
    gradient: Gradient {
        GradientStop { position: 0; color: "white" }
        GradientStop { position: 1; color: "black" }
    }
    Row {
        opacity: 0.5
        Item {
            id: foo
            width: 100; height: 100
            Rectangle { x: 5; y: 5; width: 60; height: 60; color: "red" }
            Rectangle { x: 20; y: 20; width: 60; height: 60; color: "orange" }
            Rectangle { x: 35; y: 35; width: 60; height: 60; color: "yellow" }
        }
        ShaderEffectSource {
            width: 100; height: 100
            sourceItem: foo
        }
    }
}

ShaderEffectSource タイプは、マウスやキーボードの入力をsourceItem にリダイレクトしません。visible をfalseに設定するか、opacity を0に設定してsourceItem を非表示にすると、入力に反応しなくなります。ShaderEffectSourceがsourceItem の代わりとなる場合、通常はsourceItem を非表示にしながらも入力を処理したいものです。そのためには、hideSource プロパティを使用できます。

ShaderEffectSource とMultiEffect を組み合わせることができます:

  • 複数のエフェクトで同じソースアイテムを使用し、その内容を変更しないようにするには。
  • ShaderEffectSource.sourceRect を使用して、ソースアイテムの一部のみを使用する場合。
  • ShaderEffectSource.textureSize プロパティを使用して、ソースアイテムの解像度を下げる(例:パフォーマンス向上のため)。

注:ShaderEffectSourceは 、エッジのアンチエイリアシングを行うためにFBOマルチサンプリングのサポートに依存しています。基盤となるハードウェアがこれをサポートしていない場合(ほとんどの組み込みグラフィックスチップが該当します)、ShaderEffectSource内でレンダリングされたエッジにはアンチエイリアシングが適用されません。 これを改善する1つの方法は、エフェクトソースのサイズを2倍にし、smooth: true を使用してレンダリングすることです(これは smooth のデフォルト値です)。これにより、4倍のマルチサンプリングと同等の効果が得られますが、その代償としてパフォーマンスが低下し、メモリ使用量が増加します。

警告:ほとんどの場合 、ShaderEffectSourceを使用するとパフォーマンスが低下し、いずれの場合もビデオメモリの使用量が増加します。また、一部のOpenGL実装ではマルチサンプリングされたバックバッファはサポートしているものの、マルチサンプリングされたフレームバッファオブジェクトはサポートしていないため、ShaderEffectSourceを介したレンダリングでは画質が低下する可能性があります。

プロパティのドキュメント

format : enumeration

このプロパティは、バッキングテクスチャの形式を定義します。このプロパティを変更するのは、そのアイテムがShaderEffect のソーステクスチャとして使用される場合に最も意味があります。

定数説明
ShaderEffectSource.RGBA8 
ShaderEffectSource.RGBA16F 
ShaderEffectSource.RGBA32F 
ShaderEffectSource.AlphaQt 6.0 以降、この値は使用されておらず、実際には `RGBA8 ` と同じ効果があります。
ShaderEffectSource.RGBQt 6.0 以降、この値は使用されておらず、実際には `RGBA8 ` と同じ効果を持ちます。
ShaderEffectSource.RGBAQt 6.0 以降、この値は使用されておらず、実際にはRGBA8 と同じ効果があります。

hideSource : bool

このプロパティが true の場合、sourceItem は非表示になりますが、テクスチャ内には引き続きレンダリングされます。visible を false に設定してsourceItem を非表示にするのとは異なり、このプロパティを true に設定しても、マウスやキーボードからの入力がsourceItem に届くのを妨げることはありません。このプロパティは、ShaderEffectSource がsourceItem の上にアンカーされ、それを置き換えることを意図している場合に役立ちます。

live : bool

このプロパティが true の場合、sourceItem が更新されるたびにテクスチャも更新されます。そうでない場合、sourceItem に新しいアイテムが割り当てられたとしても、テクスチャは固定された画像のままになります。このプロパティのデフォルト値は true です。

mipmap : bool

このプロパティが true の場合、そのテクスチャに対してミップマップが生成されます。

注:一部の OpenGL ES 2 実装では、2 のべき乗でないテクスチャのミップマッピングをサポートしていません。

recursive : bool

ShaderEffectSource がそれ自体に依存関係を持つ場合は、このプロパティをtrueに設定します。ShaderEffectSourcesは依存チェーンを形成しており、あるShaderEffectSource が別の のsourceItem の一部となる場合があります。このチェーンにループが存在する場合、ShaderEffectSource がソースとして使用しているのと同じテクスチャにレンダリングしようとしてしまう可能性があり、これはOpenGLでは許可されていません。 このプロパティを true に設定すると、ShaderEffectSource が前のフレームのテクスチャのコピーを保持できるように、追加のテクスチャが割り当てられます。これにより、あるテクスチャにレンダリングを行いながら、前のフレームのテクスチャをソースとして使用することが可能になります。

このプロパティとlive の両方をtrueに設定すると、シーングラフは継続的にレンダリングされます。ShaderEffectSource はそれ自体に依存しているため、更新されると即座に再び「ダーティ」状態になります。

samples : int

このプロパティを使用すると、マルチサンプリングによるレンダリングを要求することができます。

デフォルトでは、使用中のシーングラフレンダラーおよび基盤となるグラフィックスAPIがこれをサポートしていることを前提として、ウィンドウ全体でマルチサンプリングが有効になっている場合は、常にマルチサンプリングが有効になります。

このプロパティの値を 2、4 などに設定することで、シーン全体に対してマルチサンプリングを有効にすることなく、シーンの一部に対してマルチサンプリングによるレンダリングを要求することができます。これにより、マルチサンプリングは指定されたサブツリーにのみ適用されるため、シーンの他の部分にはマルチサンプリングが適用されないことから、パフォーマンスが大幅に向上する可能性があります。

注: マルチサンプリングの有効化は 、レイヤーのサイズにかかわらず、ハードウェアやドライバに依存するパフォーマンスおよびメモリのオーバーヘッドを伴うため、処理負荷が高くなる可能性があります。

注:この プロパティは、マルチサンプル・レンダリングバッファおよびフレームバッファ・ブリットのサポートが利用可能な場合にのみ機能します。それ以外の場合は、値は黙って無視されます。

sourceItem : Item

このプロパティには、テクスチャにレンダリングされるアイテムが格納されます。live がtrueの状態でこれをnullに設定すると、テクスチャリソースが解放されます。

sourceRect : rect

このプロパティは、sourceItem のどの矩形領域をテクスチャにレンダリングするかを定義します。ソースとなる矩形は、sourceItem 自体よりも大きくてもかまいません。矩形がnullの場合(これがデフォルトです)、sourceItem 全体がテクスチャにレンダリングされます。

textureMirroring : enumeration

このプロパティは、生成された OpenGL テクスチャのミラーリング方法を定義します。デフォルト値は `ShaderEffectSource.MirrorVertically` です。ShaderEffect で指定されるようなカスタムシェーダーから生成されたテクスチャに直接アクセスする場合、カスタムミラーリングが役立つことがあります。ミラーリングは、ShaderEffectSource アイテム自体の UI 上の表示には影響しません。

定数説明
ShaderEffectSource.NoMirroringミラーリングなし
ShaderEffectSource.MirrorHorizontally生成されたテクスチャは X 軸を中心に反転されます。
ShaderEffectSource.MirrorVertically生成されたテクスチャは Y 軸を中心に反転されます。

textureSize : size

このプロパティには、テクスチャの指定されたピクセルサイズが格納されます。空の場合(これがデフォルトです)、ソース矩形のサイズが使用されます。

注:この 値は、テクスチャオブジェクトのサイズを直接制御するため、ピクセル単位で指定されます。

注: プラットフォームによっては 、フレームバッファオブジェクトの最小サイズに制限がある場合があります。そのため、実際のテクスチャサイズは要求されたサイズよりも大きくなる可能性があります。

wrapMode : enumeration

このプロパティは、テクスチャに関連付けられた OpenGL のラップモードを定義します。このプロパティを変更するのは、そのアイテムが「ShaderEffect 」のソーステクスチャとして使用される場合に最も意味があります。

デフォルト値は `ShaderEffectSource.ClampToEdge` です。

定数説明
ShaderEffectSource.ClampToEdge水平方向と垂直方向の両方で GL_CLAMP_TO_EDGE
ShaderEffectSource.RepeatHorizontally水平方向に GL_REPEAT、垂直方向に GL_CLAMP_TO_EDGE
ShaderEffectSource.RepeatVertically水平方向に GL_CLAMP_TO_EDGE、垂直方向に GL_REPEAT水平方向および垂直方向に GL_CLAMP_TO_EDGE
ShaderEffectSource.Repeat水平方向・垂直方向ともに GL_REPEAT

注:一部の OpenGL ES 2 実装では、2 の冪でないテクスチャに対する GL_REPEAT ラップモードがサポートされていません。

メソッドのドキュメント

void scheduleUpdate()

次のフレームに向けてテクスチャの再描画をスケジュールします。live がfalseのときにテクスチャを更新する場合にこれを使用してください。

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