QShaderProgram Class
class Qt3DRender::QShaderProgramシェーダープログラムをカプセル化します。詳細...
Header: | #include <QShaderProgram> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
In QML: | ShaderProgram |
Inherits: | Qt3DCore::QNode |
Status: | Deprecated |
パブリックタイプ
enum | Format { GLSL, SPIRV } |
enum | ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute } |
enum | Status { NotReady, Ready, Error } |
プロパティ
|
|
パブリック関数
QByteArray | computeShaderCode() const |
Qt3DRender::QShaderProgram::Format | format() const |
QByteArray | fragmentShaderCode() const |
QByteArray | geometryShaderCode() const |
QString | log() const |
void | setFormat(Qt3DRender::QShaderProgram::Format format) |
void | setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode) |
QByteArray | shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const |
Qt3DRender::QShaderProgram::Status | status() const |
QByteArray | tessellationControlShaderCode() const |
QByteArray | tessellationEvaluationShaderCode() const |
QByteArray | vertexShaderCode() const |
パブリックスロット
void | setComputeShaderCode(const QByteArray &computeShaderCode) |
void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) |
void | setGeometryShaderCode(const QByteArray &geometryShaderCode) |
void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) |
void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) |
void | setVertexShaderCode(const QByteArray &vertexShaderCode) |
シグナル
void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
void | formatChanged(Qt3DRender::QShaderProgram::Format format) |
void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) |
void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) |
void | logChanged(const QString &log) |
void | statusChanged(Qt3DRender::QShaderProgram::Status status) |
void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) |
void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) |
void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) |
静的パブリック・メンバー
QByteArray | loadSource(const QUrl &sourceUrl) |
詳細説明
シェーダプログラムは、頂点シェーダやフラグメントシェーダなどの複数の異なるシェーダから構成されます。
Qt3Dは、シェーダのインスロスペクションの段階でデフォルトユニフォームに遭遇した場合、自動的にデフォルトユニフォームのセットを入力します。
デフォルトユニフォーム | 関連する Qt3D パラメータ名 | GLSL 宣言 |
---|---|---|
モデル行列 | モデルマトリクス | uniform mat4 modelMatrix; |
ビュー行列 | ビュー行列 | 一様な mat4 viewMatrix; |
投影行列 | 投影行列 | 一様な mat4 projectionMatrix; |
モデルビュー行列 | モデルビュー | 一様な mat4 modelView; |
ビュー投影行列 | ビュー射影行列 | 一様な mat4 viewProjectionMatrix; |
モデルビュー投影行列 | modelViewProjection mvp | 一様 mat4 modelViewProjection; 一様 mat4 mvp; |
逆モデル行列 | 逆モデル行列 | 一様 mat4 inverseModelMatrix; |
逆ビュー行列 | 逆ビュー行列 | 一様な mat4 inverseViewMatrix; |
逆投影行列 | 逆投影行列 | 一様な mat4 inverseProjectionMatrix; |
逆モデルビュー行列 | 逆モデルビュー | 一様な mat4 inverseModelView. |
インバースビュー射影行列 | 逆ビュー射影行列 | 一様な mat4 inverseViewProjectionMatrix; |
逆モデルビュー射影行列 | 逆モデルビュー射影 | 一様な mat4 inverseModelViewProjection. |
モデル正規行列 | モデル正規行列 | 一様な mat3 modelNormalMatrix; |
モデルビュー法線行列 | モデルビュー法線 | 一様な mat3 modelViewNormal; |
ビューポート行列 | ビューポート行列 | 一様な mat4 viewportMatrix; |
逆ビューポート行列 | 逆ビューポート行列 | 一様な mat4 inverseViewportMatrix; |
アスペクト比 (面の幅 / 面の高さ) | アスペクト比 | 一様な浮動小数点アスペクト比; |
露出 | 露出 | 一様な float 露出; |
ガンマ | ガンマ | 一様な浮動小数点ガンマ; |
時間 (ナノ秒単位) | 時間 | 一様な float time; |
アイポジション | アイポジション | 一様な vec3 eyePosition; |
スキニングパレット | スキニングパレット[0] | const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; |
RHI サポート
Qt 3D の RHI バックエンドで使用する GLSL 450 シェーダコードを記述する場合、デフォルトのユニフォームは 2 つのユニフォームバッファオブジェクトとして提供されます。
これらのバインディング位置は、RenderViewユニフォームのバインディング0とCommandユニフォームのバインディング1に設定されています。
#version 450 core layout(location = 0) in vec3 vertexPosition; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; mat4 uncorrectedProjectionMatrix; mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; mat4 inverseViewProjectionMatrix; mat4 viewportMatrix; mat4 inverseViewportMatrix; vec4 textureTransformMatrix; vec3 eyePosition; float aspectRatio; float gamma; float exposure; float time; float yUpInNDC; float yUpInFBO; }; layout(std140, binding = 1) uniform qt3d_command_uniforms { mat4 modelMatrix; mat4 inverseModelMatrix; mat4 modelViewMatrix; mat3 modelNormalMatrix; mat4 inverseModelViewMatrix; mat4 modelViewProjection; mat4 inverseModelViewProjectionMatrix; }; void main() { gl_Position = (projectionMatrix * viewMatrix * modelMatrix * vertexPosition); }
ユーザー定義のユニフォームバッファオブジェクトの場合は、バインディングを2またはautoで開始し、Qt 3Dが自動的にバインディングを行うようにしてください。異なるシェーダステージ間で一貫性を保つようにしてください。
#version 450 core layout(std140, binding = auto) uniform my_uniforms { vec4 myColor; }; layout(location=0) out vec4 fragColor; void main() { fragColor = myColor; }
ユニフォームに値を与えることに関しては、変更はありません。
上記の例では、myColor を設定することで完了します:
QParameter *parameter = new QParameter(); parameter->setName("myColor"); parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));
テクスチャはスタンドアロンのユニフォームとして定義する必要があります。
#version 450 core layout(binding=0) uniform sampler2D source; layout(location=0) out vec4 fragColor; void main() { fragColor = texture(source, vec2(0.5, 0.5)); }
メンバ型ドキュメント
enum QShaderProgram::Format
この列挙型は、使用されるシェーダーコードのフォーマットを識別する。
定数 | 値 | 説明 |
---|---|---|
Qt3DRender::QShaderProgram::GLSL | 0 | OpenGL |
Qt3DRender::QShaderProgram::SPIRV | 1 | Vulkan、OpenGL 5 |
enum QShaderProgram::ShaderType
この列挙型は、使用されるシェーダーのタイプを識別します。
定数 | 値 | 説明 |
---|---|---|
Qt3DRender::QShaderProgram::Vertex | 0 | 頂点シェーダー |
Qt3DRender::QShaderProgram::Fragment | 1 | フラグメントシェーダ |
Qt3DRender::QShaderProgram::TessellationControl | 2 | テセレーション制御シェーダ |
Qt3DRender::QShaderProgram::TessellationEvaluation | 3 | テセレーション評価シェーダ |
Qt3DRender::QShaderProgram::Geometry | 4 | ジオメトリ・シェーダ |
Qt3DRender::QShaderProgram::Compute | 5 | 計算シェーダ |
enum QShaderProgram::Status
この列挙型は、使用されるシェーダのステータスを識別します。
定数 | 値 | 説明 |
---|---|---|
Qt3DRender::QShaderProgram::NotReady | 0 | シェーダはまだコンパイルおよびリンクされていません。 |
Qt3DRender::QShaderProgram::Ready | 1 | シェーダは正常にコンパイルされました。 |
Qt3DRender::QShaderProgram::Error | 2 | シェーダのコンパイル中にエラーが発生した |
プロパティのドキュメント
computeShaderCode : QByteArray
このシェーダープログラムで使用されるコンピュートシェーダコードを保持します。
アクセス関数:
QByteArray | computeShaderCode() const |
void | setComputeShaderCode(const QByteArray &computeShaderCode) |
ノーティファイアシグナル:
void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
format : Format
ShaderProgram で提供されるコードのフォーマットを保持します。 デフォルトはShaderProgram.GLSL です。
アクセス関数:
Qt3DRender::QShaderProgram::Format | format() const |
void | setFormat(Qt3DRender::QShaderProgram::Format format) |
通知シグナル:
void | formatChanged(Qt3DRender::QShaderProgram::Format format) |
fragmentShaderCode : QByteArray
このシェーダープログラムが使用するフラグメントシェーダコードを保持します。
関数にアクセスします:
QByteArray | fragmentShaderCode() const |
void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) |
ノーティファイアシグナル:
void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) |
geometryShaderCode : QByteArray
このシェーダープログラムが使用するジオメトリシェーダコードを保持します。
関数にアクセスします:
QByteArray | geometryShaderCode() const |
void | setGeometryShaderCode(const QByteArray &geometryShaderCode) |
ノーティファイアシグナル:
void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) |
[read-only]
log : const QString
現在のシェーダープログラムのログを保持します。シェーダープログラムのコンパイル失敗を診断するのに便利です。
アクセス関数:
QString | log() const |
通知シグナル:
void | logChanged(const QString &log) |
[read-only]
status : const Status
現在のシェーダープログラムの状態を保持します。
アクセス関数:
Qt3DRender::QShaderProgram::Status | status() const |
ノーティファイアシグナル:
void | statusChanged(Qt3DRender::QShaderProgram::Status status) |
tessellationControlShaderCode : QByteArray
このシェーダプログラムが使用するテッセレーションコントロールシェーダコードを保持します。
関数にアクセスします:
QByteArray | tessellationControlShaderCode() const |
void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) |
ノーティファイアシグナル:
void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) |
tessellationEvaluationShaderCode : QByteArray
このシェーダプログラムが使用するテッセレーション評価シェーダコードを保持します。
関数にアクセスします:
QByteArray | tessellationEvaluationShaderCode() const |
void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) |
通知シグナル
void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) |
vertexShaderCode : QByteArray
このシェーダプログラムが使用する頂点シェーダコードを保持する。
アクセス機能
QByteArray | vertexShaderCode() const |
void | setVertexShaderCode(const QByteArray &vertexShaderCode) |
通知シグナル
void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) |
メンバ関数ドキュメント
[static invokable]
QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
sourceUrl からロードされたシェーダーコードを返します。
注意: この関数はメタオブジェクトシステムや QML から呼び出すことができます。Q_INVOKABLE を参照してください。
void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)
type のシェーダーコードをshaderCode に設定します。
shaderCode()も参照してください 。
QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const
type のシェーダーコードを返します。
setShaderCode() も参照して ください。
Qt3DRender::QShaderProgram::Status QShaderProgram::status() const
現在のシェーダ・プログラムの状態を返します。
注: プロパティ・ステータス用のゲッター関数です。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。