Spec-Zone.ru › Qt 6.0

Класс QShaderProgram

класс Qt3DRender::QShaderProgram

Оборачивает программу шейдеров. Подробнее...

Заголовок: #include <QShaderProgram>
CMake: find_package(Qt6 COMPONENTS 3drender REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
С момента: Qt 5.5
Инициализируется: ShaderProgram
Наследует: Qt3DCore::QNode
  • Список всех членов, включая унаследованные

Типы публичного доступа

Перечисление Формат { GLSL, SPIRV }
Перечисление ТипШейдера { Вершинный, Фрагментный, УправлениеТиссацией, ОценкаТиссации, Геометрия, Вычисление }
Перечисление Статус { НеГотово, Готово, Ошибка }

Свойства

  • computeShaderCode : QByteArray
  • формат : Формат
  • кодФрагментногоШейдера : QByteArray
  • кодГеометрическогоШейдера : QByteArray
  • лог : const QString
  • статус : const Статус
  • кодШейдераУправленияТиссацией : QByteArray
  • кодШейдераОценкиТиссации : QByteArray
  • кодВершинногоШейдера : QByteArray

Открытые функции

QByteArray computeShaderCode() const
Qt3DRender::QShaderProgram::Формат формат() const
QByteArray кодФрагментногоШейдера() const
QByteArray кодГеометрическогоШейдера() const
QString лог() const
void установитьФормат(Qt3DRender::QShaderProgram::Формат формат)
void установитьКодШейдера(Qt3DRender::QShaderProgram::ТипШейдера тип, const QByteArray &кодШейдера)
QByteArray кодШейдера(Qt3DRender::QShaderProgram::ТипШейдера тип) const
Qt3DRender::QShaderProgram::Статус статус() const
QByteArray кодШейдераУправленияТиссацией() const
QByteArray кодШейдераОценкиТиссации() const
QByteArray кодВершинногоШейдера() const

Открытые слоты

void установитьКодВычислительногоШейдера(const QByteArray &computeShaderCode)
void установитьКодФрагментногоШейдера(const QByteArray &fragmentShaderCode)
void установитьКодГеометрическогоШейдера(const QByteArray &geometryShaderCode)
void установитьКодШейдераУправленияТиссацией(const QByteArray &tessellationControlShaderCode)
void установитьКодШейдераОценкиТиссации(const QByteArray &tessellationEvaluationShaderCode)
void установитьКодВершинногоШейдера(const QByteArray &vertexShaderCode)

Сигналы

void изменениеКодаВычислительногоШейдера(const QByteArray &computeShaderCode)
void изменениеФормата(Qt3DRender::QShaderProgram::Формат формат)
void изменениеКодаФрагментногоШейдера(const QByteArray &fragmentShaderCode)
void изменениеКодаГеометрическогоШейдера(const QByteArray &geometryShaderCode)
void изменениеЛога(const QString &log)
void изменениеСтатуса(Qt3DRender::QShaderProgram::Статус статус)
void изменениеКодаШейдераУправленияТиссацией(const QByteArray &tessellationControlShaderCode)
void изменениеКодаШейдераОценкиТиссации(const QByteArray &tessellationEvaluationShaderCode)
void изменениеКодаВершинногоШейдера(const QByteArray &vertexShaderCode)

Статические открытые члены

QByteArray загрузитьИсходник(const QUrl &sourceUrl)

Подробное описание

Программа шейдеров состоит из нескольких разных шейдеров, таких как вершинный и фрагментный.

Qt3D автоматически заполнит набор стандартных переменных, если они встретятся во время фазы интроспекции шейдера.

END_OF_DOCUMENT_MARKER
Умолчание Uniform Соответствующее имя параметра Qt3D Объявление GLSL
ModelMatrix modelMatrix uniform mat4 modelMatrix;
ViewMatrix viewMatrix uniform mat4 viewMatrix;
ProjectionMatrix projectionMatrix uniform mat4 projectionMatrix;
ModelViewMatrix modelView uniform mat4 modelView;
ViewProjectionMatrix viewProjectionMatrix uniform mat4 viewProjectionMatrix;
ModelViewProjectionMatrix modelViewProjection mvp uniform mat4 modelViewProjection; uniform mat4 mvp;
ОбратнаяModelMatrix inverseModelMatrix uniform mat4 inverseModelMatrix;
ОбратнаяViewMatrix inverseViewMatrix uniform mat4 inverseViewMatrix;
ОбратнаяProjectionMatrix inverseProjectionMatrix uniform mat4 inverseProjectionMatrix;
ОбратнаяModelViewMatrix inverseModelView uniform mat4 inverseModelView;
ОбратнаяViewProjectionMatrix inverseViewProjectionMatrix uniform mat4 inverseViewProjectionMatrix;
ОбратнаяModelViewProjectionMatrix inverseModelViewProjection uniform mat4 inverseModelViewProjection;
Матрица нормалей Model modelNormalMatrix uniform mat3 modelNormalMatrix;
Матрица нормалей ModelView modelViewNormal uniform mat3 modelViewNormal;
ViewportMatrix viewportMatrix uniform mat4 viewportMatrix;
ОбратнаяViewportMatrix inverseViewportMatrix uniform mat4 inverseViewportMatrix;
Соотношение сторон (ширина поверхности / высота поверхности) aspectRatio uniform float aspectRatio;
Экспозиция exposure uniform float exposure;
Гамма gamma uniform float gamma;
Время (в наносекундах) time uniform float time;
Положение глаза eyePosition uniform vec3 eyePosition;
Palette Skinning skinningPalette[0] const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints];

