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 をゼロに設定してsourceItem を隠すと、入力に反応しなくなります。ShaderEffectSource がsourceItem を置き換えることを意図している場合、通常、入力を処理しながらsourceItem を非表示にします。この場合、hideSource プロパティを使用します。

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

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

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

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

プロパティ・ドキュメンテーション

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 に到達するのを防ぐことはできません。このプロパティは、ShaderEffectSourcesourceItem の上に固定され、 を置き換えることを意図している場合に便利です。


live : bool

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


mipmap : bool

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

注意: OpenGL ES 2の実装によっては、非2乗テクスチャのミップマップをサポートしていないものもあります。


recursive : bool

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

このプロパティと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

このプロパティは、テクスチャの要求ピクセルサイズを保持します。デフォルトである空の場合、ソース矩形のサイズが使用されます。

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

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


wrapMode : enumeration

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

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

定数説明
ShaderEffectSource.ClampToEdgeGL_CLAMP_TO_EDGE 水平方向と垂直方向の両方
ShaderEffectSource.RepeatHorizontally水平方向に GL_REPEAT、垂直方向に GL_CLAMP_TO_EDGE
ShaderEffectSource.RepeatVerticallyGL_CLAMP_TO_EDGE 水平方向、GL_REPEAT 垂直方向
ShaderEffectSource.RepeatGL_REPEAT 水平方向と垂直方向の両方

注意: いくつかの OpenGL ES 2 実装は、非2乗テクスチャの GL_REPEAT ラップモードをサポートしていません。


メソッドの説明

scheduleUpdate()

次のフレームのためにテクスチャの再レンダリングをスケジューリングします。live が false のときにテクスチャを更新するために使用します。


本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。