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::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

現在のシェーダ・プログラムの状態を返します。

注: プロパティ・ステータス用のゲッター関数です。

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