Поддержка RHI

При написании кода GLSL 450 для использования с бэкендом RHI Qt 3D будут предоставлены стандартные uniform как 2 uniform buffer object.

Место привязки для этих значений установлено на привязки 0 для RenderView uniform и 1 для Command uniform.

#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);
}

Для пользовательских uniform buffer object используйте привязки, начиная с 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;
}

При передаче значений uniform никаких изменений не требуется.

Например, для установки myColor можно сделать так:

Документация по типам членов

[since 5.15] перечисление QShaderProgram::Format

Это перечисление определяет формат используемого кода шейдера.

Константа Значение Описание
Qt3DRender::QShaderProgram::GLSL 0 OpenGL
Qt3DRender::QShaderProgram::SPIRV 1 Vulkan, OpenGL 5

Это перечисление было добавлено или изменено в Qt 5.15.

перечисление QShaderProgram::ShaderType

Это перечисление определяет тип используемого шейдера.

Константа Значение Описание
Qt3DRender::QShaderProgram::Vertex 0 Вершинный шейдер
Qt3DRender::QShaderProgram::Fragment 1 Фрагментный шейдер
Qt3DRender::QShaderProgram::TessellationControl 2 Управляющий шейдер tessellation
Qt3DRender::QShaderProgram::TessellationEvaluation 3 Шейдер вычисления tessellation
Qt3DRender::QShaderProgram::Geometry 4 Геометрический шейдер
Qt3DRender::QShaderProgram::Compute 5 Шейдер вычислений

перечисление 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)

[since 5.15] format : Формат

Содержит формат кода, предоставленного в ShaderProgram. По умолчанию — ShaderProgram.GLSL

Это свойство было добавлено в Qt 5.15.

Функции доступа:

Qt3DRender::QShaderProgram::Формат format() const
void setFormat(Qt3DRender::QShaderProgram::Формат format)

Сигнал уведомления:

void formatChanged(Qt3DRender::QShaderProgram::Формат 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] состояние : const Состояние

Содержит состояние текущей программы шейдеров.

Функции доступа:

Qt3DRender::QShaderProgram::Состояние состояние() const

Сигнал уведомления:

void statusChanged(Qt3DRender::QShaderProgram::Состояние 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] QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)

Возвращает код шейдера, загруженный из sourceUrl.

Примечание: Эту функцию можно вызвать через систему метаобъектов и из QML. См. Q_INVOKABLE.

void QShaderProgram::setShaderCode(Тип шейдера Qt3DRender::QShaderProgram type, const QByteArray &shaderCode)

Устанавливает код шейдера для type шейдера в shaderCode.

См. также shaderCode().

QByteArray QShaderProgram::shaderCode(Тип шейдера Qt3DRender::QShaderProgram type) const

Возвращает код шейдера для type.

См. также setShaderCode().

Состояние Qt3DRender::QShaderProgram QShaderProgram::состояние() const

Возвращает состояние текущей программы шейдеров.

Примечание: Функция-член для свойства состояния.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qt3drender-qshaderprogram.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API