このページでは

Qt3DRender::QShaderProgram Class

class Qt3DRender::QShaderProgram

シェーダープログラムをカプセル化します。詳細...

ヘッダー: #include <qshaderprogram.h>
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 宣言
ModelMatrixmodelMatrixuniform mat4 modelMatrix;
ViewMatrixviewMatrixuniform mat4 viewMatrix;
投影行列projectionMatrixuniform mat4 projectionMatrix;
ModelViewMatrixmodelViewuniform mat4 modelView;
ViewProjectionMatrixviewProjectionMatrixuniform mat4 ビュー投影行列;
ModelViewProjectionMatrixmodelViewProjection
mvp
uniform mat4 modelViewProjection;
uniform mat4 mvp;
InverseModelMatrixinverseModelMatrixuniform mat4 inverseModelMatrix;
逆ビュー行列逆ビュー行列uniform mat4 inverseViewMatrix;
逆投影行列逆投影行列uniform mat4 inverseProjectionMatrix;
モデルビュー行列の逆行列逆モデルビュー行列uniform mat4 inverseModelView;
逆ビュー投影行列逆ビュー投影行列uniform mat4 inverseViewProjectionMatrix;
逆モデルビュー投影行列逆モデルビュー投影行列uniform mat4 inverseModelViewProjection;
モデル法線行列modelNormalMatrixuniform mat3 modelNormalMatrix;
ModelViewNormalMatrixmodelViewNormaluniform mat3 modelViewNormal;
ビューポート行列ビューポート行列uniform mat4 ビューポート行列;
逆ビューポート行列inverseViewportMatrixuniform mat4 inverseViewportMatrix;
アスペクト比
(サーフェスの幅 / サーフェスの高さ)
aspectRatioxml-ph-0000@deepl.internal (サーフェスの幅 / サーフェスの高さ)uniform float aspectRatio;
露光exposureuniform float exposure;
ガンマガンマ均一な浮動小数点ガンマ;
時間
(ナノ秒単位)
timeuniform float time;
EyePositioneyePositionuniform vec3 eyePosition;
スキニングパレットskinningPalette[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)

Notifierシグナル:

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

現在のシェーダープログラムのログを保持します。これは、シェーダープログラムのコンパイルエラーを診断する際に役立ちます。

アクセス関数:

QString log() const

通知シグナル:

void logChanged(const QString &log)

[read-only] status : 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)

shaderのtype のシェーダーコードを、shaderCode に設定します。

shaderCode()も参照してください 。

QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const

type のシェーダーコードを返します。

setShaderCode()も参照してください 。

Qt3DRender::QShaderProgram::Status QShaderProgram::status() const

現在のシェーダープログラムのステータスを返します。

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

© 2026 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.