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::GLSL0OpenGL
Qt3DRender::QShaderProgram::SPIRV1Vulkan、OpenGL 5

enum QShaderProgram::ShaderType

この列挙型は、使用されるシェーダーのタイプを識別します。

定数説明
Qt3DRender::QShaderProgram::Vertex0頂点シェーダ
Qt3DRender::QShaderProgram::Fragment1フラグメントシェーダ
Qt3DRender::QShaderProgram::TessellationControl2テセレーション制御シェーダ
Qt3DRender::QShaderProgram::TessellationEvaluation3テセレーション評価シェーダ
Qt3DRender::QShaderProgram::Geometry4ジオメトリ・シェーダ
Qt3DRender::QShaderProgram::Compute5計算シェーダ

enum QShaderProgram::Status

この列挙型は、使用されているシェーダーの状態を識別します。

定数説明
Qt3DRender::QShaderProgram::NotReady0シェーダはまだコンパイルおよびリンクされていません。
Qt3DRender::QShaderProgram::Ready1シェーダは正常にコンパイルされました。
Qt3DRender::QShaderProgram::Error2シェーダのコンパイル中にエラーが発生した

プロパティの説明

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.