QShaderProgram Class
class Qt3DRender::QShaderProgramシェーダープログラムをカプセル化します。詳細...
ヘッダー | #include <QShaderProgram> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake | QT += 3drender |
QML で | ShaderProgram |
を継承しています: | Qt3DCore::QNode |
ステータス | 非推奨 |
パブリックな型
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); }
ユーザー定義のユニフォーム・バッファ・オブジェクトの場合は、Qt 3D に自動的にバインディングを行わせるために、2またはautoで始まるバインディングを使用してください。異なるシェーダステージ間で一貫性を保つようにしてください。
#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
現在のシェーダプログラムの状態を返します。
注: プロパティ状態のゲッター関数です。
© 2025 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.